Champ sur word > Saisie automatique signet selon tableau Excel

Désolé ce n est pas très bien expliqué tout cela
Dans une première phase on allait chercher via le numéro « immat » pour la cibler une donnée dans un fichier Excel c est l objet de ma première proposition puis finalement tu as préféré tout inclure dans Excel signets et données pour alimenter Word c est ma deuxième proposition
Pour me dire maintenant que c est un mixte des deux que tu souhaites
Pas facile de te suivre !!!
Ce numéro « immat » obtenu dans le signet du même nom du fichier Word que doit on en faire dans Excel pour ensuite récupérer toutes les données de tous les signets ?
Quel rapport entre ce numéro « immat » et la liste des signets avec leur donnée que je pensait scruter en colonne À et B du fichier Excel
A quoi sert ce numéro « immat » si la liste à récupérer est en colonne À et B ?

Il me manque une étape pour comprendre

Pour l instant c est le flou absolu

Excuse moi si c’est pas très clair. La première explication est la bonne. Je souhaite récupérer l’info de recherche dans word (immat). Si je veux l’ecrire dans excel c’est pour simplifier la recherche, comme on a fait dans feuil 1 (si tu regarde mon excel la feuil1 sert à la recherche tandis que l’autre feuil est la base de données. Tu verras aussi que dans feuil 1 c’est des =recherchex)
En fait il n’y a que immat qui vient de Word, tout le reste vient de excel. C’est ce que j’essaye de t’expliquer depuis le début ^^’

Ce numéro « immat » obtenu dans le signet du même nom du fichier Word que doit on en faire dans Excel pour ensuite récupérer toutes les données de tous les signets ?
On ecrit immat en B2 (ensuite B3, B4, etc sont des rechercheX basé sur immat)

A quoi sert ce numéro « immat » si la liste à récupérer est en colonne À et B ?
Immat varie à chaque nouvelle utilisation du fichier (c’est un numéro d’immatriculation d’un produit, les autres signets nous donnent les caractéristiques de ce produits)

Bonjour

Tu ne m as toujours pas dit l utilité du numéro « immat » récupéré dans Word pour le fichier Excel
A quoi sert il ?
Une fois récupéré qu’elle sa finalté dans le traitement ?
Si il est si important de le déterminer c est qu il doit servir à quelque chose dans la démarche mais à quoi ?
Merci pour cette précision d importance

Immat varie à chaque nouvelle utilisation du fichier (c’est un numéro d’immatriculation d’un produit, les autres signets nous donnent les caractéristiques de ce produits)
Dans le traitement il sert à retrouver les autres signets. Si tu regardes dans le fichier excel, B3, B4, etc sont des rechercheX basé sur la valeur d’immat en B2.

« Dans le traitement il sert à retrouver les autres signets. Si tu regardes dans le fichier excel, B3, B4, etc sont des rechercheX basé sur la valeur d’immat en B2. »

Retrouver les autres signets dans le fichier Excel je suppose mais celui-ci dans ce fichier est à rechercher où pour qu’il me donne ces informations ???

Tu ne m’as pas transmis de fichier Excel qui me permette de vérifier ceci :

« Si tu regardes dans le fichier excel, B3, B4, etc sont des rechercheX basé sur la valeur d’immat en B2. »

J’ai besoin de connaitre la manière d’utiliser cet « immat » dans le fichier Excel pour récupérer les données à rapporter dans Word (signets avec leur donnée)
l’immat est où (quelle colonne ou quelle ligne)
les données en correspondance sont à récupérer comment (cellules adjacentes, cellules d’une colonne la même ou celle de droite ou de gauche)

J’ai besoin de toutes ces informations pour monter un code approprié
Fais moi un fichier Excel avec la structure que tu envisages dans lequel sont les codes « immat » et les différents signets associés à leur donné sinon je ne m’en sortirai pas

A vous lire j’ai l’impression que vous n’avez pas vu mon fichier Excel, je vous le remet ! Classeur1.xlsx (12,9 Ko)

Il y a deux onglets, un pour la base de données, un autre (identique à votre fichier) pour extraire plus facilement la valeur des signets.

La valeur de immat est a écrire dans la celulle B2 de l’onglet feuil1
La récupération des données, comme vous l’avez déjà fait, fonctionne très bien.

ok, je crois que j’ai trouvé en ajoutant
.Sheets("Feuil1").Range("B2") = ActiveDocument.FormFields("immat").Result

Ca donne
Sub Traitement()

Set DocExel = CreateObject("excel.application")
    Set Wkb = DocExel.Workbooks.Open(ActiveDocument.Path & "\" & "Classeur1.xlsx")
DocExel.Visible = True
With Wkb
.Sheets("Feuil1").Range("B2") = ActiveDocument.FormFields("immat").Result
i = 2
Do While .Sheets("Feuil1").Range("A" & i) <> ""
signet = .Sheets("Feuil1").Range("A" & i)
Donnée = .Sheets("Feuil1").Range("B" & i)
ActiveDocument.FormFields(signet).Result = Donnée
'ActiveDocument.Bookmarks(signet).Range.InsertAfter "-" & Donnée
i = i + 1
Loop
End With
Wkb.Close True
DocExel.Quit

End Sub

« La valeur de immat est a écrire dans la celulle B2 de l’onglet feuil1 »

Pourquoi quel intêret dans la procédure si au final avec les cellules qui suivent je peux sans cet « immat » remplir tous les signets colonne A avec les données de la colonne B quelque soit la valeur de l’immat
Dans ce contexte je n’ai pas besoin de l’immat pour compléter tous les signet de leur donnée respective

Je suis toujours dans un épais brouillard

Si tu regardes, les cellules B3 et en dessous sont des rechercheX qui se basent sur immat en B2.
Donc si je modifie pas B2, les valeurs ne sont pas les bonnes.

C’est bizarre que tu bloques la dessus ^^’

Je ne suis pas dans ton esprit et donc ne peux pas voir la manière dont tu conçois cette approche
C’est à toi à me donner tout le détail et donc de me dire tout simplement ceci :
Il faut récupérer la référence « immat » pour la mettre en cellule « B2 » du fichier excel qui permettra ainsi de fabriquer les paramètres à utiliser pour alimenter les signets
Ainsi moi de comprendre l’utilité de cette récupération de Word pour mettre à jour ses signets
J’ai enfin compris
Mais cette manière d’opérer est la tienne moi je ne peux l’appréhender tu dois me l’expliquer

Je te joint le document Word adapté à ce fonctionnement
Le traitement alimente de la donnée « immat » de ce fichier l’onglet « Feuil1 » fichier Excel « Classeur1.xlsx » en cellule B2 puis à partir de la ligne 3 de cet onglet récupère toutes les données nécessaires à l’alimentation des signets Word colonne A et B (signet/donnée)

J’ai essayé le traitement le problème c’est que la modification de la cellule B2 pour un nouvel « immat » mets à mal toutes tes formules colonne A et B à partir de la ligne 3

Si on change à la main cette référence dernier chiffre par exemple pour le remettre ensuite les formules ne veulent plus rien savoir même immat remis à l’identique

Je te laisse regarder mais il y a une instabilité qu’il faut corriger

Ton fichier Word adapté

A quoi sert tout le début du code ?
On en revient qu fait que sur ton code je remplit pas la valeur du champ alors que moi sur mon code si.
Tu vois quelque chose qui va pas sur le code que j’ai fait ?

Parceque pour moi ça fonctionne bien, j’essaye maintenant de faire une actualisation des refs de champ et j’y arrive avec

Dim xRange As Range
Dim xFiled As Field
For Each xRange In ActiveDocument.StoryRanges
    For Each xFiled In xRange.Fields
        xFiled.Update
    Next
Next

Avec mon code en tout début j’extrait l « immat » du contenu du signet « immat » pour le reporter en cellule B2 du fichier Excel

Dans la variable texte je récupère ceci :

" FORMTEXT Saisir numéro d’immatriculation
<215151039>

Voici le NCC par défaut"

il y a l’immat

dans la variable Texte1 je récupère ceci :

« FORMTEXT Saisir numéro d’immatriculation »

dans la variable Texte2 je récupère ceci :

« FORMTEXT Voici le NCC par défaut »

Par le jeu des instructions Replace en utilisant les variable Texte1 et Texte2 de proche en proche je vide la variable Texte de son début et de sa fin pour n’obtenir uniquement que la donnée qui m’intéresse l’immat

Je ne connais pas ton code maintenant si il fonctionne utilises le

Je suis plus branché Excel que Word donc pour ce dernier je fouine sur internet pour construire mes procédures

Voilà pour les explications

Avec ActiveDocument.FormFields("immat").Result on récupère directement le contenu du champ texte du signet, pas le texte après et surtout je n’ai à le taper qu’une fois pour toutes les autre réptition de mon document. Je te l’ai envoyé mon code (qui est principalement le tiens à la base)

Sub Traitement()

Set DocExel = CreateObject("excel.application")
    Set Wkb = DocExel.Workbooks.Open(ActiveDocument.Path & "\" & "Registre immatriculation.xlsx")
DocExel.Visible = False
With Wkb
.Sheets("Feuil1").Range("B2") = ActiveDocument.FormFields("immat").Result
i = 2
Do While .Sheets("Feuil1").Range("A" & i) <> ""
signet = .Sheets("Feuil1").Range("A" & i)
Donnée = .Sheets("Feuil1").Range("B" & i)
ActiveDocument.FormFields(signet).Result = Donnée
'ActiveDocument.Bookmarks(signet).Range.InsertAfter "-" & Donnée
i = i + 1
Loop
End With
Wkb.Close Savechanges:=False
DocExel.Quit

End Sub

Merci en tout cas pour toute ton aide ! Je vais adapter ça à mon fichier réel et je reviens si j’ai un soucis, merci encore :blush:

« Avec ActiveDocument.FormFields("immat").Result on récupère directement le contenu du champ texte du signet, pas le texte après »
A condition que l on soit certain qu il n y ai dans cette partie que l « immat » ce qui n est pas un absolu
Tu t en rendra compte peut être à l usage
Maintenant je souhaite qu une seule me tromper sur ce point
Une petite précision ma boucle Do While s exécute jusqu’à la première cellule vide en colonne À donc évite les trous dans la liste de cette colonne
Bonne chance pour la suite et à ta disposition si besoin
N oublies pas de valider ma réponse un plus sympathique

Faudrait que je rajoute un message d’erreur si le code immat n’est pas trouvé
Et un autre message si un des champs (signet) est vide

« Faudrait que je rajoute un message d’erreur si le code immat n’est pas trouvé »
Ce n’est pas qu’il ne sera pas trouvé mais inexact car pollué de caractères supplémentaires avant après ou les deux

Pour le trou éventuel en colonne A tu peux mettre ceci :

If i < .Sheets(« Feuil1 »).Range(« A » & Rows.Count).end(xlup).Row Then
MsgBox(« ton message »)
End If

Cela devrait le faire

Au plaisir

Ce sujet a été automatiquement fermé après 30 jours. Aucune réponse n’est permise dorénavant.