XL 2010 Rapport automatisé :Inserer le contenu d'une cellule dans un controle de contenu texte

Mistrall

XLDnaute Nouveau
Bonjour a tous ,

Premier poste :) , Je n'ai pas trouvé de sujet simillaire dans la fonction recherche.

Je cherche à automatisé la rédaction de rapport. Je possédé un document excelle avec toutes les données nécessaire et un modelé de document Word.

Pour l'instant je travail avec une macro qui me permet d'inscrire le contenu d'une cellule après un signet.
J'aimerai savoir si il était possible de créer une macro qui copierai le contenu d'une cellule dans ce que word appelle "contrôle du contenu de text Brut" .

je souhaite faire cela car j'ai des informations qui apparaisse plusieurs fois dans le document et on ne peut donner le même nom à 2 signet or on peut donner le même nom à 2 contrôle de contenu ce qui me permettrait d'avoir une macro plus propre.

Je vous remercie d'avance pour votre aide.
 

Yurperqod

XLDnaute Occasionnel
Bonjour le forum

J'ai fait ce test à partir de Word
Cela fonctionne sur mon PC, mais en ajoutant un contrôle.
La valeur de la cellule A1 de la feuille 1 du fichier Excel est bien mise dans le contrôle.
(Il faudrait trouver comment sélectionner un contrôle déjà existant)
Pour que cela marche , il faut cocher la référence à la librairie Excel
VB:
Sub Macro1()
Dim objExcel As New Excel.Application
Dim exWb As Excel.Workbook
Dim objCC As ContentControl
Set objCC = ActiveDocument.ContentControls.Add(wdContentControlText)
Set exWb = objExcel.Workbooks.Open("C:\CHEMIN\Fichier.xlsx")
'mettre le nom réel du dossier où se trouve le classeur Excel.
objCC.Range.Text = exWb.Sheets(1).Cells(1, 1)
exWb.Close
Set exWb = Nothing
End Sub
 

Mistrall

XLDnaute Nouveau
Bonjour Yurperqod

Merci pour ta réponse.

si je comprend bien ta macro c'est une macro que tu lance dans word pour aller chercher des infos sur excell. Je cherche une macro que tu lance de excell pour exporter des donné sur word.

Mais ta macro m'a donné des pistes de travail je vais essayer de la modifié pour la faire fonctionné depuis excell.

merci a toi ;)

Edit : J'ai reussi a avoir une résultat satisfaisant avec cette macro

Code:
Dim cc As ContentControl
    Dim docCCs As ContentControls
    Set docCCs = WordDoc.SelectContentControlsByTag("Ndossier")
    If docCCs.Count <> 0 Then
        For Each cc In docCCs
            cc.Range.Text = "testok"
        Next
    Else
        MsgBox "No content controls found."
    End If
 
Dernière édition:

Yurperqod

XLDnaute Occasionnel
La macro modifiée pour être lancée depuis Excel
(Il faut cocher la référence à la librairie Word)
Le problème reste le même, la macro crée à chaque fois un contrôle
Je cherche comment modifier pour mettre la valeur dans un contrôle existant.
VB:
Sub Macro3()
Dim objWord As New Word.Application
Dim wDoc As Word.Document
Dim WobjCC As Word.ContentControl
'mettre le nom réel du dossier où se trouve le document Word.
Set wDoc = objWord.documents.Open("C:\CHEMIN\Test.docx")
Set WobjCC = wDoc.ContentControls.Add(wdContentControlText)
WobjCC.Range.Text = ThisWorkbook.Sheets(1).Cells(1, 1)
wDoc.Save
wDoc.Close
End Sub
 

Yurperqod

XLDnaute Occasionnel
Avec un seul contrôle, c'est facile de l'identifier
Macro dans Word
VB:
Sub Macro4()
Dim objExcel As New Excel.Application
Dim exWb As Excel.Workbook
Set exWb = objExcel.Workbooks.Open("C:\CHEMIN\Test1.xlsx")
ActiveDocument.ContentControls(1).Range.Text = exWb.Sheets(1).Cells(1, 1)
exWb.Close
Set exWb = Nothing
End Sub
Apparement on ne pas nommer ce type de contrôle
Mais on peut mettre un titre ou une balise
 
Dernière édition:

Yurperqod

XLDnaute Occasionnel
Et la macro Excel
VB:
Sub Macro5()
Dim objWord As New Word.Application
Dim wDoc As Word.Document
'mettre le nom réel du dossier où se trouve le document Word.
Set wDoc = objWord.documents.Open("C:\CHEMIN\Test.docx")
wDoc.ContentControls(1).Range.Text = ThisWorkbook.Sheets(1).Cells(1, 1)
wDoc.Save
wDoc.Close
End Sub
 

Mistrall

XLDnaute Nouveau
J'ai test la macro elle fonctionne correctement malheureusement le fait de juste donnée le numéro de content controls au lieu d'un titre ou d'une balise fait que si l'on insère un "contents controls" ca bouleverse l'ordre et il faut renuméroté toute la macro.
 

Mistrall

XLDnaute Nouveau
apres quelque recherche on peut avoir l'ID du contrôle de contenu a l'aide d'une macro
VB:
Sub test()
MsgBox ActiveDocument.ContentControls(1).ID
End Sub


et apres

Code:
For Each controle In ActiveDocument.ContentControls
If controle.ID = 0000000# Then

Mais ca me parait lourd je vais continué a utilisé la macro posté au dessus

VB:
Dim cc As ContentControl
     Dim docCCs As ContentControls
     Set docCCs = WordDoc.SelectContentControlsByTag("Ndossier")
     If docCCs.Count <> 0 Then
         For Each cc In docCCs
             cc.Range.Text = "testok"
         Next
     Else
         MsgBox "No content controls found."
     End If
 

Yurperqod

XLDnaute Occasionnel
En donnant TEST comme titre au contrôle, cela fonctionne.
macro dans Excel
VB:
Sub Macro6()
Dim objWord As New Word.Application
Dim wDoc As Word.Document
'mettre le nom réel du dossier où se trouve le document Word.
Set wDoc = objWord.documents.Open("C:\CHEMIN\Test.docx")
wDoc.SelectContentControlsByTitle("TEST").Item(1).Range.Text = ThisWorkbook.Sheets(1).Cells(1, 1)
wDoc.Save
wDoc.Close
End Sub
 

Mistrall

XLDnaute Nouveau
J'ai testé la macro effectivement ca fonctionne reste que ca remplace uniquement le premiere contrôle de contenu avec le titre. j'ai donc bouclé avec i mais ca ne fonctionne que si je connais le nombre de fois ou ce control sera dans mon fichier. y a t'il moyen de contourné cela ?

En tout ca gros merci a toi pour ton aide !

Code:
Sub Macro6()
Dim objWord As New Word.Application
Dim wDoc As Word.Document
'mettre le nom réel du dossier où se trouve le document Word.
Set wDoc = objWord.documents.Open("C:\Users\X2015299\Desktop\test Macro\Testmacro.docx")
For i = 1 To 2
wDoc.SelectContentControlsByTitle("test1").Item(i).Range.Text = ThisWorkbook.Sheets(1).Cells(2, 1)
Next
  wDoc.SelectContentControlsByTitle("test2").Item(1).Range.Text = ThisWorkbook.Sheets(1).Cells(4, 1)
 
wDoc.Save
wDoc.Close
End Sub
 

Yurperqod

XLDnaute Occasionnel
En théorie en donnant un titre unique à chaque contrôle, pas besoin de boucler, non ?
Exemple avec trois contrôles qui ont chacun un titre différent.
Le 1er contrôle prend bien la valeur de A1
Le 2ième contrôle prend bien la valeur de A2
Le 3ième contrôle prend bien la valeur de A3
Cela fonctionne bien sur mon PC.
Macro dans Excel
VB:
Sub Macro7()
Dim objWord As New Word.Application
Dim wDoc As Word.Document
'mettre le nom réel du dossier où se trouve le document Word.
Set wDoc = objWord.documents.Open("C:\CHEMIN\Test.docx")
wDoc.SelectContentControlsByTitle("TITRE_A").Item(1).Range.Text = ThisWorkbook.Sheets(1).Cells(1, 1)
wDoc.SelectContentControlsByTitle("TITRE_B").Item(1).Range.Text = ThisWorkbook.Sheets(1).Cells(2, 1)
wDoc.SelectContentControlsByTitle("TITRE_C").Item(1).Range.Text = ThisWorkbook.Sheets(1).Cells(3, 1)
wDoc.Save
wDoc.Close
End Sub
 

Yurperqod

XLDnaute Occasionnel
Et en passant par une boucle, cela fonctionne aussi.
Macro dans Excel
VB:
Sub Macro8()
Dim Titres, i As Long
Dim objWord As New Word.Application
Dim wDoc As Word.Document
Titres = Array("TITRE_A", "TITRE_B", "TITRE_C")
'mettre le nom réel du dossier où se trouve le document Word.
Set wDoc = objWord.documents.Open("C:\CHEMIN\Test.docx")
For i = LBound(Titres) To UBound(Titres)
wDoc.SelectContentControlsByTitle(Titres(i)).Item(1).Range.Text = ThisWorkbook.Sheets(1).Cells(i + 1, 1)
Next
wDoc.Save
wDoc.Close
End Sub
 

Mistrall

XLDnaute Nouveau
en fait j'ai plusieurs fois un "N°de dossier" dans mon document ce que je fais pour que ce soit plus simple c'est d'utiliser le même contrôle de contenu donc avec le même titre. or avec l'argument Item (1) il insère le texte uniquement dans le premier emplacement.

c'est pour ca qu'en remplace item(1) par item (i) ca marche mais il faut que je connaisse exactement le nombre de fois ou ce controle de contenu est contenu dans le document.
 

Yurperqod

XLDnaute Occasionnel
Bonjour le forum

Si je sais pas si le champ REF fonctionne avec un contrôle de contenu de texte brut
Mais d'habitude, j'utilise un Signet associé au champ REF pour répéter du texte dans un document Word.
 

Pièces jointes

  • champREF.jpg
    champREF.jpg
    67.2 KB · Affichages: 49

Discussions similaires

Statistiques des forums

Discussions
311 734
Messages
2 082 020
Membres
101 872
dernier inscrit
Colin T