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

Le
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.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Papyjac
Le #17969901
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" 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.



michdenis
Le #17970581
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" 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.
LSteph
Le #17970551
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.


LANIMAL
Le #17970721
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




LANIMAL
Le #17971091
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" 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.



Jacquouille
Le #17979701
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"
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" 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.




Publicité
Poster une réponse
Anonyme