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 :

Epuration de code gain de vitesse


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Par défaut Epuration de code gain de vitesse
    Bonjour,
    J'ai ecrit une macro qui permet de vérifier les en têtes et pieds de page avant l'impression.
    Le problème est que c'est assez long.
    Je suis plutôt débutant en programmation, j'ai appris tout seul il y a quelque semaines donc il y a forcement dese choses que je ne connait pas.

    Une autre petite chose, j'aimerai pouvoir aller à la ligne pour cette en tête:
    .CenterHeader = "&14" & "Tableau récapitulatif chantier " & chantier & " à fin semaine " & ns ' "&F"
    comment faire?

    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
    60
    61
    62
    63
    64
    65
    Private Sub Workbook_BeforePrint(Cancel As Boolean)
     
     
    'Vient controler que le nom des feuilles n'a pas été changé
    'Si il a été changé, il renomme les feuilles corectement
    'Remet également les en-tête et pied de page par défaut
     
    Dim i As Integer
    Dim nom As String
     
    Application.ScreenUpdating = False
    Application.EnableEvents = False
     
    On Error GoTo fin
     
        For Each Sheet In ThisWorkbook.Sheets
        If Sheet.Name = "Feuille de Saisie" Then
        ns = Sheet.Cells(1, 9).Value
        chantier = Sheet.Cells(1, 4).Value
        With Sheet.PageSetup
            .LeftHeader = "                  &G"
            .CenterHeader = "&14" & "Tableau récapitulatif chantier " & chantier & " à fin semaine " & ns ' "&F"
            .RightHeader = "Date dernière  modification : &D"
            .LeftFooter = "&F"
            .CenterFooter = ""
            .RightFooter = ""
        End With
        Else
        With Sheet.PageSetup
            .LeftHeader = "                  &G"
            .CenterHeader = "&14" & "BILAN TACHE: " & nom
            .RightHeader = "Date dernière  modification : &D"
            .LeftFooter = "&F"
            .CenterFooter = ""
            .RightFooter = "Fiche de suivi version finale Imhoff Energies et Santé"
        End With
        End If
     
        If Sheet.Name = "Feuille de Saisie" Or Sheet.Name = "Feuil1" Then GoTo suite
     
        nom = Sheet.Cells(3, 1).Value
        trouve = ""
        i = 5
     
        Do Until trouve = nom
        trouve = "(" & Sheets("Feuille de Saisie").Cells(i, 1).Value & ") " & Sheets("Feuille de Saisie").Cells(i, 2).Value
        i = i + 1
        If i = 1000 And trouve <> nom Then
        Sheet.Name = Left(Sheet.Cells(3, 1).Value, 18) & " " & Sheet.Cells(3, 17).Value
        GoTo suite
        End If
        Loop
     
        i = i - 1
     
        If Sheet.Name <> "(" & Me.Sheets("Feuille de Saisie").Cells(i, 1).Value & ") " & Left(Me.Sheets("Feuille de Saisie").Cells(i, 2).Value, 15) & " " & Me.Sheets("Feuille de Saisie").Cells(i, 6).Value Then
        Sheet.Name = "(" & Me.Sheets("Feuille de Saisie").Cells(i, 1).Value & ") " & Left(Me.Sheets("Feuille de Saisie").Cells(i, 2).Value, 15) & " " & Me.Sheets("Feuille de Saisie").Cells(i, 6).Value
        End If
    suite:
        Next Sheet
     
    fin:
    Application.EnableEvents = True
    Application.ScreenUpdating = True
    End Sub

  2. #2
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    'Vient controler que le nom des feuilles n'a pas été changé
    'Si il a été changé, il renomme les feuilles corectement
    'Remet également les en-tête et pied de page par défaut
    Salut, un conseil déjà : voir http://silkyroad.developpez.com/VBA/...alcul/#LII-B-6
    CodeName : cela te permet en cas de changement des noms d'onglet,d'ajout de feuilles ou de déplacement de feuille de ne pas avoir à retoucher au code VBA

  3. #3
    Membre expérimenté
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Par défaut
    En fait j'ai un classeur avec pleins de feuilles.
    Je rappatrie les infos de ces feuilles vers une feuille récapitulative.
    Chaque ligne corespond à une feuille du classeur.
    Les feuilles du classeur sont générée automatiquement par macro.
    La macro qui rappatrie les infos s'appuie sur le nom de la feuille pour mettre les infos dans la bonne ligne.
    J'avais au début basé cette macro sur le code name mais comme on peut rajouter des lignes et donc des feuilles en cours de route cela ne marchait pas.
    En gros quand on rajoute une ligne sur la feuille récapitulatif il y a une macro qui permet de créer automatiquement la feuille corespondante. Seulement on peut ajouter la ligne au mileu du tableau et la feuille créée sera quand à elle à la fin du classeur. Trouver des corespondance devenait trop compliqué, c'est pourquoi j'ai décidé de me baser sur le nom de la feuille.
    J'ai mis des sécurités, j'ai une macro qui vient vérifier que le nom n'a pas été changé quand on désactive une feuille.
    J'ai une autre macro qui viens vérifier qu'il y a corespondance entre une ligne du tableau récapitulatif et le nom d'une feuille. si elle ne trouve pas je demande à l'utilisateur de renommer corectement la feuille ou de modifier les infos dans le tableau pour qu'il y ai corespondance.

    En fait renommer les feuilles est assez rapide au niveau de l'execution. Ce qui pose problème je pense ce sont les en têtes et pied de page, cette partie est lente à l'execution, mais je ne sais pas comment faire autrement.

  4. #4
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    re, ?????
    J'avais au début basé cette macro sur le code name mais comme on peut rajouter des lignes et donc des feuilles en cours de route cela ne marchait pas.
    De toute façon PageSetup a toujours été lent, il y aurait peut-être la possibilité de passer par ExecuteExcel4Macro

  5. #5
    Membre expérimenté
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Par défaut
    Effectivement code name pourrai fonctionner, mais j'ai pas le courage de rechanger.

    je ne comprend pas la différence entre mon page.setup et la ExecuteExcel4Macro : Page.Setup("",,,)
    est ce plus rapide?

    sinon une idée pour aller à la ligne?

  6. #6
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132

Discussions similaires

  1. y-a-t-il un gain de vitesse entre vm7 et vm9 ?
    Par clavier12AZQSWX dans le forum VMware
    Réponses: 1
    Dernier message: 28/12/2012, 10h18
  2. Formulaires en mode Snapshot : gain de vitesse d'ouverture?
    Par RobiPMS dans le forum Modélisation
    Réponses: 0
    Dernier message: 05/05/2011, 15h58
  3. Epuration du Code
    Par GillesT60 dans le forum EDI
    Réponses: 4
    Dernier message: 22/06/2010, 08h55
  4. Vitesse d'exécution d'un code en C.
    Par criga dans le forum C
    Réponses: 8
    Dernier message: 11/12/2007, 05h17
  5. epuration de code C++
    Par deubelte dans le forum C++
    Réponses: 14
    Dernier message: 28/12/2006, 20h30

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