Afin de stocker plus d’une colonne de données, nous avons besoin d’une dimension différente du tableau. Exemple:
Sauvegarde des données dans un tableau à deux dimensions :
'Déclaration Dim array_example(10, 2) 'Tableau 11 x 3 "défini" 'Sauvegarde des données dans un tableau For i = 0 To 10 array_example(i, 0) = Range("A" & i + 2) array_example(i, 1) = Range("B" & i + 2) array_example(i, 2) = Range("C" & i + 2) Next
Voici quelques exemples de travail avec ces valeurs :
MsgBox array_example(0, 0) '=> retours : 03.11.2026 MsgBox array_example(0, 1) '=> renvoie : 24 MsgBox array_example(9, 2) '=> renvoie : NO MsgBox array_example(10, 2) '=> renvoie : YES
Imaginons un instant que nous devions mettre à jour régulièrement les données de notre tableau, et que nous ne puissions donc pas attribuer de valeurs fixes au moment de la déclaration...
Pour connaître le numéro de ligne de la dernière cellule non vide, ou autrement dit, la dernière ligne de notre base de données, nous utiliserons la formule suivante :
last_row = Range("A1").End(xlDown).Row
Excel n'accepte pas les variables dans la déclaration.
Déclarez plutôt un tableau dynamique (en utilisant des parenthèses vides), puis définissez sa taille à l'aide de Redim :
Dim array_example() ReDim array_example(last_row - 2, 2)
En utilisant la procédure suivante, vous pouvez stocker toutes les lignes de votre ensemble de données (table) dans notre tableau :
Dim array_example() ReDim array_example(last_row - 2, 2)
Dans l'exemple précédent, le dernier nombre de notre tableau était last_row - 2 :
For i = 0 To last_row - 2
Une autre façon de déterminer le dernier numéro de notre tableau pourrait être d'utiliser Ubound :
For i = 0 To UBound(array_example)
Cette fonction renvoie le plus grand nombre du tableau pour la dimension sélectionnée (la première dimension est la dimension par défaut).
Voici quelques exemples qui rendront cela plus clair :
Sub example() Dim array_example(10, 2) MsgBox UBound(array_example) '=> renvoie : 10 MsgBox UBound(array_example, 1) '=> renvoie : 10 MsgBox UBound(array_example, 2) '=> renvoie : 2 End Sub
Il est possible de remplir un tableau avec les valeurs d'une plage de cellules sur une feuille de calcul sans même utiliser de boucle :
'Déclaration Dim array_example(10, 2) 'Tableau 11 x 3 "défini" 'Sauvegarde des données dans un tableau For i = 0 To 10 array_example(i, 0) = Range("A" & i + 2) array_example(i, 1) = Range("B" & i + 2) array_example(i, 2) = Range("C" & i + 2) Next
Le code précédent peut être effectivement remplacé par ceci :
'Déclaration Dim array_example() 'Sauvegarde des données dans un tableau array_example = Range("A2:C12").Value
Bien que la deuxième méthode semble plus attractive que la première, attention, dans la plupart des cas, elle peut vous coûter plus de temps à mettre en œuvre que la première.
Si vous stockez les données dans votre tableau de cette façon, le premier nombre sera 1 au lieu de 0, ce qui peut prêter à confusion...
Plus tard dans le processus d'augmentation du code, si vous décidez de stocker uniquement les données qui répondent à certains critères de recherche dans le tableau (ou d'effectuer une opération complètement différente), vous devrez réécrire complètement le code en utilisant une fonction de boucle différente...
Mais cette deuxième méthode est très utile si vous devez sauvegarder l’intégralité du contenu d’un grand ensemble de données, car elle est plus rapide que la boucle (économisant environ 0,2 seconde tous les 15 000 enregistrements).
Mais si vous devez créer un tableau dont le contenu est "fixe".
Une solution pourrait être d'enregistrer les valeurs bande par bande :
Dim en(5) en(0) = "IF" en(1) = "VLOOKUP" en(2) = "SUM" en(3) = "COUNT" en(4) = "ISNUMBER" en(5) = "MID"
Heureusement, vous pouvez simplifier ce code en utilisant un tableau (Array) :
en = Array("IF", "VLOOKUP", "SUM", "COUNT", "ISNUMBER", "MID")
Voici une démonstration d'utilisation de la fonction Replace (cela vous aidera à comprendre l'exemple suivant) :
Sub replace_example() Dim var_translate As String 'Ruban de texte pour cet exemple var_translate = "Hello World !" 'Remplacez « Monde » par « vous » dans le ruban de texte var_translate = Replace(var_translate, "World", "you") 'Bande après remplacement MsgBox var_translate '=> renvoie "Bonjour à toi !" End Sub
Maintenant, si l'on veut remplacer une série de valeurs par un autre ensemble de données, utiliser des tableaux et la fonction Array sera extrêmement utile :
Sub translate() 'Un exemple simplifié de traduction de formules de l’anglais vers le français Dim var_translate As String 'Ruban de texte pour cet exemple var_translate = "Formula to translate : SUM(IF(ISNUMBER(A1:E1),A1:E1,0))" 'Deux ensembles de valeurs en = Array("IF", "VLOOKUP", "SUM", "COUNT", "ISNUMBER", "MID") fr = Array("SI", "RECHERCHEV", "SOMME", "NB", "ESTNUM", "STXT") 'Remplacez "SI" par "IF", "RECHERVEV" par "VLOOKUP", etc. For i = 0 To UBound(en) var_translate = Replace(var_translate, en(i), fr(i)) Next 'Bande après remplacement MsgBox var_translate '=> renvoie "Formula à traduire : SOMME(SI(ESTNUM(A1:E1),A1:E1,0))" End Sub
La fonction Split nous permet de diviser la chaîne de caractères en parties et d'écrire les valeurs résultantes dans un tableau.
Pour convertir un ruban en tableau, procédez comme suit :
variable = "IF/VLOOKUP/SUM/COUNT/ISNUMBER/MID"
Utilisez la fonction VBA Split et précisez le séparateur :
en = Split(variable, "/")
Le tableau "en" renverra les valeurs suivantes :
MsgBox en(0) '=> renvoie : IF MsgBox en(1) '=> renvoie : RECHERCHEV MsgBox en(2) '=> renvoie : SOMME MsgBox en(3) '=> renvoie : COMPTE MsgBox en(4) '=> renvoie : ISNUMBER MsgBox en(5) '=> renvoie : MID
Les 3 tableaux suivants renverront également les mêmes valeurs :
en = Array("IF", "VLOOKUP", "SUM", "COUNT", "ISNUMBER", "MID") en = Split("IF,VLOOKUP,SUM,COUNT,ISNUMBER,MID", ",") en = Split("IF VLOOKUP SUM COUNT ISNUMBER MID", " ")
L'exemple suivant renvoie la troisième valeur de la chaîne :
MsgBox Split("IF,VLOOKUP,SUM,COUNT,ISNUMBER,MID", ",")(2) '=> renvoie : SOMME
L'inverse de Split est la fonction VBA Join.
Cette fonction collecte les valeurs d'un tableau dans une chaîne.
MsgBox Join(Array(1, 2, 3, 4, 5), "") '=> renvoie : 12345