Les bricolages de Heffgé |
Certains des destinataires à qui l'on envoi régulièrement du courrier peuvent avoir une adresse compliquée et rédiger la suscription sur l'enveloppe finit par être fastidieux. Imprimer l'enveloppe à partir d'un document Word peut alors se révéler pratique. Au besoin on en crée un par destinataire.
La mini application proposée ici permet de n'avoir qu'un seul document Word, en fait un modèle, et de rédiger automatiquement la suscription à partir d'un carnet d'adresses.
Il est écrit en VBA et se compose de deux fichiers, un exemple de modèle Word et une feuille de calcul Excel embarquant le code et jouant le rôle de carnet d'adresse.
Chacun peut créer son propre modèle correspondant au format de ses enveloppes et utiliser la police de caractères de son choix. Ce modèle peut aussi être celui d'une lettre à insérer dans une enveloppe à fenêtre. Le seul impératif est qu'il comporte 5 champs, chacun correspondant à une ligne de la suscription. Ce nombre est en principe suffisant pour couvrir tous les cas de figure. Il devra être enregistré sous le nom env.dot dans le répertoire par défaut où sont stockés les modèles Word. Le choix d'un autre emplacement nécessite que le code soit adapté en conséquence.
La copie d'écran ci-dessous correspond au fichier proposé en téléchargement. On y a fait apparaître les codes de champ qui habituellement sont masqués. L'enveloppe est au format commercial standard et la police est du Comic sans empâtement en 12 points.
Exemple de remplissage :
Cet exemple est le prototype à télécharger . La première ligne contient les en-têtes de colonnes et la première colonne la liste des destinataires. Les 5 colonnes suivantes contiennent le détail de la suscription pour chacun des destinataires. Cette disposition ne peut pas être modifiée sans avoir à intervenir sur le code embarqué. L'exploration du contenu de cette feuille de calcul s'arrêtant à la première ligne vide celles-ci doivent donc être contigües.
La ligne "Autre" avec tous ses champs vides génère un document vierge afin de pouvoir saisir manuellement la suscription.
Un double clic sur le nom du fichier contenant le classeur Excel lance cette mini application qui affiche alors une fenêtre permettant de choisir un destinataire.
Le bouton Mise à jour permet de sortir de l'application et d'afficher la feuille de calcul pour la modifier. Le bouton Annuler ferme l'application. Le bouton Continuer lance Word et y crée le document basé sur le modèle env.dot où figure la suscription correspondant au destinataire choisi. Il ne reste plus qu'à l'imprimer si on le souhaite.
Voici le résultat pour le destinataire "Impôts" :
Le modèle Word montré ici ainsi que le prototype de feuille de calcul Excel ont été réunis dans une archive au format zip.
Il se décompose en deux parties, celle liée à la feuille de calcul et celle gérant la fenêtre de choix du destinataire.
Public dest As String, ret As Integer
Dim i As Integer, ligne(4) As String, MonWord As Object
Private Sub Workbook_Open()
'cacher classeur
Application.Visible = False
'afficher boîte de dialogue
Choix_dest.Show
'fermer Excel si annulation
If ret = 4 Then
Application.Quit
End If
'montrer classeur si MàJ
If ret = 2 Then
Application.Visible = True
End If
'ouvrir Word si continuer
If ret = 1 Then
For i = 0 To 4
ligne(i) = ActiveSheet.Cells(dest + 1, i + 2).Value
Next
Set MonWord = CreateObject("Word.Application")
MonWord.Visible = True
MonWord.Documents.Add template:="env.dot"
Set champs = MonWord.activedocument.Fields
For Each champ In champs
i = champ.Index - 1
champ.Result.Text = ligne(i)
Next
Application.Quit
End If
End Sub
Dim i As Integer, cont As Boolean
Sub UserForm_Initialize()
'remplissage liste déroulante choix
i = 2
cont = True
Do While cont = True
If IsEmpty(ActiveSheet.Cells(i, 1)) = False Then
Choix_dest.choix.AddItem ActiveSheet.Cells(i, 1).Value
i = i + 1
Else
cont = False
End If
Loop
'présélection 1ere ligne
choix.Selected(0) = True
End Sub
Sub Bout_cont_Click()
'ouvrir doc word
ThisWorkbook.ret = 1
ThisWorkbook.dest = choix.ListIndex + 1
Unload Choix_dest
End Sub
Sub Bout_maj_Click()
'montrer feuille
ThisWorkbook.ret = 2
Unload Choix_dest
End Sub
Sub Bout_annul_Click()
'annuler
ThisWorkbook.ret = 4
Unload Choix_dest
End Sub
Chacun est libre d'en faire ce que bon lui semble.