IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Optimisation de mon code


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé Avatar de Souriane
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2009
    Messages
    541
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2009
    Messages : 541
    Points : 758
    Points
    758
    Par défaut Optimisation de mon code
    Bonjour,

    J'essaie d'optimiser la macro ci-dessous. J'ai identifié une section qui est très lente à exécuter pour chaque onglet à travers lesquels elle passe. Il s'agit de la section qui fait la mise en page pour impression. Est-ce que quelqu'un peut m'aider?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    Sub MacroA()
     
    'Traite toutes les feuilles du fichier
    Dim x As Integer
     Application.ScreenUpdating = False
     For x = 1 To Sheets.Count
        R_Index_GLOBAL_2 Sheets(x)
    Next x
    Application.ScreenUpdating = True
     
    End Sub
     
     
    Sub R_Index_GLOBAL_2(ByVal FeuilleEnTraitement As Worksheet)
     
    '===============================
    'Début Section lente
    '===============================
     
        With FeuilleEnTraitement.PageSetup
            .PrintArea = ""
            .LeftMargin = Application.InchesToPoints(0.037401575)
            .RightMargin = Application.InchesToPoints(0.037401575)
            .TopMargin = Application.InchesToPoints(0.734251969)
            .CenterHorizontally = True
            .Orientation = xlLandscape
            .PaperSize = 5
            .Zoom = 100
        End With
     
    '===============================
    'Fin Section lente
    '===============================
     
     
       With FeuilleEnTraitement.Cells
        .Font.Name = "Arial"
        .Font.Size = 5
        .VerticalAlignment = xlTop
        End With
     
        With FeuilleEnTraitement.Rows
            .EntireRow.AutoFit
        End With
     
       With FeuilleEnTraitement
            .Columns("A:A").ColumnWidth = 11.86
            .Columns("B:B").ColumnWidth = 64.29
            .Columns("C:C").ColumnWidth = 4.57
            .Columns("C:C").HorizontalAlignment = xlCenter
            .Columns("D:D").ColumnWidth = 15.57
            .Columns("E:E").ColumnWidth = 4
            .Columns("F:F").ColumnWidth = 14
            .Columns("G:G").ColumnWidth = 15
            .Columns("G:G").HorizontalAlignment = xlCenter
            .Columns("G:G").NumberFormat = "[$-F800]dddd, mmmm dd, yyyy"
        End With
     
    End Sub
    Je suis ouverte à toute suggestion d'amélioration pour cette section et le reste du code! Un gros merci!

    Souriane

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Souriane Voir le message
    Salut Souriane,

    Neutralise déjà Application.PrintCommunication pour voir. Pour les autres commandes, regarde si elles ont de l'effet, ce doit être peanuts


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    Sub MacroA()
     
    'Traite toutes les feuilles du fichier
    Dim x As Integer
    Dim HeureDebut2, HeureFin2, TempsTotal2
     
       HeureDebut2 = Timer
       With Application
            .CutCopyMode = False
            .PrintCommunication = False
            .ScreenUpdating = False
            .Calculation = xlCalculationManual
     
             For x = 1 To Sheets.Count
                 R_Index_GLOBAL_2 Sheets(x)
             Next x
     
             .ScreenUpdating = True
             .Calculation = xlCalculationAutomatic
             .PrintCommunication = True
     
        End With
     
        HeureFin2 = Timer
        TempsTotal2 = HeureFin2 - HeureDebut2
     
        MsgBox "Temps total du traitement : " & Round(TempsTotal2, 2) & " seconde(s)", vbInformation
     
    End Sub

  3. #3
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Bonjour,
    Citation Envoyé par Souriane Voir le message
    J'essaie d'optimiser la macro ci-dessous. J'ai identifié une section qui est très lente à exécuter pour chaque onglet à travers lesquels elle passe. Il s'agit de la section qui fait la mise en page pour impression. Est-ce que quelqu'un peut m'aider?
    Tu peux essayer avec la macro Excel4 PAGE.SETUP(), moins simple mais bien plus rapide.

    Un vieil exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    Private Sub MiseEnPage(Optional orientation As Byte = xlPortrait)
    ' Met en page la feuille active. L'utilisation la macro Excel4 PAGE.SETUP() est nettement
    ' plus rapide, elle envoie tous les arguments en une seule fois alors que PageSetup effectue
    ' un appel par valeur à définir. Syntaxe :
    ' PAGE.SETUP(en_tête, pied_pg, marge_gch, marge_dr, marge_haut, marge_bas, no_lig_col,
    '            quadrillage, centr_hor, centr_vert, orient, papier, échelle, no_pg, ordre_impr,
    '            cellules_nb, qualité, marge_en_tête, marge_pied_pg, annot, brouillon)
    '
    ' Note : Pour afficher la boite de dialogue utiliser PAGE.SETUP?() avec la même syntaxe.
    '
    ' 09/09/08    Patrice             V3-1-03
    '
    Dim txt As String                 'Texte de la macro Excel4
    Dim marge_gauche As String        'Marge gauche
    Dim marge_droite As String        'Marge droite
    Dim marge_haut As String          'Marge haut
    Dim marge_bas As String           'Marge bas
    Dim marge_en_tête As String       'Marge en-tête
    Dim marge_pied_page As String     'Marge pied de page
     
      'Arrêter l'actualisation automatique de l'écran et les calculs
      Application.ScreenUpdating = False
      Application.Calculation = xlCalculationManual
      'Définir les marges (en cm)
      marge_gauche = Replace(CStr(Application.CentimetersToPoints(0.5) / 72), ",", ".")
      marge_droite = Replace(CStr(Application.CentimetersToPoints(0.5) / 72), ",", ".")
      marge_haut = Replace(CStr(Application.CentimetersToPoints(0.5) / 72), ",", ".")
      marge_bas = Replace(CStr(Application.CentimetersToPoints(1) / 72), ",", ".")
      marge_en_tête = Replace(CStr(Application.CentimetersToPoints(0.5) / 72), ",", ".")
      marge_pied_page = Replace(CStr(Application.CentimetersToPoints(0.4) / 72), ",", ".")
      'Macro Excel 4
      txt = "PAGE.SETUP("
      txt = txt & "" & ","                             'En tête
      txt = txt & """&L" & "&D"                        'Pied de page gauche (date)
      txt = txt & "&C" & "&A"                          'Pied de page centre (feuille)
      txt = txt & "&R" & "Page &P / &N""" & ","        'Pied de page droit (Page page/pages)
      txt = txt & marge_gauche & ","
      txt = txt & marge_droite & ","
      txt = txt & marge_haut & ","
      txt = txt & marge_bas & ","
      txt = txt & "False,False,"                       'En tête ligne & colonne, quadrillage
      txt = txt & "True,False,"                        'Centrage horizontal, vertical
      txt = txt & orientation & ","
      txt = txt & xlPaperA4 & ","                      'Papier
      txt = txt & "100,""Auto"",1,False,,"             'Echelle, no_pg, ordre_impr, N&B, qualité
      txt = txt & marge_en_tête & ","
      txt = txt & marge_pied_page & ")"
      Application.ExecuteExcel4Macro txt
      'Restaurer l'actualisation automatique de l'écran et les calculs
      Application.ScreenUpdating = True
      Application.Calculation = xlCalculationAutomatic
     
    End Sub

  4. #4
    Membre averti
    Profil pro
    au repos
    Inscrit en
    Février 2013
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : Saint-Pierre-Et-Miq.

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2013
    Messages : 156
    Points : 331
    Points
    331
    Par défaut
    Salut,
    il manque quelques informations pour bien cerner ton problème.
    Quelle est la complexité de ton classeur (nombre d'onglets, nombre de lignes actives, avec des formules ?). As-tu essayé avec un classeur simple ? moi je n'ai pas pas de souci de lenteur avec un classeur simple.
    Quelle est ta version d'excel ?
    Quel est le temps d'exécution pour chaque onglet ?
    Quelle est l'imprimante utilisée ?
    Nullosse.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Optimisation de mon code utilisant simple xml
    Par heretik25 dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 05/08/2011, 20h13
  2. Optimisation de mon code
    Par ordner dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 06/03/2009, 16h19
  3. Optimisation de mon code ActionScript
    Par amnesias dans le forum Flash
    Réponses: 9
    Dernier message: 01/04/2007, 22h04
  4. OPTIMISER mon code
    Par valoji dans le forum Bases de données
    Réponses: 3
    Dernier message: 14/03/2006, 18h45
  5. Optimiser mon code ASP/HTML
    Par ahage4x4 dans le forum ASP
    Réponses: 7
    Dernier message: 30/05/2005, 10h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo