Macro trop longue et répétitive!

  • Initiateur de la discussion Initiateur de la discussion _Sasha_
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

_Sasha_

XLDnaute Nouveau
Bonjour,

J'aurais besoin de l'expertise de certains VBAistes pour ma macro. Comme le titre l'indique, j'ai fait une macro qui fonctionne très bien, mais qui est énormément répétitive et trop longue. Je sais que l'on peut probablement faire une boucle pour mes feuilles "1" à "52" (mes autres feuilles sur mon classeur ne doivent pas être affectées) et utiliser une instruction quelconque pour mes cellules de référence (ils font un pas de 10 lignes entre chaque ligne). Je commence seulement à faire des macros, alors rendu là, je ne sais pas comment faire...

Je vous joint le script de ma macro afin de vous aider,

Merci d'avance,
 
Dernière édition:
Re : Macro trop longue et répétitive!

Bonsoir Sasha, Pierrot93, le fil, le forum.

C'est long à lire 1161 lignes de code VBA après une journée de boulot (lol)

Un suggestion: supprimer les Select réduira déjà pas mal ta macro.

Exemple
Code:
Sheets("1").Select
    Range("I7").Select
    ActiveCell.FormulaR1C1 = _
        "='[Statistiques&Correspondances-2011.xls]Rapport hebdo'!R[2]C[-5]"
peut s'écrire simplement
Code:
Sheets("1").Range("I7").FormulaR1C1 = _
        "='[Statistiques&Correspondances-2011.xls]Rapport hebdo'!R[2]C[-5]"

EDITION: Hello Hasco
 
Dernière édition:
Re : Macro trop longue et répétitive!

Bonjour Sacha, bienvenue sur le forum,

Hi Staple🙂

Mon ami staple à raison, trop long à lire toutes ces lignes, qui plus est dans une feuille excel.

Tu peux joindre un classeur exemple réduit avec
des données anonymisées (une ou deux feuilles suffisent)
un module qui contient ta macro
et nous expliquer ce qu'est censé faire cette macro.

A+
 
Re : Macro trop longue et répétitive!

bonjour
tu répètes ce code
With Selection.Interior
.ColorIndex = 36
.Pattern = xlSolid
End With
au lieu de le répéter tu pourrais créer une procédure auxilliaire qui stocke ce code et qui est appelée par la macro principale
Cordialement
flyonets
 
Re : Macro trop longue et répétitive!

Salut à tous,

Bon apparemment tu fais 50 et quelque fois la même chose, une bonne boucle devrait donc largement réduire ton code.

Essaie donc quelquechose comme cela:
Code:
Sub demandeàtraiter
Dim i as integer      '<---- déclaration de variable

Workbooks.Open Filename:= _
        "G:\Voy-Prestations\Statistiques courrier\Statistiques&Correspondances-2011.xls"
    Windows("Hebdo-2011 - Courbes(TO+MO).xls").Activate

With Application      '<---- 4 lignes pour accélérer le traitement
   .Screenupdating=False
   .Calculation=xlManual
End With

For i=1 to 52      '<---- Début de la boucle
Worksheets(i).Select
Range("I7").Select
    ActiveCell.FormulaR1C1 = _
        "='[Statistiques&Correspondances-2011.xls]Rapport hebdo'!R[2]C[-5]"
    Selection.AutoFill Destination:=Range("I7:N7"), Type:=xlFillDefault
    Range("I8").Select
    ActiveCell.FormulaR1C1 = _
        "='[Statistiques&Correspondances-2011.xls]Rapport hebdo'!R[2]C[-5]"
    Selection.AutoFill Destination:=Range("I8:N8"), Type:=xlFillDefault
    Range("I13").Select
    ActiveCell.FormulaR1C1 = _
        "='[Statistiques&Correspondances-2011.xls]Rapport hebdo'!R[-7]C[-5]+'[Statistiques&Correspondances-2011.xls]Rapport hebdo'!R[-1]C[-5]"
    Selection.AutoFill Destination:=Range("I13:N13"), Type:=xlFillDefault
    Range("I14").Select
    ActiveCell.FormulaR1C1 = _
        "='[Statistiques&Correspondances-2011.xls]Rapport hebdo'!R[-7]C[-5]+'[Statistiques&Correspondances-2011.xls]Rapport hebdo'!R[-1]C[-5]"
    Selection.AutoFill Destination:=Range("I14:N14"), Type:=xlFillDefault
    Range("N7:N8,N13:N14").Select
    With Selection.Interior
        .ColorIndex = 36
        .Pattern = xlSolid
    End With
Next      '<---- Fin de la boucle

With Application      '<---- Réactivation des paramètres du classeurs désactivés plus haut
   .Calculation=xlAutomatic
    .Screenupdating=True
End With

Windows("Statistiques&Correspondances-2011.xls").Activate
    ActiveWorkbook.Save
    ActiveWorkbook.Close
    Windows("Hebdo-2011 - Courbes(TO+MO).xls").Activate
    Sheets("Statistiques").Select
    ActiveWorkbook.Save
    Range("I8").Select

End Sub
Attention, j'ai pas testé ni vérifié que tu ne sautais pas quelques onglets.
Ah, et surtout, n'hésite pas à effectuer ici même les modifs suggérées par Stapple elles sont radicales en terme de rapidité et efficacité du code 🙂

Bon courage
 
Re : Macro trop longue et répétitive!

Re,

A la relecture (rapide) du code je m'aperçois que les formules de calcul font référence à des cellules différentes. Cependant elles ont l'air de respecter des incréments identiques à chaque boucle.
Par exemple Pour le Range("I7") l'incrément semble être de 10. Tu passes de R[2]C[-5] à R[12] puis R[22], etc...
De même pour Range("I8"), Range("I13") et Range("I14") ou l'incrément est aussi de 10.
Dans ce cas il suffit juste de rajouter un compteur à l'intérieur de la boucle du type MonCompteur=MonCompteur+10 et modifier les formules pour quelles tiennent compte du compteur. Soit R[x] doit devenir "...R[" & x+MonCompteur & "]..."

Bon courage
 
Re : Macro trop longue et répétitive!

Hi Staple 🙂

Mon ami staple à raison, trop long à lire toutes ces lignes, qui plus est dans une feuille Excel.

A+

Pour faire simple, j'ai fait un bête copier-coller dans Notepad++. C'est Magic, ça incrémente le code tout seul, le colorise et le rend immédiatement plus facile à lire. Euh, mince ça aurait fait la même chose dans un module VBA aussi d'ailleurs 😕😕
Ceci étant dit, ce (très très long) bout de code était relativement simple à comprendre 😛

D'ailleurs _Sasha_, quand un code est Long ET répétitif alors il faut que tu penses à 2 choses:

  • Une bonne vieille boucle ne peut-elle pas solutionner mon problème ?

  • Une ou plusieurs sous-procédures ne peuvent-elle pas effectuer un traitement répétitif comme le soulignait à juste titre flyonets ?
Sur ce, bonne soirée à tout le monde.
 
Re : Macro trop longue et répétitive!

Re


A tester et finaliser ( à partir du code de Jam)
Code:
Sub demandeàtraiter()
Dim i As Integer      '<---- déclaration de variable
Dim pref$
pref = "'[Statistiques&Correspondances-2011.xls]Rapport hebdo'!"
Workbooks.Open Filename:= _
        "G:\Voy-Prestations\Statistiques courrier\Statistiques&Correspondances-2011.xls"
    Windows("Hebdo-2011 - Courbes(TO+MO).xls").Activate

With Application      '<---- 4 lignes pour accélérer le traitement
   .ScreenUpdating = False
   .Calculation = xlManual
End With

For i = 1 To 52    '<---- Début de la boucle
With Worksheets(i)
.Range("I7:N7").FormulaR1C1 = "=" & pref & "R[2]C[-5]"
.Range("I8:N8").FormulaR1C1 = "=" & pref & "R[2]C[-5]"
.Range("I13:N13").FormulaR1C1 = "=" & pref & "R[-7]C[-5]+" & pref & "!R[-1]C[-5]"
End With
PS: faire les même modifs pour les formules suivantes
 
Dernière édition:
Re : Macro trop longue et répétitive!

Re,

@jam, j'ai beau avoir notepad++ et autres éditeurs en tout genre. Comme le dis Staple, à la fin de la journée, ce genre de chose reste difficilement buvable.

A+
 
Re : Macro trop longue et répétitive!

Re,

MoaOssi suis indulgent avec le demandeur. Il n'y avait pas que cela dans ma première réponse.

Quand au dernier post il s'adressait à Jam.

A+
[EDIT] Mettre des gants pour taper sur le clavier, n'est pas chose aisée🙂
 
Dernière modification par un modérateur:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
21
Affichages
2 K
Réponses
8
Affichages
1 K
Réponses
15
Affichages
3 K
Membre supprimé 341069
M
Retour