Excel: Limitations de passage de tableaux vers Excel à l'aide d'Automation

Traductions disponibles Traductions disponibles
Numéro d'article: 177991 - Voir les produits auxquels s'applique cet article
Agrandir tout | Réduire tout

Sommaire

Résumé

Cet article traite des limitations de passage de tableaux à des feuilles de calcul Microsoft Excel et les macros à l'aide d'Automation. Si ces limitations sont dépassées, les erreurs d'exécution peut s'afficher dans votre code Automation.

Plus d'informations

Microsoft fournit des exemples de programmation à des fins d'illustration uniquement, sans garantie expresse ou implicite, y compris, sans que cela soit limitatif, les garanties implicites de qualité marchande et/ou d'adéquation à un usage particulier. Cet article suppose que vous connaissez le langage de programmation présenté et les outils utilisés pour créer et déboguer des procédures. Les techniciens du support technique Microsoft peuvent vous aider à comprendre la fonctionnalité d'une procédure particulière, mais ils ne modifieront pas ces exemples pour fournir des fonctionnalités supplémentaires ou créer des procédures répondant à vos besoins spécifiques.
Si vous ne maîtrisez que partiellement la programmation, il convient contacter un partenaire certifié Microsoft ou les services de conseil Microsoft. Pour plus d'informations, visitez ces sites Web de Microsoft :

Microsoft certifié partners - https://partner.microsoft.com/global/30000104

Avis de Microsoft Services - http://support.microsoft.com/gp/advisoryservice

Pour plus d'informations sur les options de support technique disponibles et sur la façon de contacter Microsoft, reportez-vous au site Web de Microsoft à l'adresse suivante : http://support.microsoft.com/default.aspx?scid=fh;EN-US;CNTACTMSLors du passage de tableaux à Microsoft Excel à l'aide d'Automation, les limitations suivantes s'appliquent en fonction de la version d'Excel et si vous passez le tableau à une plage de feuille de calcul ou comme argument d'une macro. Consultez les notes de bas de page appropriés, suivant le tableau pour plus d'informations.
   Version of          Passing Array to     Passing Array to
   Microsoft Excel     Worksheet Range      Macro (Procedure)
   ----------------------------------------------------------

   5.0                        A                B,C

   7.0 (Excel 95)             D                E,C,H

   8.0 (Excel 97)             F                G,H

   9.0 (Excel 2000)           F                G,H

				

Notes de bas de page

A:

Le nombre maximal d'éléments dans le tableau est environ 6550. Si vous dépassez cette limite, vous recevez une ou les deux messages d'erreur suivants :
De mémoire
1005 : Impossible de définir la propriété Value de la classe Range
Le nombre maximal d'éléments dans le tableau que vous pouvez passer à Excel à l'aide de la fonction Excel transposer est 4095. Si vous dépassez cette limite, vous recevez message d'erreur suivantes :
Erreur d'exécution '1004' :
Transposer la méthode de classe d'application a échoué
B :

Le nombre maximal d'éléments dans le tableau est 4095. Si vous dépassez cette limite, message d'erreur suivant peut s'afficher :
Erreur d'exécution '1004' :
Exécution de méthode de classe d'application a échoué
Remarque : En passant un tableau multidimensionnel, vous ne pouvez pas recevoir un message d'erreur mais Excel macro se n'exécute pas lorsque le nombre total d'éléments dépasse 4095.

C:

Lorsque vous définissez le paramètre de tableau dans la macro de Excel, il doit être défini comme une variable Variant quoi vous recevez message d'erreur suivantes lorsque vous tentez d'exécuter la macro à l'aide d'Automation :
Erreur d'exécution '1004' :
Impossible de trouver macro < nom macro >
Par exemple, supposons que le nom de votre macro dans Excel est AcceptArray. Voici un exemple de comment le tableau doit être défini dans la macro de Excel :
   Public Sub AcceptArray(ByVal myarray As Variant)
      ' You can pass the parameter either ByVal or ByRef.
      ' To determine the number of elements in the array, use
      ' the UBound function.
   End Sub
				
D:

Le nombre maximal d'éléments dans le tableau est 5461. Si vous dépassez cette limite, vous recevez un des messages d'erreur suivant :
Erreur d'exécution '1004' :
Transposer la méthode de classe d'application a échoué
- ou -
Erreur d'exécution '1005' :
Impossible de définir la propriété Value de la classe Range
E:

Le nombre maximal d'éléments dans le tableau est 5461. Si vous dépassez cette limite, vous recevez message d'erreur suivantes :
Erreur d'exécution '1004' :
Exécution de méthode de classe d'application a échoué
F:

Le nombre maximal d'éléments dans le tableau est limité par la mémoire disponible ou le Excel taille maximale des feuilles de calcul (65 536 lignes X 256 colonnes). Toutefois, le nombre maximal d'éléments dans le tableau que vous pouvez passer à Excel à l'aide de la transposer Excel fonction est 5461. Si vous dépassez cette limite, vous recevez message d'erreur suivantes :
Erreur d'exécution '13' :
Incohérence de type
G:

Le nombre maximal d'éléments dans le tableau est limité uniquement par la mémoire disponible. En outre, il est inutile de définir le paramètre comme une variable de type Variant dans la macro de Excel. Toutefois, si vous souhaitez passer le tableau ByVal, vous devez définir le paramètre comme une variable de type Variant comme dans l'exemple à la note C plus haut dans cet article. Vous obtiendrez une erreur d'exécution 13, "Incompatibilité de type" erreur, si vous ne définissez pas la variable en tant que Variant.

H :

Lorsque vous transmettez un argument ByRef à une Automation out-of-process serveur, comme Excel, marshaling de données sont effectuée entre l'Automation contrôleur (ou client) et le serveur depuis qu'ils s'exécutent dans des processus distincts. Cela signifie que lorsqu'un tableau est passé à Excel à l'aide de ByRef, une copie du tableau est envoyée à l'espace d'adressage d'Excel. Une fois la procédure d'Excel exécutée, une copie du tableau est passée au client. Cela permet de passer des arguments à l'aide de ByRef vers un serveur out-of-process, il n'est pas très efficace. En revanche, lorsque utilisez un serveur d'automatisation in-process (une dynamic-link bibliothèque (DLL)) et que vous passez un argument ByRef, ceci est très efficace dans la mesure où aucun marshaling ne s'effectue. Le serveur utilise la même baie en mémoire que le client. Cela est possible dans la mesure où le serveur s'exécute dans le même espace d'adressage en tant que client.

En raison de marshaling avec un serveur out-of-process comme Excel, il est plus efficace pour passer le tableau ByVal au lieu de ByRef. Cette façon, qu'une seule copie est passée à Excel et Excel n'a pas à la copie retransférer au client. Pour passer un tableau ByVal pour une macro Excel, vous devez définir le paramètre dans la macro de Excel comme une variable de type Variant. Voir note C plus haut dans cet article pour obtenir un exemple.

Procédures de Visual Basic exemple

Exemple de la suivante Microsoft Visual Basic pour Applications Sub procédures décrivent la manière de passer des tableaux dans Excel. Les deux premières procédures montrent comment remplir une plage de cellules dans une feuille de calcul en passant un tableau à une plage de feuille de calcul. La troisième procédure montre comment passer un tableau à une macro Excel.

Les déclarations suivantes sont utilisées avec chaque exemple :
Option explicite
Privé xlApp As Object
Privé xlBook As Object
Privé xlSheet As Object
En passant un tableau 1-dimensionnel à une plage de feuille de calcul :
   Public Sub OneDimension()
      Const size = 5461
      Dim myarray(1 To size) As Integer
      Set xlApp = CreateObject("Excel.Application")
      xlApp.Visible = True
      Set xlBook = xlApp.Workbooks.Add
      Set xlSheet = xlBook.Worksheets("Sheet1")
      xlSheet.Cells(1, 1).Resize(size, 1).Value = _
         xlApp.Application.Transpose(myarray)
   End Sub
				
passant un tableau 2-dimensionnel sur une plage d'une feuille de calcul :
   Public Sub TwoDimension()
      Const size = 2730
      Dim myarray(1 To size, 1 To 2) As Integer
      ' Number of elements = 2730 * 2 = 5460.
      Set xlApp = CreateObject("Excel.Application")
      xlApp.Visible = True
      Set xlBook = xlApp.Workbooks.Add
      Set xlSheet = xlBook.Worksheets("Sheet1")
      xlSheet.Cells(1, 1).Resize(size, 2).Value = myarray
   End Sub
				
passant un tableau en tant qu'argument à une Macro Excel :
   Public Sub RunExcelMacro()
      Const size = 5461
      Dim myarray(1 To size) As Integer
      Set xlApp = CreateObject("Excel.Application")
      xlApp.Visible = True
      Set xlBook = xlApp.Workbooks.Open("C:\MyBook.xls")
      xlApp.Run "AcceptArray", myarray
   End Sub
				
AcceptArray la procédure au sein d'un module à l'intérieur C:\MyBook.xls semblables aux suivantes :
   Option Explicit

   Public Sub AcceptArray(ByVal myarray As Variant)
      MsgBox "Size of first dimension: " & UBound(myarray, 1)
   End Sub
				

Références

Pour plus d'informations sur les baies et Excel, consultez les articles suivants dans la base de connaissances Microsoft :
166342XL97 : Taille de tableau maximale dans Microsoft Excel 97

153307HOWTO : Appeler des Macros Microsoft Excel qui prennent des paramètres

153090Comment passer un tableau Visual Basic vers une feuille de calcul Excel
Pour plus d'informations sur la marche à suivre pour obtenir de l'aide concernant Visual Basic pour applications, consultez l'article suivant dans la base de connaissances Microsoft :
163435VBA : Ressources de programmation pour Visual Basic pour applications

Propriétés

Numéro d'article: 177991 - Dernière mise à jour: jeudi 29 mars 2007 - Version: 3.6
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Excel 2000 Standard
  • Microsoft Excel 97 Standard
  • Microsoft Excel 95 Standard
  • Microsoft Excel 95a
  • Microsoft Excel 5.0c
  • Microsoft Office 2000 Developer
Mots-clés : 
kbmt kbautomation kbinfo KB177991 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 177991
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com