Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

accélérer ses macros

  • Initiateur de la discussion Initiateur de la discussion youki
  • 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 !

youki

XLDnaute Occasionnel
Bonjour,
j'ai une macro qui tourne bien mais, à mon gout, trop lente pour ce qu'elle produit.

Tout d'abord une question:

1- Comment nettoyer plusieur feuilles de classeur sans utiliser le :

Code:
sheets("feuillex").activate

Je suppute que les action "activates" ralentissent énormément les macros

2 - Sensiblement la même question. A partir du moment ou je fais un range("XX").select, il faut que quelque-part précédemment j'ai fait un sheet.activate. Comment faire autrement (malgré que je précise bien les sheets avant, exemple:

Code:
Sheets("stack").Range("I1:N3,B1:G3").Select



3- boucle for versus boucle while, y a t'il une différence notable de vitesse (dans certains languages, c'est le cas)

4- Toutes suggestions qui accélèreraient les macros sont les bienvenues.

D'avance merci
 
Re : accélérer ses macros

Bonjour,

Voila ce que je connais :
- Désactiver l'affichage : Application.ScreenUpdating = False
- Eventuellement le recalcul auto : Application.Calculation = xlCalculationManual
- Privilégier les boucles For each
- Eviter les Select (si possible)

Caillou
 
Re : accélérer ses macros

Bonjour,

un exemple de copie d'une feuille à une autre sans "select" :

Code:
Sheets(1).Range("A1:A10").Copy Destination:=Sheets(2).Range("A1")

A noter tu peux remplacer les numéros d'index des feuilles par leurs noms :

Code:
Sheets("NomFeuille")

bon après midi
@+
 
Re : accélérer ses macros

par exemple comment faire mieux que ça?

Code:
Sheets("stack").Activate
    Sheets("stack").Range("I1:N3,B1:G3").Select
        With Selection
        .ClearContents
        End With
    derli = Sheets("Insertion").Range("A3000").End(xlUp).Row
    Sheets("Insertion").Activate
 
 If Sheets("Insertion").Range("j13").Value = "" Then
    MsgBox ("Mettre un nom de fichier: condition initiale obligatoire")
    Exit Sub
 Else

Sachant que pour le test de if par exemple si je n'active pas la page avant il créer une erreur.
 
Re : accélérer ses macros

Re,

peut être comme ceci :

Code:
Sheets("stack").Range("I1:N3,B1:G3").ClearContents

pour le test "if", devrait passer, à voir dans quelle condition il est utilisé et où il est placé... module de feuille ou module standard...

Edition : il faut un "end if" bien sur... tu donnes qu'une partie du code...
 
Re : accélérer ses macros

Bonjour Pierrot,

Code:
  Sheets("stack").Range("I1:N3,B1:G3").ClearContents
  
  With Sheets("Insertion")
    derli = .Range("A3000").End(xlUp).Row
    If .Range("j13").Value = "" Then
      MsgBox ("Mettre un nom de fichier: condition initiale obligatoire")
      Exit Sub
    End If
  End With

Ce code fonctionne !

Caillou
 
Re : accélérer ses macros

Nickel caillou, nickel pierrot déja un grand merci

Pour faire des for each sur une feuille ou il n'ya qu'une zone de taille variable à parcourir. Il faut auparavant creer un nom à la zone?

Comment lui préciser que le for each s'applique uniquement à la zone?
 
Dernière édition:
Re : accélérer ses macros

Re,

Que tu utilises un bloc With ou non, le traitement effectué par la macro est toujours de ton ressort. En aucun cas, Excel ne fait ce que tu ne lui demande pas (tout au plus, il fait pas ce que tu voudrais lui demandé!)

Pour en revenir au bloc With, il permet d'appliquer une série d'instruction à un objet.
Par exemple pour ton code, on peut écrire ceci :
Code:
  With Sheets("Insertion").Range("A1:z3000")
    .ClearContents
    With .Font
      .Name = "Arial"
      .Size = 10
      .Strikethrough = False
      .Superscript = False
      .Subscript = False
      .OutlineFont = False
      .Shadow = False
      .Underline = xlUnderlineStyleNone
      .ColorIndex = xlAutomatic
     End With
    .WrapText = False
    .Orientation = 0
    .AddIndent = False
    .ShrinkToFit = False
    .MergeCells = False
    .Borders.LineStyle = xlNone
    .Borders(xlDiagonalDown).LineStyle = xlNone
    .Borders(xlDiagonalUp).LineStyle = xlNone
    .Rows.AutoFit
  End With

Caillou
 
- 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
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…