Bonjour,
je vous contacte car j'ai un problème étrange sur lequel je bute depuis hier. C'est un problème qui semble très simple et malgré le fait que je connais désormais très bien le VBA, les notions d'objet et l'architecture objet VBA (du moins normalement), je ne parviens pas à comprendre l'erreur que je fais (à supposer que je fasse une erreur d'ailleurs, c'est pourquoi je soupçonne un éventuel manque de rigueur de VBA...à vous de me dire)
Voici mon problème posé sous forme d'Exemple Complet Minimal. Dans un classeur vide, je fais un tableau 4*6 dans la plage "A1:F4" :
Colonne 1 Colonne 2 Colonne 3 Colonne 4 Colonne 5 Colonne 6
Cellule 1;1 Cellule 1;2 Cellule 1;3 Cellule 1;4 Cellule 1;5 Cellule 1;6
Cellule 2;1 Cellule 2;2 Cellule 2;3 Cellule 2;4 Cellule 2;5 Cellule 2;6
Cellule 3;1 Cellule 3;2 Cellule 3;3 Cellule 3;4 Cellule 3;5 Cellule 3;6
Puis je fais une première Sub dans ma feuil1 :
Cette Sub ne fait rien d'intéressant, c'est juste pour poser le problème bien entendu. Naturellement, cette Macro m'affiche (dans la fenêtre Exécution) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Sub toto() Dim plage As Range Set plage = Range("A1:F4") Dim ligne As Range For Each ligne In plage.Rows Debug.Print ligne.Address Next ligne End Sub
$A$1:$F$1
$A$2:$F$2
$A$3:$F$3
$A$4:$F$4
Très bien, c'est ce qu'on attendait. Maintenant, je fais une deuxième Sub :
Je déclare un objet de type Range que je nomme ligne et le lui fais successivement désigner la ligne 1, 2, 3, 4 de mon tableau. Autrement dit, je parcours les mêmes plages que mon For Each de la Sub précédente. Naturellement et conformément à nos attentes, la Macro m'affiche dans la fenêtre Exécution :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 Sub toto2() Dim ligne As Range Set ligne = Range("$A$1:$F$1") Debug.Print "La première cellule de la ligne contient : " & ligne.Item(1).Text & ". La deuxième cellule de la ligne contient : " & ligne.Item(2).Text Set ligne = Range("$A$2:$F$2") Debug.Print "La première cellule de la ligne contient : " & ligne.Item(1).Text & ". La deuxième cellule de la ligne contient : " & ligne.Item(2).Text Set ligne = Range("$A$3:$F$3") Debug.Print "La première cellule de la ligne contient : " & ligne.Item(1).Text & ". La deuxième cellule de la ligne contient : " & ligne.Item(2).Text Set ligne = Range("$A$4:$F$4") Debug.Print "La première cellule de la ligne contient : " & ligne.Item(1).Text & ". La deuxième cellule de la ligne contient : " & ligne.Item(2).Text End Sub
La première cellule de la ligne contient : Colonne 1. La deuxième cellule de la ligne contient : Colonne 2
La première cellule de la ligne contient : Cellule 1;1. La deuxième cellule de la ligne contient : Cellule 1;2
La première cellule de la ligne contient : Cellule 2;1. La deuxième cellule de la ligne contient : Cellule 2;2
La première cellule de la ligne contient : Cellule 3;1. La deuxième cellule de la ligne contient : Cellule 3;2
Où est le problème alors, allez-vous me dire ?
Le problème est que si j'essaie de combiner mes deux macro pour afficher le contenu des cellules comme dans la Sub toto2 tout en utilisant un For Each comme dans la Sub toto1, eh bien...ça ne marche pas :
Cette Macro m'affiche dans la fenêtre Exécution :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Sub toto3() Dim plage As Range Set plage = Range("A1:F4") Dim ligne As Range For Each ligne In plage.Rows 'Debug.Print ligne.Address Debug.Print "La première cellule de la ligne contient : " & ligne.Item(1).Text & ". La deuxième cellule de la ligne contient : " & ligne.Item(2).Text Next ligne End Sub
La première cellule de la ligne contient : . La deuxième cellule de la ligne contient :
La première cellule de la ligne contient : . La deuxième cellule de la ligne contient :
La première cellule de la ligne contient : . La deuxième cellule de la ligne contient :
La première cellule de la ligne contient : . La deuxième cellule de la ligne contient :
Alors, qui est-ce qui manque de rigueur ? VBA ou le programmeur (ie moi) ?
Partager