sens de parcours d'une boucle for each next

Le
Brunos
Bonjour,
Quand on parcourt une plage de cellules avec For Each Next, la
progression se fait ligne par ligne apparemment.
Dans for each C in range("A1:B2"), C prend successivement les valeurs
A1, B1, puis A2, B2.
C'est possible de parcourir la plage colonne par colonne ?

Merci
--
Brunos
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Daniel.C
Le #5281921
Bonjour.
Essaie :

Sub test1()
For y = 1 To Range("A5:B6").Rows.Count
For x = 1 To Range("A5:B6").Columns.Count
MsgBox Range("A5:B6")(x, y).Address
Next x
Next y
End Sub

Cordialement.
Daniel
"Brunos"
Bonjour,
Quand on parcourt une plage de cellules avec For Each Next, la progression
se fait ligne par ligne apparemment.
Dans for each C in range("A1:B2"), C prend successivement les valeurs A1,
B1, puis A2, B2.
C'est possible de parcourir la plage colonne par colonne ?

Merci
--
Brunos


JPMonnier
Le #5281911
Bonjour,
Cette petite sub fait la chose
Sub ForEach()
nbcol = 2
For x = 1 To nbcol
For Each cell In Sheets(1).Columns(x).Cells
If cell = "" Then Exit For
r = cell
MsgBox r ' a remplacer par appel d'une autre sub
Next
Next
End Sub

--
Cordialement

"Brunos" news:
Bonjour,
Quand on parcourt une plage de cellules avec For Each Next, la progression
se fait ligne par ligne apparemment.
Dans for each C in range("A1:B2"), C prend successivement les valeurs A1,
B1, puis A2, B2.
C'est possible de parcourir la plage colonne par colonne ?

Merci
--
Brunos


JB
Le #5281841
Bonjour,

For Each c In Application.Transpose(Application.Transpose([A1:B2]))
MsgBox c
Next

JB


On 6 fév, 11:56, "Brunos"
Bonjour,
Quand on parcourt une plage de cellules avec For Each Next, la
progression se fait ligne par ligne apparemment.
Dans for each C in range("A1:B2"), C prend successivement les valeurs
A1, B1, puis A2, B2.
C'est possible de parcourir la plage colonne par colonne ?

Merci
--
Brunos


MichDenis
Le #5281801
Imbrication de 2 boucles...
d'abord une boucle sur les colonnes
suivi d'ne boucle sur chacune des cellules de la colonne

'-------------------------
Sub test()
Dim Col As Range, C As Range
For Each Col In Range("A1:B2").Columns
For Each C In Col.Cells
x = C.Value
Next
Next
End Sub
'-------------------------



"Brunos"
Bonjour,
Quand on parcourt une plage de cellules avec For Each Next, la
progression se fait ligne par ligne apparemment.
Dans for each C in range("A1:B2"), C prend successivement les valeurs
A1, B1, puis A2, B2.
C'est possible de parcourir la plage colonne par colonne ?

Merci
--
Brunos
JB
Le #5281531
t = Timer
For Each c In
Application.Transpose(Application.Transpose([A1:Z2000]))
tot = tot + c
Next
MsgBox Timer - t

Cette boucle est 5 fois plus rapide que:

t = Timer
For Each c In [A1:Z2000]
tot = tot + c
Next
MsgBox Timer - t

JB



On 6 fév, 13:39, JB
Bonjour,

  For Each c In Application.Transpose(Application.Transpose([A1:B2]))
    MsgBox c
  Next

JB

On 6 fév, 11:56, "Brunos"


Bonjour,
Quand on parcourt une plage de cellules avec For Each Next, la
progression se fait ligne par ligne apparemment.
Dans for each C in range("A1:B2"), C prend successivement les valeurs
A1, B1, puis A2, B2.
C'est possible de parcourir la plage colonne par colonne ?

Merci
--
Brunos- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -



Jacky
Le #5281421
Bonsoir JB

Cette boucle est 5 fois plus rapide que:
Impressionnent.

Chez moi:
0.03 seconde
et
0.2

--
Salutations
JJ


"JB"
t = Timer
For Each c In
Application.Transpose(Application.Transpose([A1:Z2000]))
tot = tot + c
Next
MsgBox Timer - t

Cette boucle est 5 fois plus rapide que:

t = Timer
For Each c In [A1:Z2000]
tot = tot + c
Next
MsgBox Timer - t

JB



On 6 fév, 13:39, JB
Bonjour,

For Each c In Application.Transpose(Application.Transpose([A1:B2]))
MsgBox c
Next

JB

On 6 fév, 11:56, "Brunos"


Bonjour,
Quand on parcourt une plage de cellules avec For Each Next, la
progression se fait ligne par ligne apparemment.
Dans for each C in range("A1:B2"), C prend successivement les valeurs
A1, B1, puis A2, B2.
C'est possible de parcourir la plage colonne par colonne ?

Merci
--
Brunos- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -



JB
Le #5281411
Bonsoir,

Explication: Application.Transpose transforme le champ en tableau
mémoire.

JB

On 6 fév, 18:42, "Jacky"
Bonsoir JB

Cette boucle est 5 fois plus rapide que:


Impressionnent.
Chez moi:
0.03 seconde
et
0.2

--
Salutations
JJ

"JB"
  t = Timer
  For Each c In
Application.Transpose(Application.Transpose([A1:Z2000]))
    tot = tot + c
  Next
  MsgBox Timer - t

Cette boucle est 5 fois plus rapide que:

  t = Timer
  For Each c In [A1:Z2000]
    tot = tot + c
  Next
  MsgBox Timer - t

JB

On 6 fév, 13:39, JB


Bonjour,

For Each c In Application.Transpose(Application.Transpose([A1:B2]))
MsgBox c
Next

JB

On 6 fév, 11:56, "Brunos"
Bonjour,
Quand on parcourt une plage de cellules avec For Each Next, la
progression se fait ligne par ligne apparemment.
Dans for each C in range("A1:B2"), C prend successivement les valeurs
A1, B1, puis A2, B2.
C'est possible de parcourir la plage colonne par colonne ?

Merci
--
Brunos- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -




Brunos
Le #5281341
t = Timer
For Each c In
Application.Transpose(Application.Transpose([A1:Z2000]))
tot = tot + c
Next
MsgBox Timer - t

Cette boucle est 5 fois plus rapide que:

t = Timer
For Each c In [A1:Z2000]
tot = tot + c
Next
MsgBox Timer - t

JB


Ta méthode est très séduisante, mais ya un pb.
D'après mes tests, Application.Transpose récupère la valeur de chaque
cellule, mais c n'est plus un objet range, juste un variant. Donc on ne
peut pas travailler sur chaque cellule, affecter une valeur ou mettre
un format par exemple.
C'est une méthode très rapide, mais juste pour la lecture d'une plage.
D'autre part pourquoi imbriquer 2x transpose ? Est-ce que ça ne
s'annule pas ?

--
Brunos

JB
Le #5281331
-Application.Transpose transpose un champ en 'tableau mémoire' et ne
permet que l'accès à la valeur en lecture (cas fréquent -avec un seul
Application.Transpose (le rapport de vitesse de lecture est 15)
-Il faut 2 application.Transpose parce qu'une boucle For Each sur un
'tableau mémoire' parcours dans le sens colonne/Ligne.

JB

On 6 fév, 20:42, Brunos





  t = Timer
  For Each c In
Application.Transpose(Application.Transpose([A1:Z2000]))
    tot = tot + c
  Next
  MsgBox Timer - t

Cette boucle est 5 fois plus rapide que:

  t = Timer
  For Each c In [A1:Z2000]
    tot = tot + c
  Next
  MsgBox Timer - t

JB


Ta méthode est très séduisante, mais ya un pb.
D'après mes tests, Application.Transpose récupère la valeur de chaqu e
cellule, mais c n'est plus un objet range, juste un variant. Donc on ne
peut pas travailler sur chaque cellule, affecter une valeur ou mettre
un format par exemple.
C'est une méthode très rapide, mais juste pour la lecture d'une plage.
D'autre part pourquoi imbriquer 2x transpose ? Est-ce que ça ne
s'annule pas ?

--
Brunos- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -



Brunos
Le #5281321
Imbrication de 2 boucles...
d'abord une boucle sur les colonnes
suivi d'ne boucle sur chacune des cellules de la colonne

'-------------------------
Sub test()
Dim Col As Range, C As Range
For Each Col In Range("A1:B2").Columns
For Each C In Col.Cells
x = C.Value
Next
Next
End Sub
'-------------------------

"Brunos" a écrit dans le message de news:
Quand on parcourt une plage de cellules avec For Each Next, la
progression se fait ligne par ligne apparemment.
Dans for each C in range("A1:B2"), C prend successivement les valeurs
A1, B1, puis A2, B2.
C'est possible de parcourir la plage colonne par colonne ?


Grand merci à tous d'avoir cogité sur la question! :D
Les méthodes de Daniel.C et de JPMonnier fonctionnent très bien.
J'adopte celle de MichDenis car il n'y a pas de compteur, uniquement
des collections.

--
Brunos

Publicité
Poster une réponse
Anonyme