VBA - contrôle du contenu de texte enrichi en zone de texte

Bonjour,

Je souhaite remplir un document Word à partir de données contenues dans un fichier Excel. Pour cela j'ai placé des contrôles du contenu de texte enrichi dans mon document Word. Tout fonctionne très bien excepté quand le contrôle se situe dans une zone de texte. Dans ce cas, il n'est pas détecté.

J'utilise le code suivant :

Dim wrdDoc As Word.Document
Dim ctrl As Object

            'la partie ci-dessous entre For each ctrl et Next ctrl passe en revue tous les contrôles de contenu de texte enrichi du document word
            'ouvert et les complète
            For Each ctrl In wrdDoc.ContentControls
                If ctrl.Type = 0 Then
                    Set Cell = ActiveSheet.Rows(1).Find(ctrl.Title)
                    'la première ligne de l'onglet source de données continent les titres et balises. Ces deux informations doivent être identiques                     'dans les propriétés du contrôle sur Word.
                    If Not Cell Is Nothing Then ctrl.Range.Text = Cell.Offset(j)
                    'le contrôle est rempli par les données contenues dans la ligne en cours avec la colonne correspondant au contrôle
                End If
            Next ctrl

Quelqu'un a une idée ?

Salut,

On peut voir deux fichiers modèles (Word et Excel) ?

Cordialement.

Bonjour,

Ci-dessous les fichiers tests à placer dans un même dossier.

Depuis mon message j'ai trouvé une réponse sur un forum anglais. Les zones de textes seraient à traiter d'une autre manière en ajoutant d'autres lignes de code :

'------------------------------------Remplissage des contrôles de contenu de texte enrichi---------------------------

            'la partie ci-dessous entre For each ctrl et Next ctrl passe en revue tous les contrôles de contenu de texte enrichi du document word
            'ouvert et les complète
            For Each ctrl In wrdDoc.ContentControls
                If ctrl.Type = 0 Or ctrl.Type = 1 Then
                    Set Cell = ActiveSheet.Rows(1).Find(ctrl.Title)
                    'la première ligne de l'onglet source de données continent les titres et balises. Ces deux informations doivent être identiques                     'dans les propriétés du contrôle sur Word.
                    If Not Cell Is Nothing Then ctrl.Range.Text = Cell.Offset(j)
                    'If Not Cell Is Nothing Then ctrl.TextFrame.TextRange.Text = Cell.Offset(j)
                    'le contrôle est rempli par les données contenues dans la ligne en cours avec la colonne correspondant au contrôle
                End If
            Next ctrl

On Error Resume Next

'pour traiter les contrôles dans les zones de texte
            For Each shp In wrdDoc.Shapes
                For Each ctrl In shp.TextFrame.TextRange.ContentControls
                    If ctrl.Type = 0 Or ctrl.Type = 1 Then
                        Set Cell = ActiveSheet.Rows(1).Find(ctrl.Title)
                        'la première ligne de l'onglet source de données continent les titres et balises. Ces deux informations doivent être                         'identiques dans les propriétés du contrôle sur Word.
                        If Not Cell Is Nothing Then ctrl.Range.Text = Cell.Offset(j)
                        'le contrôle est rempli par les données contenues dans la ligne en cours avec la colonne correspondant au contrôle
                    End If
                Next ctrl
            Next shp

Ca me pose plusieurs problèmes :

- Sans "On error resume next" j'ai un message d'erreur "Erreur d'execution 5917 : Cet objet ne prend pas en charge le texte joint". En effet, il essaie de traiter des images reconnue comme shape qui ne contiennent pas de texte et donc pas contrôle de contenu. Y-a-t-il une autre façon de faire ?

- En appliquant ce code sur ma version Office 2019 tous les contrôles de contenu se remplissent. Lorsque que je l'utilise au boulot, sur une version Office 365, la macro tourne parfaitement jusqu'au bout. Mais quand j'ouvre le fichier final, les contrôles dans les zones de texte ne sont pas remplis...

Merci d'avance pour vos retours :D

24hbv1.docx (39.58 Ko)

Désolé, mais avec ces nouvelles données, ça dépasse mes compétences. J'espère que quelqu'un viendra t'aider !

Amicalement.

Bonjour,

J'ai relancé ma macro sous Office 365 ce matin et ça fonctionne. Grand mystère...

Toujours le soucis avec "Erreur d'execution 5917 : Cet objet ne prend pas en charge le texte joint" sans explication mais avec "On error resume next" ça passe.

Du coup sujet résolu avec mon code plus haut

Si vous avez des éléments de réponse, je suis preneur.

Merci à tous !

Bonjour,

Ce test supplémentaire devrait résoudre votre problème

    
    'pour traiter les contrôles dans les zones de texte
            For Each shp In wrdDoc.Shapes

                If shp.Type = msoAutoShape Or shp.Type = msoTextBox Then
                    For Each ctrl In shp.TextFrame.TextRange.ContentControls
                        If ctrl.Type = 0 Or ctrl.Type = 1 Then
                            Set Cell = ActiveSheet.Rows(1).Find(ctrl.Title)
                            'la première ligne de l'onglet source de données continent les titres et balises. Ces deux informations doivent être                         'identiques dans les propriétés du contrôle sur Word.
                            If Not Cell Is Nothing Then ctrl.Range.Text = Cell.Offset(j)
                            'le contrôle est rempli par les données contenues dans la ligne en cours avec la colonne correspondant au contrôle
                        End If
                    Next ctrl
                End If

            Next shp

Merci beaucoup thev !

Ca fonctionne à la perfection

Rechercher des sujets similaires à "vba controle contenu texte enrichi zone"