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

Range("A" & L & ":H" & L).Value = ????

6 réponses
Avatar
LANIMAL
Bonjour,
Je voudrais accélérer la boucle ci-dessous :

L = 3
For i = 2 To 70
Range("A" & L) = Worksheets("Récap1").Cells(3, i)
Range("B" & L) = Worksheets("Récap2").Cells(4, i)
Range("C" & L & ":H" & L).Value = Worksheets("Toto").Range("B8:G8).Value
L = L + 1
Next i

J'ai l'intuition que la boucle tournerait plus rapidement si les codes
Range(... qui concernent les cellules A à H de la ligne L
pouvaient être remplacés par une seule ligne du genre :

Range("A" & L & ":H" & L).Value = ????

La question, c'est quoi mettre à la place de ????
Peut être une collection ?
Mon problème est que je ne maitrise pas du tout,
même après avoir lu l'Aide, différents sites (peut-être pas les bons),
et même un bouquin Mirosoft-Press de 600 pages.

La solution de cet exemple m'aiderait probablement à démarrer.
Merci d'avance.

6 réponses

Avatar
Papyjac
Bonjour Lanimal

as tu constater que cette boucle était longue à l'éxécution ?

Si oui, je ne pense pas que cela vienne de la boucle elle même

Tu peux essayer 2 choses mineures :
supprimer le rafraichissement d'écran =>Application.Screeupdating = false
Supprimer le mode recalcul automatique Application.Calculation = xlmanual
éventuellement vérifier que des événement ne se déclenche pas à ton issu =>
Application.Enableevents = False


--
P a p y j a c

"LANIMAL" a écrit dans le message de
news:uRmxBz$
Bonjour,
Je voudrais accélérer la boucle ci-dessous :

L = 3
For i = 2 To 70
Range("A" & L) = Worksheets("Récap1").Cells(3, i)
Range("B" & L) = Worksheets("Récap2").Cells(4, i)
Range("C" & L & ":H" & L).Value = Worksheets("Toto").Range("B8:G8).Value
L = L + 1
Next i

J'ai l'intuition que la boucle tournerait plus rapidement si les codes
Range(... qui concernent les cellules A à H de la ligne L
pouvaient être remplacés par une seule ligne du genre :

Range("A" & L & ":H" & L).Value = ????

La question, c'est quoi mettre à la place de ????
Peut être une collection ?
Mon problème est que je ne maitrise pas du tout,
même après avoir lu l'Aide, différents sites (peut-être pas les bons),
et même un bouquin Mirosoft-Press de 600 pages.

La solution de cet exemple m'aiderait probablement à démarrer.
Merci d'avance.



Avatar
michdenis
Juste pour te donner une idée...

La feuille où tu copies tes données doit être la feuille active à l'écran
sinon tu dois l'identifier devant Range("A3:A70") par
worksheets("NomFeuille").Range("A3:A70") =.....

L = 3
For i = 2 To 70
With Worksheets("Récap1")
Range("A3:A70") = Application.Transpose(.Range(.Cells(3, 2), .Cells(3,
70)))
End With

Je te laisse pratiquer pour les autres lignes de code !





"LANIMAL" a écrit dans le message de news:
uRmxBz$
Bonjour,
Je voudrais accélérer la boucle ci-dessous :

L = 3
For i = 2 To 70
Range("A" & L) = Worksheets("Récap1").Cells(3, i)
Range("B" & L) = Worksheets("Récap2").Cells(4, i)
Range("C" & L & ":H" & L).Value = Worksheets("Toto").Range("B8:G8).Value
L = L + 1
Next i

J'ai l'intuition que la boucle tournerait plus rapidement si les codes
Range(... qui concernent les cellules A à H de la ligne L
pouvaient être remplacés par une seule ligne du genre :

Range("A" & L & ":H" & L).Value = ????

La question, c'est quoi mettre à la place de ????
Peut être une collection ?
Mon problème est que je ne maitrise pas du tout,
même après avoir lu l'Aide, différents sites (peut-être pas les bons),
et même un bouquin Mirosoft-Press de 600 pages.

La solution de cet exemple m'aiderait probablement à démarrer.
Merci d'avance.
Avatar
LSteph
bonjour,

un
=transpose(...)

ce serait pas bien
ou un collage special...

@+

--
lsteph

LANIMAL a écrit :
Bonjour,
Je voudrais accélérer la boucle ci-dessous :

L = 3
For i = 2 To 70
Range("A" & L) = Worksheets("Récap1").Cells(3, i)
Range("B" & L) = Worksheets("Récap2").Cells(4, i)
Range("C" & L & ":H" & L).Value = Worksheets("Toto").Range("B8:G8).Value
L = L + 1
Next i

J'ai l'intuition que la boucle tournerait plus rapidement si les codes
Range(... qui concernent les cellules A à H de la ligne L
pouvaient être remplacés par une seule ligne du genre :

Range("A" & L & ":H" & L).Value = ????

La question, c'est quoi mettre à la place de ????
Peut être une collection ?
Mon problème est que je ne maitrise pas du tout,
même après avoir lu l'Aide, différents sites (peut-être pas les bons),
et même un bouquin Mirosoft-Press de 600 pages.

La solution de cet exemple m'aiderait probablement à démarrer.
Merci d'avance.


Avatar
LANIMAL
Bonsoir Papyjac
Ah bien sûr ! - Que je suis étourdi !
Longue, la boucle ? - Oui, 12 secondes !
et c'est bien pour ça que j'aurais dû penser à Application.Calculation,
d'autant qu'il y a un tableau bourré de calculs.
Je n'y ai pas pensé car en fait je n'en ai généralement pas besoin.
Maintenant : environ 1 seconde... ça change.
J'avais pensé à Screeupdating qui change pas grand chose, et maintenant
je comprends pourquoi.
Enableevents est sans objet.
Encore un grand merci.
Au fait... moi, c'est PapyMich ;-)


Papyjac a écrit :
Bonjour Lanimal

as tu constater que cette boucle était longue à l'éxécution ?

Si oui, je ne pense pas que cela vienne de la boucle elle même

Tu peux essayer 2 choses mineures :
supprimer le rafraichissement d'écran =>Application.Screeupdating = false
Supprimer le mode recalcul automatique Application.Calculation = xlmanual
éventuellement vérifier que des événement ne se déclenche pas à ton issu
=> Application.Enableevents = False




Avatar
LANIMAL
Merci,
Ce n'est pas possible, car, pour simplifier, je n'avais pas indiqué q'il
y a dans la boucle une condition qui fait sauter des lignes L.
Merci qd même de me donner un exemple auquel je n'aurais pas pensé, et
qui m'intéresse pour d'autres applications.
Papyjac a été très clairvoyant, il a reniflé la cause de la lenteur de
la boucle (voir ma réponse). Mais c'est vrai que toi comme LSteph ne
pouviez pas imaginer que je sois assez étourdi pour ne pas y penser !
Merci à vous

michdenis a écrit :
Juste pour te donner une idée...

La feuille où tu copies tes données doit être la feuille active à l'écran
sinon tu dois l'identifier devant Range("A3:A70") par
worksheets("NomFeuille").Range("A3:A70") =.....

L = 3
For i = 2 To 70
With Worksheets("Récap1")
Range("A3:A70") = Application.Transpose(.Range(.Cells(3, 2), .Cells(3,
70)))
End With

Je te laisse pratiquer pour les autres lignes de code !





"LANIMAL" a écrit dans le message de news:
uRmxBz$
Bonjour,
Je voudrais accélérer la boucle ci-dessous :

L = 3
For i = 2 To 70
Range("A" & L) = Worksheets("Récap1").Cells(3, i)
Range("B" & L) = Worksheets("Récap2").Cells(4, i)
Range("C" & L & ":H" & L).Value = Worksheets("Toto").Range("B8:G8).Value
L = L + 1
Next i

J'ai l'intuition que la boucle tournerait plus rapidement si les codes
Range(... qui concernent les cellules A à H de la ligne L
pouvaient être remplacés par une seule ligne du genre :

Range("A" & L & ":H" & L).Value = ????

La question, c'est quoi mettre à la place de ????
Peut être une collection ?
Mon problème est que je ne maitrise pas du tout,
même après avoir lu l'Aide, différents sites (peut-être pas les bons),
et même un bouquin Mirosoft-Press de 600 pages.

La solution de cet exemple m'aiderait probablement à démarrer.
Merci d'avance.



Avatar
Jacquouille
Bonsoir
Question purement humoristique, que vas-tu faire de ces 10 secondes gagnées
?

--
Bien amicalmement,
"Le vin est au repas ce que le parfum est à la femme."

Jacquouille.

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

Merci,
Ce n'est pas possible, car, pour simplifier, je n'avais pas indiqué q'il y
a dans la boucle une condition qui fait sauter des lignes L.
Merci qd même de me donner un exemple auquel je n'aurais pas pensé, et qui
m'intéresse pour d'autres applications.
Papyjac a été très clairvoyant, il a reniflé la cause de la lenteur de la
boucle (voir ma réponse). Mais c'est vrai que toi comme LSteph ne pouviez
pas imaginer que je sois assez étourdi pour ne pas y penser !
Merci à vous

michdenis a écrit :
Juste pour te donner une idée...

La feuille où tu copies tes données doit être la feuille active à l'écran
sinon tu dois l'identifier devant Range("A3:A70") par
worksheets("NomFeuille").Range("A3:A70") =.....

L = 3
For i = 2 To 70
With Worksheets("Récap1")
Range("A3:A70") = Application.Transpose(.Range(.Cells(3, 2),
.Cells(3, 70)))
End With

Je te laisse pratiquer pour les autres lignes de code !





"LANIMAL" a écrit dans le message de news:
uRmxBz$
Bonjour,
Je voudrais accélérer la boucle ci-dessous :

L = 3
For i = 2 To 70
Range("A" & L) = Worksheets("Récap1").Cells(3, i)
Range("B" & L) = Worksheets("Récap2").Cells(4, i)
Range("C" & L & ":H" & L).Value = Worksheets("Toto").Range("B8:G8).Value
L = L + 1
Next i

J'ai l'intuition que la boucle tournerait plus rapidement si les codes
Range(... qui concernent les cellules A à H de la ligne L
pouvaient être remplacés par une seule ligne du genre :

Range("A" & L & ":H" & L).Value = ????

La question, c'est quoi mettre à la place de ????
Peut être une collection ?
Mon problème est que je ne maitrise pas du tout,
même après avoir lu l'Aide, différents sites (peut-être pas les bons),
et même un bouquin Mirosoft-Press de 600 pages.

La solution de cet exemple m'aiderait probablement à démarrer.
Merci d'avance.