For Each, Next sens de lecture

Lolote83

XLDnaute Barbatruc
Bonjour à tous,
J'utilise régulièrement la commandes For Each Next pour parcourir une plage de cellule.

Exemple : Plage = A1:C3
Avec l'instruction For Each Next, les données seront lues (horizontalement puis verticalement) donc :
A1, B1, C1 puis A2, B2, C2 puis A3, B3, C3

Ma question est : Peut-on parcourir cette même plage dans l'autre sens, c'est à dire verticalement puis horizontalement ? ce qui donnerait :
A1, A2, A3 puis B1, B2, B3 puis C1, C2, C3

La réponse attendue est simplement OUI ou NON et si OUI, je veux bien une solution For Each Next sinon, je me dépatouillerai avec des For Next imbriqué.
Merci à tous ceux qui se pencheront sur le sujet.
@+ Lolote83
 

JAcQUOT

XLDnaute Nouveau
Re : For Each, Next sens de lecture

Bonjour à tous,
J'utilise régulièrement la commandes For Each Next pour parcourir une plage de cellule.

Exemple : Plage = A1:C3
Avec l'instruction For Each Next, les données seront lues (horizontalement puis verticalement) donc :
A1, B1, C1 puis A2, B2, C2 puis A3, B3, C3

Ma question est : Peut-on parcourir cette même plage dans l'autre sens, c'est à dire verticalement puis horizontalement ? ce qui donnerait :
A1, A2, A3 puis B1, B2, B3 puis C1, C2, C3

La réponse attendue est simplement OUI ou NON et si OUI, je veux bien une solution For Each Next sinon, je me dépatouillerai avec des For Next imbriqué.
Merci à tous ceux qui se pencheront sur le sujet.
@+ Lolote83

Bonjour à tous,

NON, la solution est d'utiliser For next

Bonne journée
 

Lolote83

XLDnaute Barbatruc
Re : For Each, Next sens de lecture

Merci pour cette réponse même si je m'en doutais un peut.
C'est tout de même dommage malgré les avancées des versions XL.
Tant pis, j'espère simplement que par le futur, cela puisse exister, cela dépannerait certainement pas mal de monde.
A bientôt
Cordialement
Lolote83
 

job75

XLDnaute Barbatruc
Re : For Each, Next sens de lecture

Bonjour Lolote83, JAcQUOT,

En passant par un tableau VBA l'analyse se fait par colonne puis par ligne :

Code:
Sub Test()
Dim plage As Range, tablo, t
Set plage = [A1:C3]
tablo = plage
For Each t In tablo
  MsgBox t 'pour voir
Next
End Sub
Fichier joint.

A+
 

Pièces jointes

  • Test(1).xls
    32 KB · Affichages: 49
  • Test(1).xls
    32 KB · Affichages: 45
  • Test(1).xls
    32 KB · Affichages: 53

job75

XLDnaute Barbatruc
Re : For Each, Next sens de lecture

Re, hello Laetitia :D

La correspondance entre le tableau et la plage nécessite un compteur (n) :

Code:
Sub RechercheValeur()
Dim cherche, plage As Range, tablo, ub1&, ub2%, t, c As Range, n&
cherche = "b2" 'valeur cherchée
Set plage = [A1:C3]
tablo = plage
ub1 = UBound(tablo): ub2 = UBound(tablo, 2)
For Each t In tablo
  If t = cherche Then
    Set c = plage(1 + (n Mod ub1), 1 + Int(n / ub2))
    c.Interior.ColorIndex = 6 'jaune
    Exit Sub
  End If
  n = n + 1
Next
End Sub
La recherche est plus rapide sur un tableau que sur une plage de cellules.

Fichier (2).

Edit : la macro est erronée, voir le post #8.

A+
 

Pièces jointes

  • Test(2).xls
    38.5 KB · Affichages: 48
  • Test(2).xls
    38.5 KB · Affichages: 45
  • Test(2).xls
    38.5 KB · Affichages: 46
Dernière édition:

job75

XLDnaute Barbatruc
Re : For Each, Next sens de lecture

Re,

Je me suis planté au post #6, voici la bonne macro :

Code:
Sub RechercheValeur()
Dim cherche, plage As Range, tablo, ub%, t, c As Range, n&
cherche = "b2" 'valeur cherchée
Set plage = [A1:C5]
tablo = plage
ub = UBound(tablo)
For Each t In tablo
  If t = cherche Then
    Set c = plage(1 + (n Mod ub), 1 + Int(n / ub))
    c.Interior.ColorIndex = 6 'jaune
    Exit Sub
  End If
  n = n + 1
Next
End Sub
Fichier (3).

A+
 

Pièces jointes

  • Test(3).xls
    38.5 KB · Affichages: 38
  • Test(3).xls
    38.5 KB · Affichages: 51
  • Test(3).xls
    38.5 KB · Affichages: 50

Discussions similaires

Statistiques des forums

Discussions
311 724
Messages
2 081 936
Membres
101 844
dernier inscrit
pktla