Injecter des valeurs de cellules Excel dans un fichier Word

Bonjour à tous,

Je débute et bricole en vba (mal d'ailleurs) et j'ai un besoin :

Je souhaite injecter des informations contenues dans des cellules excel vers une trame word (ST).

La trame word est préparée avec des signets. (1 signet = une information à renseigner depuis excel)

J'ai besoin depuis excel, de sélectionner une ou plusieurs lignes et injecter les données dans la trame .

1 ligne excel concerne 1 référence pièce et donc 1 seul fichier word à générer au final.

Chaque fichier word devra porter le nom de la cellule "RAS"

Quelqu'un serait en mesure de m'aider ?

Merci d'avance

480st.docx (16.27 Ko)
379inject-do.xlsm (16.19 Ko)

Note: Les fichiers joints sont des exemples. Et permettent de simplifier ma demande d'aide ! J'ai démon côté des fichiers beaucoup plus gros. Mais le fonctionnement sera identique. (30 ou 40 signets peut être)

Bonjour,

Dans votre fichier Word, il serait plus approprié d'utiliser des champs de fusion et non des signets. En donnant à chaque champ de fusion, le nom de la colonne correspondante de votre fichier Excel, cela permettra un remplissage facile au niveau du code.

menu Insertion --> Groupe Zone de texte --> Bouton Composants Quick Part --> Champ --> ChampFusion

Après, je vous communique le code correspondant.

Bonsoir,

J'ai modifié le word comme vous me le conseillez, l'excel également !

Espérant que celà convienne !

Merci d'avance !

373st.docx (15.73 Ko)
287inject-do.xlsm (15.34 Ko)

Bonsoir,

ci-joint fichiers

Dans le fichier modèle Word, certains noms de champ ne correspondaient pas aux noms des colonnes de votre fichier Excel.

770st.docx (15.87 Ko)
752inject-do1.xlsm (21.14 Ko)

Bonjour,

Merci beaucoup pour ce code. En effet il y avait des différences, j'ai compris l'erreur !

Je vais maintenant essayer d'appliquer tout ceci sur mon fichier final.

D'autre part,

  • Comment puis je renvoyer le champ "reference" dans le nom du fichier word qui est enregistré ?
  • Est il possible également de définir avant de lancer l'injection la ou les lignes à générer (pour éviter de tout générer à chaque fois) ?

Merci d'avance pour votre réponse !

Re bonjour !

En plus de mes précédentes questions, j'ai essayé de câbler tout le code sur mes fichiers... Ce n'est pas concluant .

J'ai essayé de remplacer la cible de trame word et j'ai une erreur.

(les champs fusion sont identiques).

Je n'arrive pas à comprendre mon erreur..

je vous joins les fichiers définitifs (allégés)

Merci pour votre aide précieuse !

117suivi.xlsm (24.39 Ko)
73stlco.zip (15.63 Ko)

Je n'arrive pas à comprendre mon erreur.

Voir le chemin d'ouverture de votre document modèle Word

    nom_fichier = CreateObject("Wscript.Shell").SpecialFolders("Desktop") & "\essai inj\STLco.doc"

Voir le chemin de stockage de votre bon de livraison

    nom_fichier = CreateObject("Wscript.Shell").SpecialFolders("Desktop") & "\INJECTION EXCEL vers WORD" & ligne & ".doc"

Par ailleurs, dans votre document modèle, vous définissez un champ de fusion "Date" qui n'existe pas dans votre fichier Excel. Je l'ai remplacé par le champ "Date du jour" du document Word

-Est il possible également de définir avant de lancer l'injection la ou les lignes à générer (pour éviter de tout générer à chaque fois) ?

Une proposition via le formulaire appelé par le bouton INJECTER.

257stlco.zip (15.82 Ko)
288suivi.xlsm (27.70 Ko)

C'est juste super !

J'ai intégré mes données dans la feuille excel concernée par la macro.

En revanche je n'arrive pas à faire ressortir tous les champs dans le word. Pourtant les champs sont bien nommés dans chaque document.

Avez vous une idée du probleme ? (dans mon fichier je vais jusqu'à la colonne "CO" )

Avez vous une idée du probleme ? (dans mon fichier je vais jusqu'à la colonne "CO" )

revoir la définition du nom GRILLE : =DECALER(GRILLE!$A:$CO;;;NBVAL(REFERENCE))

Je vais contrôler tous mes champs fusion, mais çà a l'air vraiment pas mal !

Est il possible de nommer le fichier word généré autrement ? :

Actuel : INJECTION EXCEL vers WORD3

Souhaité : REFERENCExxx (issu de la colonne D du fichier excel)

Souhaité : REFERENCExxx (issu de la colonne D du fichier excel)

modifier le code ainsi

            'suppression guillemets champ de fusion
            nom = Replace(champ.Result, Chr(171), ""): nom = Replace(nom, Chr(187), "")

            'remplissage champ de fusion à partir de la valeur de la colonne à laquelle le nom fait référence
            Set cell = [Grille].Rows(1).Find(nom, LookAt:=xlWhole)
            If Not cell Is Nothing Then champ.Result.Text = cell.Offset(ligne - 1)
            If UCase(nom) = "DENOMINATION" Then référence = cell.Offset(ligne - 1)

        End If
    Next champ

    '// sauvegarde et fermeture document
    If référence = Empty Then référence = ligne
    nom_fichier = CreateObject("Wscript.Shell").SpecialFolders("Desktop") & "\REFERENCE " & référence & ".doc"

Je dois avoir fait une erreur..

A priori "référence" n'est pas déclaré comme variable ?

Si j'ai bien compris, la macro cherche s'il y a quelque chose dans la case DENOMINATION. Si oui elle prend la valeur de cellule qui se trouve à coté ? (Donc REFERENCE ?)

capture

Bonjour,

J'aurai dû préciser qu'i faut définir la variable référence

    Dim WordDoc As Object, champ As Object
    Dim nom As String, nom_fichier As String, référence As String
    Dim cell As Range

Quelques modifs mais, çà fonctionne !

(Je ne ferme pas le sujet, car il risque d'y avoir encore quelques questions)

Mais merci déjà pour ce grand coup de pouce !

Bonjour,

Je me pose la question s'il est possible de rajouter dans le user-form un tri pour n'afficher que les lignes qui portent le même numéro de DATAPACK. ?

Merci d'avance pour votre réponse !

Je ne trouve pas la zone dans le code qui permet de changer le commentaire de la boite de dialogue qui demande la validation des lignes sélectionnées, pourriez vous m'indiquer où elle se trouve ?

Je viens de me rendre compte que les champ fusion ne fonctionnent pas dès qu'ils sont placés dans les entetes ou pieds de page.

Avez vous une idée du problème ?

Je ne trouve pas la zone dans le code qui permet de changer le commentaire de la boite de dialogue qui demande la validation des lignes sélectionnées, pourriez vous m'indiquer où elle se trouve ?

Private Sub Cmd_injecter_Click()
    Dim WordApp As Object
    Dim i As Integer

    If MsgBox("Confirmez-vous l'injection des lignes sélectionnées dans le bon de livraison", vbYesNo) = vbNo Then Exit Sub

Je me pose la question s'il est possible de rajouter dans le user-form un tri pour n'afficher que les lignes qui portent le même numéro de DATAPACK. ?

C'est possible mais il me semble qu'il s'agit plutôt d'un filtrage que d'un tri.

Rechercher des sujets similaires à "injecter valeurs fichier word"