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 :

Lenteur lors de la 2e exécution de la macro


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 65
    Par défaut Lenteur lors de la 2e exécution de la macro
    Bonjour,

    je suis très ennuyé sur un sujet où je ne trouve pas de solution technique, je m'explique, j'ai crée un outil qui permet de faire une mise en forme plus fonctionnelle selon mes besoins.

    Pour ce faire, il arrive un moment où je fais de la mise en page des cellules et de la page.

    Tout fonctionne plutôt bien lors de la 1ere exécution, curieusement, à partir de la 2e exécution, c'est très nettement plus lent.

    Alors, le blocage de l'affichage et des calculs le temps de la macro sont déjà mis en place mais ça ne change rien.

    Pour information, dans mon module principal, je fais un call vers un autre module qui contient toutes les mises en pages dont je peux avoir besoin :

    exemple :

    Module principal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        'Mise en forme des colonnes
        Call Commun_MiseEnForme_LargeurColonnes(VarFeuille05, 1, VarDerniereColonne)
    Module mises en formes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Sub Commun_MiseEnForme_LargeurColonnes(Feuille, ColonneDebut, ColonneFin)
     
        'Mise en forme des largeurs de colonnes
        For n2 = ColonneDebut To ColonneFin
            Sheets(Feuille).Columns(n2).ColumnWidth = 10
            Sheets(Feuille).Columns(n2).AutoFit
        Next n2
     
    End Sub
    Je cherchais une piste pour savoir si c'est lié à la mémoire tampon ou au presse papier.

    Si quelqu'un à une idée, je suis preneur.

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Commence par regarder le contenu de VarDerniereColonne lors de chaque exécution.

  3. #3
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 65
    Par défaut
    Bonjour Menhir,

    merci pour l'intérêt que tu as pour mon sujet.

    Je ne pense pas que la valeur de la variable colonne pose problème, j'ai mis un msgbox pour tester la valeur, c'est la même après chaque lancement, soit 13 = dernière colonne non vide de ma feuille.

  4. #4
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 65
    Par défaut
    Je voudrais apporter une nouvelle information.

    Après plusieurs tests effectués car il y a plusieurs mise en forme appelées avec call, je crois que j'ai mis le doigt sur celle qui provoque le problème de ralentissement.

    Module principal :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        'Mise en forme de la page
        Call Commun_MiseEnForme_Page(VarFeuille05, "OrientationPortrait")

    Module mises en formes :

    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
     
    Sub Commun_MiseEnForme_Page(VarFeuille05, Orientation)
     
        With Sheets(VarFeuille05).PageSetup
            .PrintTitleRows = "$1:$1"
            .LeftMargin = "15"
            .RightMargin = "15"
            .TopMargin = "35"
            .BottomMargin = "20"
            .HeaderMargin = "10"
            .FooterMargin = "10"
            .CenterHorizontally = True
            .Zoom = False
            .FitToPagesWide = 1
            .FitToPagesTall = False
            .CenterHeader = VarNomFichier
            .RightFooter = "Page &P à &N"
            If Orientation = "OrientationPaysage" Then
                    .Orientation = xlLandscape
            End If
            If Orientation = "OrientationPortrait" Then
                    .Orientation = xlPortrait
            End If
     
        End With
     
    End Sub
    Temps de traitement 1ere exécution : 12s
    Temps de traitement exécutions suivantes : 51s

    Comme j'ai mis une barre de progression, je constate qu'à partir de la 2e exécution, ce sont toutes les mises en formes qui sont ralentis, pas seulement au moment de la mise en forme de la page.

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

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,

    C'est très probablement PageSetUp qui provoque le ralentissement.
    Tu peux utiliser une macro Excel4 , moins simple mais beaucoup plus rapide :
    Application.executeexcel4macro "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)"Par 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
    'Met en page la ou les feuilles pour l'impression.
    'Seul PrintArea est défini avec ActiveSheet.PageSetup.
    '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.
    'Cm en inches = CentimetersToPoints / 72 :(1.5)=0,590551181102362  (0.5)=0,196850393700787
    '
    Sheets(1).PageSetup.PrintArea = "A1:G25"
    Sheets(1).Activate                       'Obligatoire pour macro Excel 4
    MacroExcel4 = "PAGE.SETUP(,,0.590551181102362,0.590551181102362,0.196850393700787"
    MacroExcel4 = MacroExcel4 & ",0.196850393700787,False,False,True,True,2,9,True,""Auto"",1,"
    MacroExcel4 = MacroExcel4 & "False,,0.196850393700787,0.196850393700787)"
    Application.ExecuteExcel4Macro MacroExcel4

  6. #6
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 65
    Par défaut
    Bonjour Patrice740,

    En effet, j'ai tenté de m'orienter vers cette solution car sur le net, tout le monde semble aller dans ce sens là.

    Cependant, après ma batterie de tests (avant j'avais des cheveux, maintenant, je n'en ai plus ), je me suis rendu compte que le ralentissement provient dès lors que je vais dans Fichier/Imprimer, à partir de là, quelque soit la façon de programmer la mise en page, le ralentissement est là.

    ça reste un très grand mystère pour moi

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

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Re,
    Citation Envoyé par windsor Voir le message
    je me suis rendu compte que le ralentissement provient dès lors que je vais dans Fichier/Imprimer, à partir de là, quelque soit la façon de programmer la mise en page, le ralentissement est là. ça reste un très grand mystère pour moi
    C'est peut être le temps de réponse de l'imprimante, est-elle en marche ?
    Essaies avec une autre imprimante (ou une imprimante virtuelle).

  8. #8
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 65
    Par défaut
    Re,

    Oui oui, elle est bien en fonction.

    J'ai même tenté de mettre l'imprimante Microsoft XPS Document Writer mais c'est pareil.

    En définitive, la seule solution que j'ai trouvé et qui a l'air de fonctionner, c'est de supprimer la feuille et d'en créer une nouvelle.

    Dans mon cas, je peux me le permettre puisque j'ouvre un fichier source systématiquement pour en copier les données dans une feuille avant de faire le traitement et la mise en page.

    Mais, c'est quand même un peu fou tout ça !

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

Discussions similaires

  1. Réinitialiser le fichier lors d'une nouvelle exécution de la macro
    Par mathilde13870 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 17/03/2014, 19h40
  2. Réponses: 8
    Dernier message: 28/09/2011, 16h18
  3. Lenteur lors de la lecture d'une base Access
    Par Lio590 dans le forum Bases de données
    Réponses: 6
    Dernier message: 16/11/2005, 12h24
  4. lenteur lors de mes insert into
    Par shiners300 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 19/09/2005, 13h49
  5. Lenteur lors d'une insertion (sql server)
    Par shiners300 dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 16/09/2005, 09h09

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