Automatiser le remplissage de dossier de lot depuis Excel
Bonjour,
Dans le cadre de mon travail, je souhaite automatiser le remplissage entre Word et Excel et d'après mes recherches et de nombreux essais infructueux avec les signets dans Word, j'opte pour cette nouvelle façon de faire que j'ai trouvé sur le forum.
Il faut donc utiliser des contrôles de contenu de texte : Word --> menu développeur --> Contrôles --> Bouton "Aa".
Les propriétés de ce contrôle comportent un titre et une balise. J'ai alors affecté les noms de la colonne B et ceci marche bien avec l'exemple fourni sur le forum.
Mais moi j'ai besoin d'automatiser le remplissage en fonction des lignes et non des colonnes. J'aimerais aussi que le remplissage du fichier word se fasse à partir des données contenues dans les cellules de la ligne active. J'ai vu que je pouvais utiliser la fonction ActiveCell.Row mais je ne nais pas comment l'inclure.
Je débute vraiment en programmation.
Quelqu'un peut-il m'aider à modifier le code SVP ?
Sub remplissage_doc()
Dim WordApp As Object, WordDoc As Object, ctrl As Object
Dim nom_fichier As String
Set WordApp = CreateObject("word.application")
WordApp.Visible = True
nom_fichier = CreateObject("Wscript.Shell").SpecialFolders("MyDocuments") & "\essai01.docx"
Set WordDoc = WordApp.Documents.Open(nom_fichier)
For Each ctrl In WordDoc.ContentControls
If ctrl.Type = 0 Then
Set Cell = ActiveSheet.Columns("B").Find(ctrl.Tag)
If Not Cell Is Nothing Then ctrl.Range.Text = Cell.Offset(, 1)
End If
Next ctrl
MsgBox "fin du traitement"
WordDoc.Close savechanges:=True
WordApp.Quit
End SubVoici le fichier Word utilisé.
Merci d'avance.
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonjour,
Vous pouvez essayer
Set cell = ActiveCell.EntireRow.Find(ctrl.Tag)J'ai essayé et ça me rempli uniquement l'information devant la date par exemple et pas les autres.
La configuration de mon tableau est juste transposée par rapport au tableau dans l'exemple que vous avez déjà traité.
Les informations clés à renseigner par client sur la toute première ligne du tableur et la liste des clients en ordonnées.
J'ai introduis la ligne supplémentaire mais je reçois un message d'erreur.
Sub remplissage_doc()
Dim WordApp As Object, WordDoc As Object, ctrl As Object
Dim nom_fichier As String
Set WordApp = CreateObject("word.application")
WordApp.Visible = True
nom_fichier = CreateObject("Wscript.Shell").SpecialFolders("MyDocuments") & "\essai01.docx"
Set WordDoc = WordApp.Documents.Open(nom_fichier)
For Each ctrl In WordDoc.ContentControls
If ctrl.Type = 0 Then
Set cell = ActiveCell.EntireRow.Find(ctrl.Tag)
Set cell = ActiveSheet.Row("1").Find(ctrl.Tag)
If Not cell Is Nothing Then
ctrl.Range.Text = cell.Offset(, 1)
ctrl.Range.Font.ColorIndex = 2 'couleur bleue
End If
End If
Next ctrl
End Sub
Je vous joint un fichier afin que vous comprenez exactement la structure.
Merci pour votre réactivité.
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonjour,
Essayer ce code
Sub remplissage_doc()
Dim WordApp As Object, WordDoc As Object, ctrl As Object
Dim nom_fichier As String
Set WordApp = CreateObject("word.application")
WordApp.Visible = True
nom_fichier = CreateObject("Wscript.Shell").SpecialFolders("MyDocuments") & "\essai01.docx"
Set WordDoc = WordApp.Documents.Open(nom_fichier)
For Each ctrl In WordDoc.ContentControls
If ctrl.Type = 0 Then
Set cell = ActiveSheet.Rows(1).Find(ctrl.Tag)
If Not cell Is Nothing Then
ctrl.Range.Text = cell.Offset(ActiveCell.Row - 1)
ctrl.Range.Font.ColorIndex = 2 'couleur bleue
End If
End If
Next ctrl
End SubMerci encore pour votre réponse.
Je ne pourrai réellement essayer ce nouveau code que le lundi prochain sur un système Windows au bureau.
Je vous ferai un retour très vite.
Bonjour et merci pour votre patience.
Je viens d'essayer le code et il marche parfaitement en remplissant tous les champs dans le corps du texte
Je vous remercie.
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonjour,
ci-dessous code
Sub remplissage_doc()
Dim WordApp As Object, WordDoc As Object, ctrl As Object
Dim nom_fichier As String
Set WordApp = CreateObject("word.application")
WordApp.Visible = True
nom_fichier = CreateObject("Wscript.Shell").SpecialFolders("MyDocuments") & "\essai01.docx"
Set WordDoc = WordApp.Documents.Open(nom_fichier)
'entête document
For Each ctrl In WordDoc.Sections(1).Headers(1).Range.ContentControls
GoSub remplissage_ctrl_text
Next ctrl
'corps document
For Each ctrl In WordDoc.ContentControls
GoSub remplissage_ctrl_text
Next ctrl
'sortie procédure
Exit Sub
remplissage_ctrl_text:
If ctrl.Type = 0 Then
Set cell = ActiveSheet.Rows(1).Find(ctrl.Tag)
If Not cell Is Nothing Then
ctrl.Range.Text = cell.Offset(ActiveCell.Row - 1)
ctrl.Range.Font.ColorIndex = 2 'couleur bleue
End If
End If
Return
End SubJe ne vous remercierai jamais assez.
Merci pour votre réactivité.
Bonjour,
Cette discussion a été marquée comme résolue mais j'aimerais formuler une nouvelle demande qui rejoint la première.
Le code ci-dessus fonctionne très bien et me permet de créer automatiquement mes documents Word à partir d'Excel.
Par contre, j'aimerais savoir si le chemin inverse (Word --> Excel) est possible en modifiant légèrement le code. En effet, j'aimerais pouvoir importer directement sur une nouvelle ligne toutes les informations contenues dans les control content sur Word. J'ai cherché mais je ne trouve pas de solution concrète. Aurez-vous une idée SVP?
Merci