Saisie automatique signet selon tableau excel

Camille - Modifié le 29 mars 2021 à 18:21
cs_Le Pivert Messages postés 7893 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 19 mai 2023 - 1 avril 2021 à 14:47
Bonjour le forum,

Je débute un peu en formulaire Word. J'ai un fichier word dont j'aimerais que plusieurs signets se remplissent automatiquement selon un champ que je remplis au début.

Page 1 : en mode formulaire je renseigne une chaine de caractère
Sur un fichier excel, j'ai un tableau dont une colonne correspond à cette chaine de caractères
Sur les autres pages du Word : J'ai plusieurs signets qui prendraient la valeur correspondant à une colonne donnée sur la même que ma chaine de caractère (fonction recherchex quoi)

Avec ce que j'ai trouvé sur le net j'ai réussi à faire ça
texte1 = ActiveDocument.Range(ActiveDocument.Bookmarks("immat").Range.Start, ActiveDocument.Bookmarks("immat").Range.End)
Texte2 = ActiveDocument.Range(ActiveDocument.Bookmarks("NCC").Range.Start, ActiveDocument.Bookmarks("NCC").Range.End)
texte = ActiveDocument.Range(ActiveDocument.Bookmarks("immat").Range.Start, ActiveDocument.Bookmarks("NCC").Range.End)
texte3 = Replace(Replace(Replace(texte, texte1, ""), "FORMTEXT", ""), vbLf, "")
texte5 = Replace(Texte2, "FORMTEXT ", "")
Texte6 = Replace(Texte2, texte5, "")
immat = Mid(texte3, 3, Len(Texte6))
Set DocExel = CreateObject("excel.application")
    Set Wkb = DocExel.Workbooks.Open(ActiveDocument.Path & "\" & "Classeur1.xlsx")
DocExel.Visible = True
With Wkb
ligne = 0
On Error Resume Next
ligne = .Sheets("Feuil1").Columns("M:M").Find(What:=immat, After:=.Sheets("Feuil1").Range("M2"), LookIn:=Xlvalues, LookAt:=xlwhole).Row
If ligne > 0 Then
NCC = .Sheets("Feuil1").Range("C" & ligne)
Else
NCC = ""
End If
End With
Wkb.Close True
DocExel.Quit
Selection.GoTo What:=wdGoToBookmark, Name:="NCC"
Selection.MoveDown Unit:=wdLine, Count:=1, Extend:=wdMove
Selection.TypeText Text:=NCC
End Sub

Mais je ne modifie pas les valeurs des signets, j'écris derrière.
Idem, je prend pas la valeur de "immat" mais les caractères qui suivent.


Une autre façon de faire serait de créer un onglet sur le Excel avec les rechercheX et j'ai plus qu'à dire A1 = immat et ensuite mes autres signets = valeur de B1, C1, etc


Merci ! ;)

2 réponses

Après les signets c’est peut-être pas ça qu’il faut utiliser, je sais pas.
Moi mon but c’est de passer en mode remplissage de formulaire (revision > protéger > activer restriction) puis que l’utilisateur se déplace de champs en champs. Le premier champs remplis serait immat, et c’est la clé de recherche (comme tu vois sur le excel https://cjoint.com/c/KCErenJjA5A ). Donc en lançant la macro, on fait comme t’as fait en mettant la valeur de immat en B2. Ensuite on lit les autres valeurs et on l’écrit soit en signet (mais ça semble impossible) soit autrement. En champ nommé ?

Je t’ai préparé mon fichier en laissant juste les premières pages et en anonymisant https://cjoint.com/c/KCEq3CYkJIA

J’ai mis en vert les différent champs qui prennent les valeur du excel. Comme j’utilise les signets et champs je le saisie une seule fois et çà reprend la valeur à chaque fois.
0
cs_Le Pivert Messages postés 7893 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 19 mai 2023 136
1 avril 2021 à 14:47
Bonjour,

il serait préférable de travailler sur le classeur Excel pour exporter les données vers le document Word.

voici une manière de faire:

https://vb.developpez.com/faqvba/?page=3.7#WexportdataSignet

0