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 :

Problème Excel4macro PAGE.SETUP [XL-2003]


Sujet :

Macros et VBA Excel

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

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Par défaut Problème Excel4macro PAGE.SETUP
    Bonjour,
    J'ai une macro qui vient vérifier les en têtes et pied de page avant l'impression. Seulement en passant par page.setup de VBA c'est lent.
    J'aimerai utiliser Excel4Macro mais je n'y parvient pas.
    Quand j'essaie de lancer le code ça plante. Faut il ajouter une référence?
    Est ce possible d'utiliser Excel4Macro avec Excel 2003?
    J'aimerai que cette macro soit utilisable sous excel 2007 est ce que ce sera possible?
    J'ai essayé avec ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ExecuteExcel4Macro ("Page.Setup(""Hello"",""Testing"",0.75,0.75,1,1,FALSE,FALSE,FALSE,FALSE,2,9,TRUE,100,1,FALSE,360,0.5,0.5,FALSE,FALSE)")
    mon code vba est celui ci il est placé dans thisworkbook sub before print:

    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
    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 = "&16" & "Tableau récapitulatif chantier n°" & Cells(1, 3).Value & Chr(10) & chantier & " à fin semaine " & ns '& Chr(10) & "&F"
            .RightHeader = "&14" & "Date de dernière  modification : &D" & Chr(10) & "&F"
            .LeftFooter = ""
            '.CenterFooter = ""
            .RightFooter = ""
        End With
        Else
        nom = Sheet.Cells(3, 1).Value
        With Sheet.PageSetup
            .LeftHeader = "                  &G"
            .CenterHeader = "&14" & "BILAN TACHE: " & nom
            .RightHeader = "Date de dernière  modification : &D"
            .LeftFooter = "&F"
            '.CenterFooter = ""
            .RightFooter = "Fiche de suivi "
        End With
        End If
    Si vous êtes à l'aise avec les arguments du page.setup et que vous me doniez l'équivalent de ce que j'ai écrit ce serai parfait.
    Sinon si vous savez le pourquoi du comment ça ne fonctionne pas pour moi je suis preneur.

    Merci

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Bonjour,
    Pourquoi vouloir employer les Macros4 qui ne sont plus suivie par MS depuis 2004 et qui risque fort de ne plus fonctionner dans les versions ultérieures ?
    Mais si tu veux absolument avoir les renseignement ET QUE TU EST ENCORE SUR XP (va plus sur vista) aide sur les Macros4
    A+

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

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Par défaut
    En fait le but du jeu est que ce soit plus rapide à l'execution.
    En effet la macro que j'ai actuellment est assez lente.
    J'ai des classeurs avec environ 60 pages et chaque fois que l'on veut imprimer il vérifie tout, c'est donc long.
    C'est vrai que c'est dommage d'utiliser quelque chose qui est déjà obsolète mais bon, je ne voyais pas d'autre solutions pour accélérer la procedure.

    En fait ce qui prend du temp c'est de regarder les paramètre d'en tête et de pied de page, je pense que je vais contourner le problème en inscrivant le nom de la feuille et la date de dernière modif dans une cellule de la page, genre A36000, personne n'ira voir la bas. et ensuite mettre la condition sur le contenu de la cellule. De cette manière la macro ne rentrera dans les paramètre d'en tête et de pied de page uniquement si quelque chose à été changé, ou uniquement à la première ouverture de la journée (encore que je me demande si je ne vais pas suprimer cette partie).

    Le problème de cette solution est que stocker les infos dans une cellule de la feuille n'est pas trés élégant.C'est un peu bidouille comme truc.

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Si ce n'est que pour une question de rapidité ce n'est pas là qu'il faut chercher le motif de la "lenteur" et même si tu emploi une Macros4 tu ne gagneras rien du tout.
    Les lignes que tu met pour initialiser les pages ne sont pas en cause et à mon avis ce sont celles-là que tu dois garder.
    A+

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

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Par défaut
    Je n'ai pas tout compris. Qu'est ce que tu entends par là:
    Citation Envoyé par LeForestier Voir le message
    Les lignes que tu met pour initialiser les pages ne sont pas en cause et à mon avis ce sont celles-là que tu dois garder.
    voici le code en entier:

    Si j'enlève la partie qui controle les en têtes et pied de page c'est beaucoup plus rapide, c'est pour ça que je pensais que ça venait de là.

    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
    66
    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 = "&16" & "Tableau récapitulatif chantier n°" & Cells(1, 3).Value & Chr(10) & chantier & " à fin semaine " & ns '& Chr(10) & "&F"
            .RightHeader = "&14" & "Date de dernière  modification : &D" & Chr(10) & "&F"
            .LeftFooter = ""
            '.CenterFooter = ""
            .RightFooter = ""
        End With
        Else
        nom = Sheet.Cells(3, 1).Value
        With Sheet.PageSetup
            .LeftHeader = "                  &G"
            .CenterHeader = "&14" & "BILAN TACHE: " & nom
            .RightHeader = "Date de dernière  modification : &D"
            .LeftFooter = "&F"
            '.CenterFooter = ""
            .RightFooter = "Fiche de suivi version finale "
        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

  6. #6
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Je ne comprend pas bien ta macros, quand tu imprime, c'est une page ou bien tout le classeur au moyen d'une autre macro ?

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

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Par défaut
    C'est une impresison manuelle, ce que je ne veux pas c'est qu'une page puisse sortir avec la mauvaise en tête ou pied de page.
    Cette macro permet de remettre en forme les en têtes et pied de page de toutes les page du classeur avant chaque impression. Par la même occasion la macro vérifie que le nom des feuilles soit le bon. Cette partie n'est pas spécialement importante(ce code est présent dans sheet deactivate aussi donc c'est redondant et j'envisage de l'enlever de before print), c'est surtout l'en tête et le pied de page qui m'interressent.
    Que ce soit pour imprimer une page ou toutes.
    voici le code sans la partie sur le nom des feuilles mais toujours aussi lent:

    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
    Private Sub Workbook_BeforePrint(Cancel As Boolean)
     
    'Remet les en-tête et pied de page par défaut avant impression
     
    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 = "&16" & "Tableau récapitulatif chantier n°" & Cells(1, 3).Value & Chr(10) & chantier & " à fin semaine " & ns '& Chr(10) & "&F"
            .RightHeader = "&14" & "Date de dernière  modification : &D" & Chr(10) & "&F"
            .LeftFooter = ""
            '.CenterFooter = ""
            .RightFooter = ""
        End With
        Else
        nom = Sheet.Cells(3, 1).Value
        With Sheet.PageSetup
            .LeftHeader = "                  &G"
            .CenterHeader = "&14" & "BILAN TACHE: " & nom
            .RightHeader = "Date de dernière  modification : &D"
            .LeftFooter = "&F"
            '.CenterFooter = ""
            .RightFooter = "Fiche de suivi version finale "
        End With
        End If
     
    end sub

  8. #8
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Pourquoi refaire les entêtes de toutes les pages pour une impression "manielle", il me semble que réajuster la page que l'ont veux imprimer serait suffisant, d'autant que tu les contrôle toutes en fin de session.

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

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Par défaut
    Le but du jeu est qu'il soit impossible de sortir une feuille avec la mauvaise en tête.
    Ces feuilles contiennent des infos à partir desquelles on prend des décisions.
    L'en tête comporte la date de mise à jour...
    Je controle en effet l'en tête à la désactivation de la feuille et aussi avant l'enregistrement. Cependant il est possible d'imprimer la feuille avant de la désactiver ou même de l'enregistrer.
    Le fait de laisser les personnes changer manuellement l'en tête avant l'impression est la garantie pour moi qu'elles ne seront jamais changées ou que les personnes vont imprimer le document avec la mauvaise en tête avant de se rendre compte qu'il fallait la changer. Ils vont donc la changer et réimprimer le document. A cemoment là on aura imprimé 2 feuilles au lieu d'1 seule et on aura une feuille avec la mauvaise en tête qui trainera quelque part, ce qui peut engendrer des erreurs par la suite.

    J'avais mal compris ce que tu voulais dire. En effet je pourrai ne controler que la feuille qui va être imprimée. mais comment savoir que l'utilisateur ne va pas imprimer le classeur entier?

    Citation Envoyé par LeForestier Voir le message
    d'autant que tu les contrôle toutes en fin de session.
    En fait pour des questions de rapidité encore, je fait un test sur la date de modif et je ne controle les en têtes que si la date n'est pas la date d'aujourd'hui. Une fois encore pas de problème à la 1ère ouverture, mais lors de suivantes on peut trés bien avoir une feuille avec la mauvaise en tête.

  10. #10
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Reprenons dans un ordre chronologique..
    On est sur une feuille..
    Ont clic sur le bouton imprimer...
    Ta macros met TOUTES LES FEUILLES A JOUR.
    La feuille active est imprimée..
    ...
    ...
    Ont change de feuille..
    Ont clic sur le bouton imprimer...
    Ta macros remet TOUTES LES FEUILLES A JOUR.
    La feuille active est imprimée
    ...
    ...
    Etc..

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

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Par défaut
    Oui c'est ça, mais ce n'est pas forcement la feuille active qui est imprimée, mais ça peut être tout le claseur, une autre feuille que la feuille active.
    La macro se lance avant l'affichage de la boite de dialogue impression.

    Je suis en train de me rendre compte que avec mon test placé en sheet deactivate, si la feuille n'est pas active, elle est nécessairement à jour.
    Donc je vais controller uniquement la feuille active ce qui devrait être un peu plus rapide.

    Merci pour tes réponses ça m'a aidé à voir un peu mieux le problème. Des fois quand on a le nez dedans.
    Et puis maintenant je suis sur qu'il n'y a pas d'autre moyen(plus rapide) que celui que j'ai utilisé pour vérifier les en têtes.
    J'ai appris à programmer tout seul il y a un mois environ. J'ai donc lu des trucs mais je pense qu'il y a encore des fonction et technique que je ne connais pas, c'est pourquoi je posais cette question.
    J'ai tendance à réutiliser des truc que je connais alors que certaines autres techniques sont plus simples.

    Je met ce sujet en résolu et je vais travailler sur une autre approche pour mon en tête.

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

Discussions similaires

  1. [XSL-FO] Problème de pages blanches entre deux page-sequence
    Par slopera dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 28/03/2006, 17h10
  2. Réponses: 2
    Dernier message: 08/12/2005, 06h28
  3. Probléme de page de demarrage
    Par Wawar dans le forum Langage
    Réponses: 2
    Dernier message: 06/06/2005, 15h46
  4. [apache][htaccess]Problème de pages sécurisées
    Par Mel68 dans le forum Apache
    Réponses: 5
    Dernier message: 09/06/2004, 12h53

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