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 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
| ImpressionRectoVerso()
'Macro créée par Souriane avec l'aide de Heureux-Oli, Septembre 2009
'sur Developpez.net
'Macro qui imprime la page encours plus son recto ou son verso selon si elle est paire ou impaire
Dim intPageDebut As Integer
Dim intPageActuel As Integer
'Détermine quelle imprimante est actuellement par défaut afin de la remettre telle quelle à la fin de la macro. J'ai créé un profil d'imprimante "normal" et un profil d'imprimante "Recto-verso" pour la même imprimante
Dim strCurrentPrinter As String
strCurrentPrinter = Application.ActivePrinter
'Numéro de la page actuelle
'Si la fonction ""Numérotation des pages... à partir de..."" a été utilisé
'la variable utilisera le numéro attribué à cette page
intPageActuel = Selection.Information(wdActiveEndAdjustedPageNumber)
'Numéro de la première page du document
'Si ""Numérotation des pages... à partir de...""
'n'a PAS été utilisé, alors variable = 1, autrement variable = numéro attribué à la première page
With ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).PageNumbers
intPageDebut = .StartingNumber
End With
If intPageDebut = 0 Then
intPageDebut = 1
End If
'Si il y a avis d'erreur tel "marge trop proche", va ignorer l'erreur et continuer la macro
On Error Resume Next ' ignore printing errors
'Sélectionne mon profil d'imprimante qui est en recto-verso
ActivePrinter = "\\svmprtmain\I26048RV"
'Vérifie si la première page du document est paire ou impaire
If (intPageDebut Mod 2) = 0 Then
'0 = paire
'SI LA 1ERE PAGE DU DOCUMENT EST **PAIRE**, CECI:
'Vérifie si la page active est paire ou impaire
If (intPageActuel Mod 2) = 0 Then
'Lancement d'impression
'Si la page EN COURS du document est **paire**:
ActiveDocument.PrintOut Background:=True, Range:=wdPrintFromTo, From:=CStr(intPageActuel), To:=CStr(intPageActuel + 1)
Else
'Si la page EN COURS du document est **impaire** :
ActiveDocument.PrintOut Background:=True, Range:=wdPrintFromTo, From:=CStr(intPageActuel - 1), To:=CStr(intPageActuel)
'Page précédente + Page actuelle IMPAIRE
End If
Else
'SI LA 1ERE PAGE DU DOCUMENT EST **IMPAIRE**, CECI:
'Vérifie si la page active est paire ou impaire
If (intPageActuel Mod 2) = 0 Then
'Lancement d'impression
'Si la page EN COURS du document est **paire**:
'Page précédente + Page actuelle PAIRE
ActiveDocument.PrintOut Background:=True, Range:=wdPrintFromTo, From:=CStr(intPageActuel - 1), To:=CStr(intPageActuel)
Else
'Si la page EN COURS du document est **impaire** :
'Page actuelle IMPAIRE + Page suivante
ActiveDocument.PrintOut Background:=True, Range:=wdPrintFromTo, From:=CStr(intPageActuel), To:=CStr(intPageActuel + 1)
End If
End If
' 'Retour à l'imprimante de départ i.e. le profil qui n'est pas "recto-verso"
Application.ActivePrinter = strCurrentPrinter
On Error GoTo 0 ' resume normal error handling
End Sub |
Partager