Boucles imbriquées

Résolu/Fermé
Bulle4805 Messages postés 2 Date d'inscription mardi 12 février 2013 Statut Membre Dernière intervention 12 février 2013 - 12 févr. 2013 à 11:31
Bulle4805 Messages postés 2 Date d'inscription mardi 12 février 2013 Statut Membre Dernière intervention 12 février 2013 - 12 févr. 2013 à 13:26
Bonjour,

Je suis débutante en VBA et je souhaiterais créer des boucles imbriquées. J'ai essayé de chercher des solutions sur internet, mais je n'ai pas trouvé !

Je vous explique mon problème.

En fait, j'ai plusieurs fichiers Excel de même structure pour différentes années. Avec différents paramètres qui changent :
- l'année : qui va de 2001 à 2004
- les lettres : qui vont de A à G
- et le nombre de tableaux par lettre : de 1 à 4

Ce qui nous donne en gros :
fichier_A1_2001 fichier _A1_2002 fichier_A1_2003 fichier_A1_2004
fichier_A2_2001 ... ... ...
fichier_A3_2001 ... ... ...
fichier_A4_2001 ...
fichier_B1_2001 ...
fichier_B2_2001 ...
...
fichier_G4_2001 ... fichier_G4_2004

Ces fichiers ayant la même structure, je voudrais agir sur chacun d'eux en même temps.

J'ai donc voulu créer une variable qui prend comme valeur les différentes valeurs possibles des différents fichiers (pour pouvoir par la suite, ouvrir tous ces fichiers et agir sur eux). J'ai commencé par un petit échantillon (avec 9 valeurs sans variation de la date).

Sub OuvrirClasseur()

Dim strFichier(1 To 9) As String 'nom du fichier

Dim tableau(1 To 3) As String

tableau(1) = "A"
tableau(2) = "B"
tableau(3) = "C"

For m = 1 To 9
For i = 1 To 3 Step 1
For j = 1 To 3 Step 1

strFichier(m) = "fichier_" & tableau(i) & j & "_2004.xls"

Next
Next
Next

'Vérification de la valeur prise par strFichier

Range("A1") = strFichier(1)
Range("A2") = strFichier(2)
Range("A3") = strFichier(3)
Range("A4") = strFichier(4)
Range("A5") = strFichier(5)
Range("A6") = strFichier(6)
Range("A7") = strFichier(7)
Range("A8") = strFichier(8)
Range("A9") = strFichier(9)

End Sub


Ce qui me retourne dans les différentes valeurs de strFichier(m), la dernière valeur de la boucle, soit : fichier_C_2004.xls

Pourriez-vous m'en expliquer la raison et me dire comment je pourrais créer pour chaque variable une valeur différente prise ?

Merci d'avance !


2 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
12 févr. 2013 à 12:11
Bonjour,
Simplifiées, voici tes 3 boucles :
m = 1 to 9
i = 1 to 3
j = 1 to 3
next j
next i
next m
Or toi, ce que tu veux, c'est qu'à chaque valeur de i et/ou de j, m (servant d'indice à ta variable tableau) s'incrémente...
Donc, pour qu'à chaque "changement de valeur de i ou de j m = m + 1, il convient d'écrire :

m = 0
For i = 1 To 3
    For j = 1 To 3
        m = m + 1
        strFichier(m) = "fichier_" & tableau(i) & j & "_2004.xls" 
    Next j
Next i

N'oublie pas également de déclarer toutes tes variables :
Dim i&, j&, m&
1
Bulle4805 Messages postés 2 Date d'inscription mardi 12 février 2013 Statut Membre Dernière intervention 12 février 2013
12 févr. 2013 à 13:26
Super, ça marche nickel !

Merci pikaju !
0