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

Simplifier une macro trop longue ?

4 réponses
Avatar
Laure
Bonjour,

J'ai une macro qui fait comme suit :

Sheets("Semaine 01").Select
Range("A6:D57").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Récap Annuelle").Select
Range("DA2446").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Sheets("Semaine 02").Select
Range("A6:D57").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Récap Annuelle").Select
Range("DA2498").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

' ETC... Jusqu'à :

Sheets("Semaine 52").Select
Range("A6:D57").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Récap Annuelle").Select
Range("DA2498").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Elle fonctionne parfaitement, mais elle est bien longue. Le problème c'est
que je souhaiterais la rallonger encore, y rajouter des trucs, mais si je le
fais j'ai une erreur qui me dit que la procédure est trop longue.
Visiblement il y a un nombre de lignes maximum à respecter dans une
macro....

Y a-t-il moyen de la raccourcir en quelque chose du genre :

'pour chaque feuille nommée de "Semaine 01" à "Semaine 52" :
Range("A6:D57").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Récap Annuelle").Select
Range("DA2498").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Ce qui diviserait la longueur par 52 !! :-)

Merci d'avance !!
Laure

4 réponses

Avatar
LSteph
Bonsoir "Laure",
si c'est chaque fois Range("DA2498") cela va écraser??
.Sinon
pour faire un récap en Feuil1, exemple
En admettant donc que Feuil1 (le recap) sera en tête et que suivent les 52
feuilles semaines.(rien d'autre) :

'***
Sub recop()
Dim sh As Worksheet
Application.ScreenUpdating = False
For Each sh In ActiveWorkbook.Worksheets
If sh.Index > 1 Then
sh.Range("A6:D57").Copy
Sheets("Feuil1").[a65536].End(xlUp) _
.Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues
End If
Next
Application.ScreenUpdating = True
End Sub
'***
'lSteph



"Laure" a écrit dans le message de news:
dqucln$m9k$
Bonjour,

J'ai une macro qui fait comme suit :

Sheets("Semaine 01").Select
Range("A6:D57").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Récap Annuelle").Select
Range("DA2446").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks
_
:úlse, Transpose:úlse

Sheets("Semaine 02").Select
Range("A6:D57").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Récap Annuelle").Select
Range("DA2498").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks
_
:úlse, Transpose:úlse

' ETC... Jusqu'à :

Sheets("Semaine 52").Select
Range("A6:D57").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Récap Annuelle").Select
Range("DA2498").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks
_
:úlse, Transpose:úlse

Elle fonctionne parfaitement, mais elle est bien longue. Le problème c'est
que je souhaiterais la rallonger encore, y rajouter des trucs, mais si je
le fais j'ai une erreur qui me dit que la procédure est trop longue.
Visiblement il y a un nombre de lignes maximum à respecter dans une
macro....

Y a-t-il moyen de la raccourcir en quelque chose du genre :

'pour chaque feuille nommée de "Semaine 01" à "Semaine 52" :
Range("A6:D57").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Récap Annuelle").Select
Range("DA2498").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks
_
:úlse, Transpose:úlse

Ce qui diviserait la longueur par 52 !! :-)

Merci d'avance !!
Laure



Avatar
Michel Gaboly
Bonsoir,

On peut diviser par + de 52, car de sélectionner les différentes feui lles et plages. Quant aux Copier Collage Special,
une simple égalité les remplace avantageusement.

Sub Récap()
Dim i As Integer
With Sheets("Récap Annuelle").Range("DA2445")
For i = 1 To 4
Range(.Offset((i - 1) * 52 + 1), .Offset(i * 52, 3)).Val ue = Sheets("Semaine " & Format(i,
"00")).Range("A6:D57").Value
Next
End With
End Sub

NB - L'instruction entre le "For i = 1 to 52" et le "Next", "Range(.Off set ... ).Value" doit être sur une seule ligne.


Bonjour,

J'ai une macro qui fait comme suit :

Sheets("Semaine 01").Select
Range("A6:D57").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Récap Annuelle").Select
Range("DA2446").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, Ski pBlanks _
:úlse, Transpose:úlse

Sheets("Semaine 02").Select
Range("A6:D57").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Récap Annuelle").Select
Range("DA2498").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, Ski pBlanks _
:úlse, Transpose:úlse

' ETC... Jusqu'à :

Sheets("Semaine 52").Select
Range("A6:D57").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Récap Annuelle").Select
Range("DA2498").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, Ski pBlanks _
:úlse, Transpose:úlse

Elle fonctionne parfaitement, mais elle est bien longue. Le problème c'est
que je souhaiterais la rallonger encore, y rajouter des trucs, mais si je le
fais j'ai une erreur qui me dit que la procédure est trop longue.
Visiblement il y a un nombre de lignes maximum à respecter dans une
macro....

Y a-t-il moyen de la raccourcir en quelque chose du genre :

'pour chaque feuille nommée de "Semaine 01" à "Semaine 52" :
Range("A6:D57").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Récap Annuelle").Select
Range("DA2498").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, Ski pBlanks _
:úlse, Transpose:úlse

Ce qui diviserait la longueur par 52 !! :-)

Merci d'avance !!
Laure





--
Cordialement,

Michel Gaboly
www.gaboly.com

Avatar
Laure
Merci beaucoup !!
Ca fonctionne impeccable !
Et en plus la macro s'exécute beaucoup rapidement !!

Laure


"Michel Gaboly" a écrit dans le message de news:

Bonsoir,

On peut diviser par + de 52, car de sélectionner les différentes feuilles et
plages. Quant aux Copier Collage Special,
une simple égalité les remplace avantageusement.

Sub Récap()
Dim i As Integer
With Sheets("Récap Annuelle").Range("DA2445")
For i = 1 To 4
Range(.Offset((i - 1) * 52 + 1), .Offset(i * 52, 3)).Value
= Sheets("Semaine " & Format(i,
"00")).Range("A6:D57").Value
Next
End With
End Sub

NB - L'instruction entre le "For i = 1 to 52" et le "Next", "Range(.Offset
... ).Value" doit être sur une seule ligne.


Bonjour,

J'ai une macro qui fait comme suit :

Sheets("Semaine 01").Select
Range("A6:D57").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Récap Annuelle").Select
Range("DA2446").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks
_
:úlse, Transpose:úlse

Sheets("Semaine 02").Select
Range("A6:D57").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Récap Annuelle").Select
Range("DA2498").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks
_
:úlse, Transpose:úlse

' ETC... Jusqu'à :

Sheets("Semaine 52").Select
Range("A6:D57").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Récap Annuelle").Select
Range("DA2498").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks
_
:úlse, Transpose:úlse

Elle fonctionne parfaitement, mais elle est bien longue. Le problème c'est
que je souhaiterais la rallonger encore, y rajouter des trucs, mais si je
le fais j'ai une erreur qui me dit que la procédure est trop longue.
Visiblement il y a un nombre de lignes maximum à respecter dans une
macro....

Y a-t-il moyen de la raccourcir en quelque chose du genre :

'pour chaque feuille nommée de "Semaine 01" à "Semaine 52" :
Range("A6:D57").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Récap Annuelle").Select
Range("DA2498").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks
_
:úlse, Transpose:úlse

Ce qui diviserait la longueur par 52 !! :-)

Merci d'avance !!
Laure




--
Cordialement,

Michel Gaboly
www.gaboly.com

Avatar
Michel Gaboly
De rien, c'était avec plaisir ;-))

L'amélioration en terme de vitesse montre bien que les Select et les Co pier-Coller sont à éviter autant que possble ;-)))

Merci beaucoup !!
Ca fonctionne impeccable !
Et en plus la macro s'exécute beaucoup rapidement !!

Laure


"Michel Gaboly" a écrit dans le message de news:

Bonsoir,

On peut diviser par + de 52, car de sélectionner les différentes fe uilles et
plages. Quant aux Copier Collage Special,
une simple égalité les remplace avantageusement.

Sub Récap()
Dim i As Integer
With Sheets("Récap Annuelle").Range("DA2445")
For i = 1 To 4
Range(.Offset((i - 1) * 52 + 1), .Offset(i * 52, 3)).V alue
= Sheets("Semaine " & Format(i,
"00")).Range("A6:D57").Value
Next
End With
End Sub

NB - L'instruction entre le "For i = 1 to 52" et le "Next", "Range(.O ffset
... ).Value" doit être sur une seule ligne.



Bonjour,

J'ai une macro qui fait comme suit :

Sheets("Semaine 01").Select
Range("A6:D57").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Récap Annuelle").Select
Range("DA2446").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, Ski pBlanks
_
:úlse, Transpose:úlse

Sheets("Semaine 02").Select
Range("A6:D57").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Récap Annuelle").Select
Range("DA2498").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, Ski pBlanks
_
:úlse, Transpose:úlse

' ETC... Jusqu'à :

Sheets("Semaine 52").Select
Range("A6:D57").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Récap Annuelle").Select
Range("DA2498").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, Ski pBlanks
_
:úlse, Transpose:úlse

Elle fonctionne parfaitement, mais elle est bien longue. Le problème c'est
que je souhaiterais la rallonger encore, y rajouter des trucs, mais si je
le fais j'ai une erreur qui me dit que la procédure est trop longue.
Visiblement il y a un nombre de lignes maximum à respecter dans une
macro....

Y a-t-il moyen de la raccourcir en quelque chose du genre :

'pour chaque feuille nommée de "Semaine 01" à "Semaine 52" :
Range("A6:D57").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Récap Annuelle").Select
Range("DA2498").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, Ski pBlanks
_
:úlse, Transpose:úlse

Ce qui diviserait la longueur par 52 !! :-)

Merci d'avance !!
Laure








--
Cordialement,

Michel Gaboly
www.gaboly.com