VBA - automatisation courriers - problème signets
Bonjour,
Je suis nouveau sur le forum et je sollicite votre aide. Je débute en VBA et je cherche à automatiser une partie de la production de courriers administratifs de l'association pour laquelle je travaille. L'objectif est de faire le lien entre un fichier Excel, dans lequel j'ai les données dont j'ai besoin, et différents modèles Word où elles seront insérées.
Tout fonctionne correctement, jusqu'au moment d'insérer des données dans un fichier Word à l'emplacement de mes signets. J'ai essayé différents codes récupérés sur le net, mais aucun ne fonctionne (voir point 3 ci-dessous).
Je sèche... Est-ce que quelqu'un aurait une idée pour m'aider?
Merci d'avance de votre aide!
Sub Bouton_courrier_AI()
'Get Selected Client Id
selected_id = Worksheets("Macros").Range("D4").Value
Debug.Print selected_id
'Produce Document
Call Créer_Courrier_AI(selected_id)
End Sub
Sub Créer_Courrier_AI(id)
'PRELIMINAIRES
'Déclarer le timer
Dim dStart As Currency
dStart = Timer
'Désactive l'affichage : évite les scintillements d'écran
Application.ScreenUpdating = False
'1) Récupérer les données de la personne concernée
Dim ClientData As Range
Set ClientData = GetClientInfo(id)
client_prenom = ClientData.Cells(5).Value
Debug.Print client_prenom
client_nom = ClientData.Cells(4).Value
Debug.Print client_nom
client_AVS = ClientData.Cells(7).Value
Debug.Print client_AVS
'2) Créer le doc dans lequel on va insérer les données, à partir d'un modèle
'Ouvrir le modèle et créer un document
Set appWrd = CreateObject("Word.Application")
appWrd.Visible = True
Set DocWord = appWrd.Documents.Add(Template:="K:\10-SG\12-Projets\Macros\Modèles Word\RH\AI.dotx", NewTemplate:=False, DocumentType:=0)
'enregistrer mon document dans le dossier "output" en le renommant
DocWord.SaveAs Filename:="K:\10-SG\12-Projets\Macros\Output\" & Format(Date, "yy") & Format(Date, "mm") & Format(Date, "dd") & "_" & ClientData.Cells(4).Value & " " & ClientData.Cells(5).Value & "_Courrier_AI" & ".docx"
MonCourrier = DocWord
'3) Insérer les données aux emplacements des signets
'wordDoc.Bookmarks("AVS").Range.Text = ClientData.Cells(7).Value
'wordDoc.Bookmarks("Signet1").Range.Text = Sheets("Data Owners").Cells(i, 1)
wordApp.ActiveDocument.Goto What:=wdGoToBookmark, Name:="AVS"
wordDoc.Bookmarks("AVS").Range.Text = ClientData.Cells(7).Value
'wrdApp.Windows(MonCourrier).Activate
' wordDoc.Bookmarks("AVS").Range.Text = ClientData.Cells(7).Value
'ACTIVITES DE FIN DE MACRO
'Quitter Word
DocWord.Save
DocWord.Close
appWrd.Quit
'Réactiver l'affichage d'Excel
Application.ScreenUpdating = True
'Affiche la feuille "Macros"
Sheets("Macros").Activate
'MsbBox qui affiche le temps d'exécution de la macro
MsgBox "Félicitation, votre courrier a été écrit en : " & Timer - dStart & " secondes. Il est disponible dans le dossier Output."
End Sub
Function GetClientInfo(my_id) As Range
' Range initialization
Worksheets("Données").Select
Set ClientRange = Worksheets("Données").Range("A2:BC600")
'Loop
Dim myRange As Range
Set myRange = Worksheets("Données").Range("A1:BC1")
For Each Row In ClientRange.Rows
If (my_id = Row.Cells(4).Value) Then
Set myRange = Row
End If
Next Row
Set GetClientInfo = myRange
End FunctionJ'ai trouvé: ça fonctionne avec le code suivant: DocWord.Bookmarks("Rue").Range.Text = client_rue
Bonjour Mik et
Une petite présentation ICI serait la bienvenue
Si vous ne l'avez pas encore fait, je vous invite à lire la charte du forum [A LIRE AVANT DE POSTER]
qui vous aidera dans vos demandes et réponses sur ce forum.
Ainsi que sur les fonctionnalités (Nouveau Forum au bas de page notamment)
La prochaine fois, pensez à mettre le code donné entre balises grâce au bouton </>
Merci de votre participation
Cordialement