For Each, Next sens de lecture

Lolote83

XLDnaute Accro
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 Accro
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+
 

Fichiers joints

laetitia90

XLDnaute Barbatruc
Re : For Each, Next sens de lecture

bonjour Lolote83 ,JAcQUOT ,Job:):)

ou encore devrait marcher aussi!!

Code:
Dim tablo, t
tablo = [A1:C3]
For Each t In tablo
 MsgBox t
Next
 

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+
 

Fichiers joints

Dernière édition:

Lolote83

XLDnaute Accro
RESOLU For Each, Next sens de lecture

Merci à tous pour vos réponse.
C'est vrai que je n'avais pas pensé au tableau.
Je vais analyser tout ça.
Un grand MERCI
@+ Loote83
 

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+
 

Fichiers joints

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas