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 :
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 :
J'ai donc ensuite remplacé mon code pour faire appel à cette fonction de la manière suivant :
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
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