Boucle For i=[valeurs définies] ? [Résolu]

Signaler
Messages postés
49
Date d'inscription
jeudi 22 novembre 2012
Statut
Membre
Dernière intervention
20 juin 2014
-
Messages postés
49
Date d'inscription
jeudi 22 novembre 2012
Statut
Membre
Dernière intervention
20 juin 2014
-
Bonjour à tous !

Tout d'abord merci d'avance à ceux qui prendront un peu de leur temps pour m'aiguiller dans ma quête.

Je souhaite créer une boucle qui scrute les 200 colonnes d'un fichier Excel afin de trouver les emplacements de certaines qui vont me servir pour le reste de ma macro. Pour cela j'ai défini dans ma macro un tableau colonnes_utiles(14) où chaque colonne_utiles(i) représente l'intitulé des 15 colonnes considérées.

Dans le déroulement de ma macro, à un moment on va vouloir trouver par exemple les colonnes_utiles(0,1,6,10), puis, bien plus loin, rescruter pour trouver les colonnes (0,1,8,9,11,12,13).

Je ne peux donc pas utiliser une boucle habituelle "For i=initial to end", je voudrai que les valeurs de "i" ne soit pas successives mais définies.

Quelle synthaxe utiliser pour y arriver ?

Prenons l'exemple (0,1,6,10), j'ai pour l'instant testé ceci, bien entendu ça ne fonctionne pas:

Dim A() As Variant
     A = Array(0, 1, 6, 10) 
         
    For Each A In A()
        col = 1
        Do While Cells(4, col) <> colonnes_utiles(A)    'les intitulés sont en ligne 4
        col = col + 1
        Loop
       '=>ACTION SOUHAITEE
   Next A


Cette action n'est qu'une petite partie de ma macro qui pour le reste fonctionne parfaitement, mais en attendant de trouver la solution, je défini les colonnes_utiles(0,1,2,3) avec les intitulés voulus, puis un For i=0 to 3.
Plus loin je REDEFINI des colonnes_utiles(0,1,2,3,4,5,6) avec d'autres intitulés, puis un For i=0 to 6...

Dans l'idée c'est tout con mais je ne trouve pas quelle synthaxe utiliser.

Merci à vous pour vos propositions ! :)

4 réponses

Messages postés
48
Date d'inscription
lundi 11 avril 2011
Statut
Membre
Dernière intervention
29 avril 2020

Bonjour,

Avec du retard, voici une idée.

Placer dans une variable tableau la séquence que l'on veut appeler, puis faire une boucle for pour dérouler la liste.

Exemple.
Liste(0) = 1
Liste(0) = 3
---------
Liste(n) = x

For i = 0 to n

Utiliser en index liste(I) au lieu de I

next
Messages postés
32456
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 mai 2021
347
Bonjour,
Ton idée de départ était bonne..


Sub parcourirCol()
Dim col As Variant
col = Array(1, 5, 6, 8, 10)

For Each c In col
 Debug.Print Cells(1, c).Value
Next

End Sub

Messages postés
49
Date d'inscription
jeudi 22 novembre 2012
Statut
Membre
Dernière intervention
20 juin 2014

Merci pour vos éléments de réponse, finalement j'ai trouvé une solution qui fonctionne, à savoir :

Dim A() As Variant
A = Array(0, 1, 3, 4, 6, 7, 8) 'exemple de valeurs prédéfinies
Dim indice As Integer
Dim indice_trouve As Integer

For indice = 0 To 6
indice_trouve = A(indice) 'pour indice_trouve=2, indice=3
col = 1
Do While Cells(4, col) <> colonnes_utiles(indice_trouve)
col = col + 1
Loop
' => ACTION à réaliser

Next indice

Voilà, je vous remercie d'avoir pris un moment pour moi, j'irai voir plus en détails comment marche la fonction debug.print.

Bonne continuation à vous !

Axel
Messages postés
49
Date d'inscription
jeudi 22 novembre 2012
Statut
Membre
Dernière intervention
20 juin 2014

EDIT: commentaire ligne 7: pour indice=2, indice_trouve=3