Objets stockés dans des variables Variant
Les objets peuvent être stockés dans des variables Variant. Cela peut être utile lorsque vous devez gérer efficacement différents types de données, y compris les objets. Par exemple, tous les éléments d’un tableau doivent avoir le même type de données. Définissez le type de données du tableau sur Variant pour stocker les objets avec d'autres types de données dans le même tableau.
tableau
Si vous avez de l'expérience en programmation dans d'autres langages, vous devez être familier avec le concept de tableaux. Grâce aux tableaux, vous pouvez faire référence à une série de variables portant le même nom et les identifier numériquement (indexées). Dans de nombreuses situations, l'utilisation de tableaux peut raccourcir et simplifier les programmes, car vous pouvez concevoir une boucle à l'aide de valeurs d'index pour gérer efficacement plusieurs situations. Les tableaux ont des limites supérieure et inférieure, et les éléments du tableau sont continus entre les limites supérieure et inférieure. Étant donné que Visual Basic alloue de l'espace pour chaque valeur d'index, ne déclarez pas un tableau trop grand.
Notez que les tableaux abordés dans cette section sont des tableaux de variables déclarées dans le programme. Ils sont différents des tableaux de contrôles, qui sont spécifiés au moment de la conception en définissant la propriété Index du contrôle. Les tableaux de variables sont toujours contigus ; contrairement aux tableaux de contrôle, les éléments du tableau ne peuvent pas être chargés ou déchargés depuis le milieu d'un tableau.
Tous les éléments d'un tableau ont le même type de données. Bien entendu, lorsque le type de données est Variant, chaque élément peut contenir différents types de données (objets, chaînes, valeurs, etc.). Des tableaux de n'importe quel type de données de base peuvent être déclarés, y compris les types définis par l'utilisateur (voir "Créer vos propres types de données" dans le chapitre 8, "Reprogrammer") et les variables d'objet (voir le chapitre 9, "Programmation avec des objets").
Il existe deux types de tableaux dans Visual Basic : les tableaux de taille fixe, qui restent toujours de la même taille, et les tableaux dynamiques dont la taille peut changer au moment de l'exécution. Les tableaux dynamiques sont abordés en détail dans « Tableaux dynamiques » plus loin dans ce chapitre.
Déclarer un tableau de taille fixe
Il existe trois façons de déclarer un tableau de taille fixe, et la méthode que vous utilisez dépend de la plage valide que le tableau doit avoir :
Pour créer un tableau public, déclarez le tableau à l'aide de l'instruction Public dans la section de déclaration du module.
Pour créer un tableau au niveau du module, déclarez le tableau à l'aide de l'instruction PRivate dans la section de déclaration du module.
Créez un tableau local et déclarez le tableau avec l'instruction Private dans le processus.
Définir des limites supérieure et inférieure
Lors de la déclaration d'un tableau, le nom du tableau est suivi d'une limite supérieure entre parenthèses. La limite supérieure ne doit pas dépasser la plage du type de données Long (-2 147 483 648 à 2 147 483 647). Par exemple, la déclaration de tableau suivante peut apparaître dans la section déclaration d'un module :
DimCounters(14)AsInteger '15 éléments.
DimSums(20)AsDouble '21 éléments.
Pour créer un tableau public, remplacez directement Dim par Public.
Compteurs publics (14) AsInteger
Sommes publiques (20) AsDouble
La même déclaration utilise Dim dans la procédure : DimCounters(14)AsIntegerDimSums(20)AsDouble La première déclaration crée un tableau de 15 éléments, indexés de 0 à 14. La deuxième déclaration crée un tableau de 21 éléments, indexés de 0 à 20. La limite inférieure par défaut est 0.
Pour spécifier une limite inférieure, utilisez le mot-clé To pour fournir une limite inférieure explicite (pour le type de données Long) :
DimCounters(1To15)AsInteger
DimSums (100 à 120) comme chaîne
Dans l'instruction précédente, les compteurs ont des valeurs d'index allant de 1 à 15, tandis que les sommes ont des valeurs d'index allant de 100 à 120.
Tableaux contenant d'autres tableaux
Il est possible de créer des tableaux de types de données Variant et de les colocaliser avec des tableaux de différents types de données. Le code suivant crée deux tableaux, l'un contenant des entiers et l'autre des chaînes. Déclarez ensuite un troisième tableau Variant et placez-y les tableaux d'entiers et de chaînes :
PrivateSubCommand1_Click()
DimintXAsInteger 'Déclarez la variable du compteur.
'Déclarez et placez un tableau d'entiers.
DimcountersA(5)AsInteger
ForintX=0To4
compteursA(intX)=5
SuivantintX
'Déclarez et placez un tableau de chaînes.
DimcountersB(5)AsString
ForintX=0To4
compteursB(intX)=bonjour
SuivantintX
DimarrX(2)AsVariant 'Déclarez un nouveau tableau avec deux membres.
arrX(1)=countersA() 'Déplace les autres tableaux vers le tableau.
arrX(2)=compteursB()
MsgBoxarrX(1)(2) 'Affiche chaque membre du tableau.
MsgBoxarrX(2)(3)
EndSub
tableau multidimensionnel
Parfois, il est nécessaire de suivre les informations pertinentes dans un tableau. Par exemple, pour suivre chaque pixel sur un écran d’ordinateur, vous devez référencer ses coordonnées X et Y. À l’heure actuelle, des tableaux multidimensionnels doivent être utilisés pour stocker les valeurs. Les tableaux multidimensionnels peuvent être déclarés avec Visual Basic. Par exemple, l’instruction suivante déclare un tableau bidimensionnel 10×10 dans une procédure.
StatiqueMatriceA(9,9)AsDouble
Vous pouvez déclarer l'une ou les deux dimensions avec une limite inférieure explicite :
StatiqueMatrixA(1To10,1To10)AsDouble
Tout cela peut être généralisé à des tableaux de plus de deux dimensions. Par exemple:
DimMultiD(3,1À10,1À15)
Cette déclaration crée un tableau tridimensionnel de taille 4×10×15. Le nombre total d’éléments est le produit des trois dimensions, soit 600.
Notez que lorsque la dimension d'un tableau est augmentée, l'espace de stockage occupé par le tableau augmentera considérablement, les tableaux multidimensionnels doivent donc être utilisés avec prudence. Soyez très prudent lorsque vous utilisez des baies Variant, car elles nécessitent un espace de stockage plus important.
Utiliser des boucles pour manipuler des tableaux
Vous pouvez utiliser des boucles For imbriquées pour traiter efficacement des tableaux multidimensionnels. Par exemple, dans MatrixA, chaque élément se voit attribuer une valeur en fonction de sa position dans le tableau :
DimIAsInteger,JAsInteger
StatiqueMatrixA(1To10,1To10)AsDouble
PourI=1To10
PourJ=1To10
MatriceA(I,J)=I*10 J
SuivantJ
SuivantJe
Plus d'informationsPour plus d'informations sur les boucles, consultez la section « Structures de boucle » plus loin dans ce chapitre.
tableau dynamique
La taille d'un tableau est parfois inconnue. J'espère donc avoir la possibilité de modifier la taille du tableau au moment de l'exécution.
Les tableaux dynamiques peuvent changer de taille à tout moment. Dans Visual Basic, les tableaux dynamiques sont les plus flexibles et les plus pratiques, permettant de gérer efficacement la mémoire. Par exemple, vous pouvez utiliser une grande baie pendant une courte période, puis libérer de l'espace mémoire pour le système lorsque la baie n'est pas utilisée.
Si vous n'utilisez pas de tableau dynamique, déclarez un tableau avec la plus grande taille possible, puis effacez les éléments inutiles. Cependant, si cette méthode est utilisée de manière excessive, cela entraînera un ralentissement de l'environnement d'exploitation de la mémoire.
Pour créer un tableau dynamique, procédez comme suit :
1. (Si vous voulez que le tableau soit un tableau public, alors) déclarez le tableau avec l'instruction Public, ou (si vous voulez que le tableau soit un niveau de module, alors) déclarez le tableau avec l'instruction Dim au niveau du module. , ou (si vous souhaitez que le tableau soit un tableau local, alors) dans Utilisez l'instruction Static ou Dim pour déclarer le tableau pendant la procédure. Déclarez le tableau comme dynamique en y ajoutant une table de dimensions vide.
DimDynArray()
2. Utilisez l'instruction ReDim pour allouer le nombre réel d'éléments.
ReDimDynArray(X1)
Les instructions ReDim ne peuvent apparaître que dans les procédures. Différente de l'instruction Dim et de l'instruction Static, l'instruction ReDim est une instruction exécutable. En raison de cette instruction, l'application effectue une opération au moment de l'exécution. L'instruction ReDim prend en charge une syntaxe identique à celle utilisée avec les tableaux fixes. Pour chaque dimension, chaque instruction ReDim peut modifier le nombre d'éléments ainsi que les limites supérieure et inférieure. Cependant, les dimensions du tableau ne peuvent pas être modifiées.
ReDimDynArray(4à12)
Par exemple, utilisez pour la première fois le tableau dynamique Matrix1 créé au niveau du module :
DimMatrix1()AsInteger
Ensuite, allouez de l'espace pour le tableau dans la procédure :
SubCalcValuesNow()
.
.
.
ReDimMatrix1(19,29)
EndSub
L'instruction ReDim alloue ici une matrice entière de 20 × 30 à Matrix (la taille totale des éléments est de 600). Il existe une autre façon d'utiliser des variables pour définir les limites des tableaux dynamiques :
ReDimMatrix1(X,Y)
Notez que vous pouvez attribuer une chaîne à un tableau d'octets de taille variable. Un tableau d'octets peut également être affecté à une chaîne de longueur variable. Il est important de noter que le nombre d'octets dans la chaîne varie selon la plateforme. La même chaîne contient deux fois plus d'octets sur une plate-forme Unicode que sur une plate-forme non Unicode.
Préserver le contenu d'un tableau dynamique
Chaque fois qu'une instruction ReDim est exécutée, toutes les valeurs actuellement stockées dans le tableau sont perdues. Visual Basic réinitialise la valeur d'un élément de tableau à Vide (pour un tableau Variant), à 0 (pour un tableau Numérique), à une chaîne de longueur nulle (pour un tableau de Chaînes) ou à Rien (pour un tableau d'objets). .
Ceci est utile lors de la préparation d'un tableau pour de nouvelles données ou lorsque vous souhaitez réduire la taille du tableau pour économiser de la mémoire. Parfois, vous souhaitez modifier la taille d’un tableau sans perdre les données du tableau. Cela peut être fait en utilisant l'instruction ReDim avec le mot-clé Preserve. Par exemple, l'utilisation de la fonction UBound pour référencer la limite supérieure entraîne l'expansion du tableau et l'ajout d'un élément sans perdre la valeur de l'élément existant :
ReDimPreserveDynArray(UBound(DynArray) 1)
Lorsque vous utilisez le mot-clé Preserve, vous pouvez uniquement modifier la limite supérieure de la dernière dimension d'un tableau multidimensionnel ; si vous modifiez la limite inférieure d'autres dimensions ou la dernière dimension, une erreur se produira au moment de l'exécution. On peut donc le programmer ainsi :
ReDimPreserveMatrix(10,UBound(Matrice,2) 1)
Au lieu de programmer comme ceci :
ReDimPreserveMatrix(UBound(Matrix,1) 1,10)
Pour des informations plus détaillées sur les tableaux dynamiques, consultez « Fonction ReDim » dans la référence du langage. Pour plus d'informations sur les tableaux d'objets, consultez le chapitre 9, « Programmation avec des objets ».
->