Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

sens de parcours d'une boucle for each next

12 réponses
Avatar
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

10 réponses

1 2
Avatar
Daniel.C
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" a écrit dans le message de 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


Avatar
JPMonnier
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" a écrit dans le message de
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


Avatar
JB
Bonjour,

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

JB


On 6 fév, 11:56, "Brunos" wrote:
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


Avatar
MichDenis
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:

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
Avatar
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 wrote:
Bonjour,

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

JB

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



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 -



Avatar
Jacky
Bonsoir JB

Cette boucle est 5 fois plus rapide que:
Impressionnent.

Chez moi:
0.03 seconde
et
0.2

--
Salutations
JJ


"JB" a écrit dans le message de news:

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 wrote:
Bonjour,

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

JB

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



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 -



Avatar
JB
Bonsoir,

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

JB

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

Cette boucle est 5 fois plus rapide que:


Impressionnent.
Chez moi:
0.03 seconde
et
0.2

--
Salutations
JJ

"JB" a écrit dans le message de news:

  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 wrote:



Bonjour,

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

JB

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

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 -




Avatar
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 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

Avatar
JB
-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 wrote:





  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 -



Avatar
Brunos
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

1 2