Présentation
Macros permettant de numéroter chaque impression ou copie d'un document.
Macros à placer dans Normal.dotm par exemple afin qu'elles soient tout le temps accessible.
Préalable
Placer un champ VariableDoc ayant pour nom "wd_NbCopie" servant de compteur à l'endroit où la numérotation doit apparaitre.
Résultats
Les fichiers sont générés dans le même dossier que le document de départ (nécessitant donc d'être enregistré avant l'exécution).
Les codes
Version 1 : Le compteur est réinitialisé à chaque exécution
Sub doc_numerot1()
' Objectif : Par session d'impression, incrémente le champ VariableDoc "wd_NbCopie",
' permettant de numéroter chaque exemplaire sous la forme n/total et génère
' autant de PDF (sauvegardés dans le dossier de l'original) ou d'impression.
' Utilisation : Placer un champ VariableDoc (DOCVARIABLE) ayant comme nom "wd_NbCopie"
' dans le document pour afficher la numérotation.
' Retour : Copies du document
' Auteur : Arnaud (www.1forme.fr).
' Licence : CC-BY-NC-SA (Vous pouvez diffuser/partager/modifier cette macro dans les même conditions,
' seulement à titre personnel et citant l'auteur/site d'origine.
Dim lgNbCopie As Long
Dim lgCpt As Long
On Error GoTo erreur
If ActiveDocument.Path = "" Then
MsgBox "Vous devez enregistrer votre document avant d'exécuter cette macro !", vbCritical, "Exécution impossible"
Exit Sub
End If
lgNbCopie = InputBox("Combien de copies voulez-vous générer ?")
For lgCpt = 1 To lgNbCopie
ActiveDocument.Variables("wd_NbCopie").Value = lgCpt & "/" & lgNbCopie
ActiveDocument.Fields.Update
' Export PDF (décommenter pour générer un PDF)
ActiveDocument.SaveAs2 ActiveDocument.FullName & "_" & lgCpt & ".Pdf", wdFormatPDF
' Impression (décommenter pour lancer une impression)
'ActiveDocument.PrintOut
Next
Exit Sub
erreur:
MsgBox Err.Number & " : " & Err.Description
End Sub
Version 2 : Le compteur part du dernier numéro préalablement utilisé
Sub doc_numerot2()
' Objectif : Incrémente le champ VariableDoc "wd_NbCopie" permettant de numéroter chaque
' exemplaire (pas de réinitialisation du n° entre chaque session) et génère
' autant de PDF (sauvegardés dans le dossier de l'original) ou d'impression.
' Utilisation : Placer un champ VariableDoc (DOCVARIABLE) ayant comme nom "wd_NbCopie"
' dans le document pour afficher la numérotation.
' Retour : Copies du document
' Auteur : Arnaud (www.1forme.fr).
' Licence : CC-BY-NC-SA (Vous pouvez diffuser/partager/modifier cette macro dans les même conditions,
' seulement à titre personnel et citant l'auteur/site d'origine.
Dim lgNbCopie As Long
Dim lgCpt As Long
On Error GoTo erreur
If ActiveDocument.Path = "" Then
MsgBox "Vous devez enregistrer votre document avant d'exécuter cette macro !", vbCritical, "Exécution impossible"
Exit Sub
End If
lgNbCopie = InputBox("Combien de copies voulez-vous générer ?")
For lgCpt = 1 To lgNbCopie
ActiveDocument.Variables("wd_NbCopie").Value = ActiveDocument.Variables("wd_NbCopie").Value + 1
ActiveDocument.Fields.Update
' Export PDF (décommenter pour générer un PDF)
ActiveDocument.SaveAs2 ActiveDocument.FullName & "_" & ActiveDocument.Variables("wd_NbCopie").Value & ".Pdf", wdFormatPDF
' Impression (décommenter pour lancer une impression)
'ActiveDocument.PrintOut
Next
ActiveDocument.Save
Exit Sub
erreur:
If Err.Number = 5825 Or Err.Number = 13 Then
' 5825 > 1ere utilisation
' 13 > Contient du texte (utilisation de la macro doc_numerot1)
ActiveDocument.Variables("wd_NbCopie").Value = 0
Resume
Else
MsgBox Err.Number & " : " & Err.Description
End If
End Sub
Utilitaire : Pour modifier la valeur du compteur
Sub doc_numerot3()
' Objectif : Réinitialisation du champ VariableDoc wd_NbCopie
' Utilisation : Modifier intNumDernierExemplaire pour indiquer le dernier numéro considéré comme utilisé
' Exemple : = 0 pour repartir à 1
' Retour : Néant
' Auteur : Arnaud (www.1forme.fr).
' Licence : CC-BY-NC-SA (Vous pouvez diffuser/partager/modifier cette macro dans les même conditions,
' seulement à titre personnel et citant l'auteur/site d'origine.
Const intNumDernierExemplaire As Integer = 0
ActiveDocument.Variables("wd_NbCopie").Value = intNumDernierExemplaire
End Sub
Merci pour votre attention bienveillante.