Fonction Page.Setup très lente!

klm1234

XLDnaute Nouveau
Bonjour le forum,

Donc mon problème n'est pas très complexe, j'ai même (presque) réussi à trouver la solution tout seul!

Apparemment depuis Excel 2000, l'algorithme de communication entre l'API d'impression Excel et les macro VBA à changé, ce qui fait que cette communication est constamment arrêté/redémarré pour chaque attribut de la fonction Page.Setup

Je cherche à obtenir le comportement suivant :
Code:
'    With oExcel.ActiveSheet.PageSetup                                                               '////
'        .LeftMargin = Application.InchesToPoints(0.5)                                               '////
'        .RightMargin = Application.InchesToPoints(0.5)                                              '////
'        .TopMargin = Application.InchesToPoints(0.5)                                                '////
'        .BottomMargin = Application.InchesToPoints(0.5)                                             '////
'        .HeaderMargin = Application.InchesToPoints(0.5)                                             '////
'        .FooterMargin = Application.InchesToPoints(0.5)                                             '////
'        .PrintComments = xlPrintNoComments                                                          '////
'        .CenterHorizontally = True                                                                  '////
'        .CenterVertically = True                                                                    '////
'        .Orientation = xlLandscape                                                                  '////
'        .PaperSize = xlPaperLetter                                                                  '////
'        .FirstPageNumber = xlAutomatic                                                              '////
'        .Order = xlDownThenOver                                                                     '////
'        .BlackAndWhite = False                                                                      '////
'        .Zoom = 92                                                                                  '////
'        .PrintErrors = xlPrintErrorsDisplayed                                                       '////
'    End With                                                                                        '////

J'ai déjà réduit au minimum les attributs à modifier, mais cela ne suffit pas. Ce simple petit bout de code met prêt de 10 secondes à s'exécuter à lui seul!

J'ai donc fait des recherche et suis tombé sur ce que je vous ai expliqué au début. La personne a joint une routine permettant d'utiliser les macro de Excel 4. Bien pratique.

Seulement le Hic c'est que je n'arrive pas à l'intégrer dans ma macro. Le bout de code joint ci-haut se situe dans un "Private Sub" nommé "PrintPSS", dans un module. J'ai intégrer la routine du mec dans le même module sous le nom de "PageSetupXL4M" dont voici le code :

Code:
Private Sub PageSetupXL4M(Optional LeftHead As String, Optional CenterHead As String, _
        Optional RightHead As String, Optional LeftFoot As String, Optional CenterFoot As String, _
        Optional RightFoot As String, Optional LeftMarginInches As String, _
        Optional RightMarginInches As String, Optional TopMarginInches As String, _
        Optional BottomMarginInches As String, Optional HeaderMarginInches As String, _
        Optional FooterMarginInches As String, Optional PrintHeadings As String, _
        Optional PrintGridlines As String, Optional PrintComments As String, _
        Optional PrintQuality As String, Optional CenterHorizontally As String, _
        Optional CenterVertically As String, Optional Orientation As String, _
        Optional Draft As String, Optional PaperSize As String, _
        Optional FirstPageNumber As String, Optional Order As String, _
        Optional BlackAndWhite As String, Optional Zoom As String)
        
    Const c As String = ","
    Dim pgSetup As String
    Dim head As String
    Dim foot As String
    If LeftHead <> "" Then head = "&L" & LeftHead
    If CenterHead <> "" Then head = head & "&C" & CenterHead
    If RightHead <> "" Then head = head & "&R" & RightHead
    If Not head = "" Then head = """" & head & """"
    If LeftFoot <> "" Then foot = "&L" & LeftFoot
    If CenterFoot <> "" Then foot = foot & "&C" & CenterFoot
    If RightFoot <> "" Then foot = foot & "&R" & RightFoot
    If Not foot = "" Then foot = """" & foot & """"
        
    pgSetup = "PAGE.SETUP(" & head & c & foot & c & _
       LeftMarginInches & c & RightMarginInches & c & _
       TopMarginInches & c & BottomMarginInches & c & _
       PrintHeadings & c & PrintGridlines & c & _
       CenterHorizontally & c & CenterVertically & c & _
       Orientation & c & PaperSize & c & Zoom & c & _
       FirstPageNumber & c & Order & c & BlackAndWhite & c & _
       PrintQuality & c & HeaderMarginInches & c & _
       FooterMarginInches & c & PrintComments & c & Draft & ")"
       
    Application.ExecuteExcel4Macro pgSetup
    
End Sub


J'ai donc ensuite remplacé mon code pour faire appel à cette fonction de la manière suivant :

Code:
Call PageSetupXL4M("", "", "", "", "", "", "0,5", "0,5", "0,5", "0,5", "0,5", "0,5", , , , , , , , , , , , , "92")

Je me suis pour l'instant contenté des marges puisque c'est le plus important. Cependant voilà, sa ne fait rien! Les variables ne sont pas transmises à la routine PageSetupXL4M! J'ai essayé plusieurs technique, en utilisant des points au lieu des virgules, en enlevant le "Call" et en utilisant les pointeur ":=", rien. Lorsque j'execute en mode pas-à-pas (F7), la routine se fait appelée... et chaque variable ne contient rien, nada, "".


Quelqu'un aurait-il une lampe torche en rad' histoire de m'éclairer un peu? Car là... je suis un peu dépassé! :)
C'est surement une histoire de public/private, mais je ne suis pas trop à l'aise de ce coté là!


Merci énormément!
Cordialement,
Klm1234
 

mromain

XLDnaute Barbatruc
Re : Fonction Page.Setup très lente!

Bonjour klm1234,

Je n'ai pas testé, mais essaye ceci :
Code:
PageSetupXL4M , , , , , , "0,5", "0,5", "0,5", "0,5", "0,5", "0,5", , , , , , , , , , , , , "92"
(autre manière d'appeler un Sub.)

a+
 

kjin

XLDnaute Barbatruc
Re : Fonction Page.Setup très lente!

Bonjour, salut Romain :),
Remplace les virgules par des points
Code:
Call PageSetupXL4M("", "", "", "", "", "", "0[SIZE="6"][B][COLOR="Red"].[/COLOR][/B][/SIZE]5", ....
Non testé
A+
kjin
 

klm1234

XLDnaute Nouveau
Re : Fonction Page.Setup très lente!

Bonjour mromain, kjin,

J'ai essayé vos solutions et malheureusement elle se sont avérés inefficace. La fonction est appelée mais aucune variable n'est transmise... C'est d'un mystère ce truc je ne comprend vraiment pas!

Peut-être devrais-je transformer la routine en une fonction qui retournerait True/False? Vous en pensez quoi?

Merci de votre aide,
Cordialement,
Klm1234
 

klm1234

XLDnaute Nouveau
Re : Fonction Page.Setup très lente!

Bonjour kiki29,

J'avais déjà pris connaissance de la page de McGimpsey, c'est d'ailleurs là que j'ai compris qu'il fallait que j'utilise les macro d'excel 4.

Cependant même en suivant rigoureusement les instructions, en copiant tout exactement de la même manière que sur la page, je suis toujours confronté à mon problème! Voici un résumé non-exhaustif de mes essais :

-Call PageSetupXL4M(, , , , , , "0.5", "0.5", "0.5", "0.5", "0.5", "0.5", , , , , , , , , , , , , "100") avec routine PageSetupXL4M privée (Private Sub)
-Call PageSetupXL4M(, , , , , , "0,5", "0,5", "0,5", "0,5", "0,5", "0,5", , , , , , , , , , , , , "100") avec routine PageSetupXL4M privée (Private Sub)
-Call PageSetupXL4M(, , , , , , "0.5", "0.5", "0.5", "0.5", "0.5", "0.5", , , , , , , , , , , , , "100") avec routine PageSetupXL4M publique (Public Sub)
-Call PageSetupXL4M(, , , , , , "0,5", "0,5", "0,5", "0,5", "0,5", "0,5", , , , , , , , , , , , , "100") avec routine PageSetupXL4M publique (Public Sub)

-PageSetupXL4M RightMarginInches:="0,5"
-PageSetupXL4M RightMarginInches:="0.5"
-PageSetupXL4M "" , "" , "0,5"
-PageSetupXL4M "" , "" , "0.5"

-Application.Run.PageSetupXL4M RightMarginInches:="0.5"
-Application.Run.PageSetupXL4M RightMarginInches:="0,5"

-Application.ExecuteExcel4Macro "PAGE.SETUP("","","","","","","0,5")"
-Application.ExecuteExcel4Macro "PAGE.SETUP("","","","","","","0.5")"

...et j'en passe.

Pourquoi diable aucune variable n'est-elle transmise?? C'est comme si je lançais la macro sans mettre d'arguments...


Merci encore de votre aide,
Cordialement,
Klm1234
 

klm1234

XLDnaute Nouveau
Re : Fonction Page.Setup très lente!

Bonjour kjin,

Je viens de lire ton message. Si pour toi sa marche alors le problème ne vient pas de là. Je soupçonne autre chose.

J'utilise ce code pour modifier la mise en page d'un objet excel : on appuie sur un bouton dans le tableur principal "X", un nouveau fichier excel "Y" apparait à l'écran et c'est ce fichier qui m'intéresse. Les deux fichiers "X" et "Y" sont ouvert à la fin de l'exécution de la macro.

On lance la macro dans le fichier "X" et cette dernière modifie les propriétés du fichier "Y".

En appelant la macro excel 4 comme je l'ai fait jusqu'à présent, son action se limite-elle au fichier "X"?


Merci encore,
Cordialement,
Klm1234
 

kiki29

XLDnaute Barbatruc
Re : Fonction Page.Setup très lente!

Re, A4 avec Marges de 1 cm , centré verticalement et hoizontalement, en Mode Paysage
Code:
Application.ExecuteExcel4Macro "PAGE.SETUP(,,0.3937,0.3937,0.3937,0.3937,,,TRUE,TRUE,2,9,,,,,,,,FALSE,FALSE)"
 
Dernière édition:

klm1234

XLDnaute Nouveau
Re : Fonction Page.Setup très lente!

Rebonjour tout le monde,

Effectivement quand on s'y prend comme sa, dans le fichier joint, sa marche.

Cependant mon cas est légèrement différent, j'ai modifié le fichier pour obtenir le même comportement que dans mon programme principal. Cette fois, sa ne marche plus, enfin sa marche mais la macro "ConfigImpression" s'applique au fichier "X" et non au fichier "Y".

Merci encore,
Klm1234
 

Pièces jointes

  • klm2.xls
    36 KB · Affichages: 68

Discussions similaires

Statistiques des forums

Discussions
312 668
Messages
2 090 739
Membres
104 644
dernier inscrit
MOLOKO67