Extraire les informations d'un userform Excel et le mettre sur Word
Bonjour le forum,
On m'a demandé de faire une génération de fiche automatique avec les informations qui sont rentrés dans un userform.
J'ai regardé les moyens existants pour faire ce genre d'opération. D'après ce que j'ai compris, il faut utiliser le publipostage. Mais je ne pense pas prendre cette option car ce serait trop long à remplir de façon manuelle.
J'ai vu plusieurs sujets par rapport à ça mais je suis assez perdu... Est-ce que vous avez un lien qui permettrait d'approfondir le sujet ?
Merci d'avance !
Bonjour, sans exemple difficile de comprendre votre besoin ?
D'ordinaire un Userform est utilisé pour alimenter une base de données. Si vous avez déjà ce userform ? il pourrait très bien être utilisé pour rappeler une saisie
déjà effectuée et alimenter dans un autre onglet dans lequel une fiche serait générée.
Ensuite l'idée d'un publipostage est pas trop mal non plus ; il suffirait d'avoir un onglet excel qui servirait au publipostage avec uniquement les valeurs de la base selectionnées par un userform.
Et bonjour,
Je reviens d'un week-end compliqué. Je te remercie pour la réponse mais j'ai essayé de m'y pencher dessus et j'arrive à générer une fiche word qui récupère les informations !
Sub creer_word()
Dim NDF As String, NDF2 As String, Rep1 As String, Rep2 As String
Dim WordApp As Object, WordDoc As Object
Rep1 = "Chemin 1" 'Chemin indiquant où est la trame
Rep2 = "Chemin 2" 'Chemin indiquant où il doit le sauvegarder
NDF = Rep1 & "Trame_Valac.docx"
If Not Exist_Fichier(NDF) Then ' Verifie si le doc existe
MsgBox "Document word manquant", vbExclamation, "Floflo"
Else
On Error Resume Next
If Fichier_IsOpen(NDF) Then ' Verifie si le doc est déja ouvert
Set WordApp = GetObject(, "Word.Application")
Set WordDoc = WordApp.Documents(NDF)
Else
Set WordApp = CreateObject("Word.Application")
Set WordDoc = WordApp.Documents.Open(NDF, ReadOnly:=False)
End If
With WordApp
.Visible = False
WordDoc.Bookmarks("LBO").Range.Text = Me.Saisie_LBO.Text
WordDoc.Bookmarks("Date_Emission").Range.Text = Me.Saisie_Emi.Text
WordDoc.Bookmarks("DSH").Range.Text = Me.Saisie_PCN.Text
WordDoc.Bookmarks("Désignation_Actia").Range.Text = Me.Saisie_Designat.Text
WordDoc.Bookmarks("Fabricant").Range.Text = Me.Saisie_Fab.Text
WordDoc.Bookmarks("Impact_Demande").Range.Text = Me.Saisie_Impact.Text
WordDoc.Bookmarks("Level").Range.Text = Me.Saisie_LEVEL.Text
WordDoc.Bookmarks("N_Valac").Range.Text = Me.Saisie_NbValac.Text
WordDoc.Bookmarks("Nature_demande").Range.Text = Me.Saisie_NatDem.Text
WordDoc.Bookmarks("Raison_Validation").Range.Text = Me.Saisie_Obser.Text
WordDoc.Bookmarks("Recommandation_Ser_Composants").Range.Text = Me.Saisie_RecoSerCompo.Text
WordDoc.Bookmarks("Référence_Service_Composants").Range.Text = Me.Saisie_RefSerCompo.Text
WordDoc.Bookmarks("Référence_Actia").Range.Text = Me.Saisie_RefAct.Text
WordDoc.Bookmarks("Référence_Doc").Range.Text = Me.Saisie_RefDoc.Text
WordDoc.Bookmarks("Référence_Fabricant").Range.Text = Me.Saisie_RefFab.Text
WordDoc.Bookmarks("Cas_Emploi").Range.Text = Me.Saisie_CasEmploi.Text
End With
' pour enregistrer le doc avec les divers éléments
NDF2 = Rep2 & "VALAC" & Saisie_NbValac & ".docx"
WordDoc.Application.ActiveDocument.SaveAs NDF2
WordApp.Visible = True ' laisse le doc ouvert
Set WordDoc = Nothing
Set WordApp = Nothing
MsgBox "Document word prêt"
End If
End SubJ'ai une petite question mais je pense l'avoir trouvé. Mon fichier créer un dossier à chaque fois qu'on rentre des informations. Et je voudrais mettre ce fichier word dans le dossier qui a été précédemment créé. Si je dis pas de bêtises, ça doit ressembler à ça :
' pour enregistrer le doc avec les divers éléments
NDF2 = Rep2 & "\nom_dossier_créé\" "VALAC " & Saisie_NbValac & ".docx"
WordDoc.Application.ActiveDocument.SaveAs NDF2Bonne journée !
Je viens de trouver les réponse et la génération d'une fiche marche parfaitement.
Mais j'ai encore une autre question : Si j'ai générer une fiche et que je veux modifier des valeurs qui sont déjà rentrés. Comment on fait pour remplacer les valeurs précédemment rentrées ?
- Messages
- 3'678
- Excel
- 365, 2019
- Inscrit
- 11/04/2020
- Emploi
- Formateur bureautique, dvpt de fichiers
Bonjour,
À partir du moment où les signets n'existent plus, bon courage !
Perso, si ça devait changer j'en générerais un nouveau.
À partir du moment où les signets n'existent plus, bon courage !
Ils sont toujours présent dans le fichier généré, on va dire que j'ai de la chance
- Messages
- 3'678
- Excel
- 365, 2019
- Inscrit
- 11/04/2020
- Emploi
- Formateur bureautique, dvpt de fichiers
Je voudrais bien voir ça. À ma connaissance ça serait une première.
- Messages
- 3'678
- Excel
- 365, 2019
- Inscrit
- 11/04/2020
- Emploi
- Formateur bureautique, dvpt de fichiers
étrange, puisque normalement ta variable remplace le signet.
Du coup j'ai repris le code pour générer un word avec les valeur renseignés auparavant. J'ai essayé de l'adapter pour qu'il puisse modifier la valeur déjà remplie. Mais ça ne marche pas car il rajoute à la suite ce que je voudrais modifier.
Le code :
Private Sub Modif_GénérationValac_Click()
Dim NDF As String, NDF2 As String, Rep As String
Dim WordApp As Object, WordDoc As Object
Rep = "N:\OEM\SHARE\y-Mass_Production_Engineering\vie serie\VALIDATION_OBSOLESCENCE\Répertoire validation\" & Modif_VALAC.value & " " & Modif_RefAct.value & " " & Modif_NatDem.value & " " & Modif_Fab.value & "\" & "VALAC " & Modif_VALAC.value & ".docx"
NDF = Rep
If Not Exist_Fichier(NDF) Then ' Verifie si le doc existe
MsgBox "Document word manquant", vbExclamation, "Et merde"
Else
On Error Resume Next
If Fichier_IsOpen(NDF) Then ' Verifie si le doc est déja ouvert
Set WordApp = GetObject(, "Word.Application")
Set WordDoc = WordApp.Documents(NDF)
Else
Set WordApp = CreateObject("Word.Application")
Set WordDoc = WordApp.Documents.Open(NDF, ReadOnly:=False)
End If
With WordApp
.Visible = False
WordDoc.Bookmarks("LBO").Range.Text = Me.Modif_LBO.Text
WordDoc.Bookmarks("Date_Emission").Range.Text = Me.Modif_Emi.Text
WordDoc.Bookmarks("DSH").Range.Text = Me.Modif_PCN.Text
WordDoc.Bookmarks("Désignation_Actia").Range.Text = Me.Modif_Designat.Text
WordDoc.Bookmarks("Fabricant").Range.Text = Me.Modif_Fab.Text
WordDoc.Bookmarks("Impact_Demande").Range.Text = Me.Modif_Impact.Text
WordDoc.Bookmarks("Level").Range.Text = Me.Modif_Level.Text
WordDoc.Bookmarks("N_Valac").Range.Text = Me.Modif_VALAC.Text
WordDoc.Bookmarks("Nature_demande").Range.Text = Me.Modif_NatDem.Text
WordDoc.Bookmarks("Raison_Validation").Range.Text = Me.Modif_Obser.Text
WordDoc.Bookmarks("Recomandation_Ser_Composants").Range.Text = Me.Modif_RecoSerCompo.Text
WordDoc.Bookmarks("Reférence_Service_Composants").Range.Text = Me.Modif_RefSerCompo.Text
WordDoc.Bookmarks("Référence_Actia").Range.Text = Me.Modif_RefAct.Text
WordDoc.Bookmarks("Référence_Doc").Range.Text = Me.Modif_RefDoc.Text
WordDoc.Bookmarks("Référence_Fabricant").Range.Text = Me.Modif_RefFab.Text
WordDoc.Bookmarks("Cas_Emploi").Range.Text = Me.Modif_CasEmp.Text
WordDoc.Bookmarks("Nb_Art_stt20").Range.Text = Me.Modif_NbStt.Text
WordDoc.Bookmarks("Demandeur").Range.Text = Me.Modif_Dem.Text
WordDoc.Bookmarks("Responsable_VS").Range.Text = Me.Modif_RespVal.Text
End With
' pour enregistrer le doc avec les divers éléments
NDF2 = Rep & "\" & Modif_VALAC.value & " " & Modif_RefAct.value & " " & Modif_NatDem.value & " " & Modif_Fab.value & "\" & "VALAC " & Modif_VALAC.value & ".docx"
WordDoc.Application.ActiveDocument.SaveAs NDF2
WordApp.Visible = True ' laisse le doc ouvert
Set WordDoc = Nothing
Set WordApp = Nothing
End If
End SubDu coup j'ai essayé de passer par une fonction adaptée pour faire la mise à jour du signet mais ça ne marche pas :(
Private Sub Modif_GénérationValac_Click()
Dim NDF As String, Rep1 As String, Rep2 As String
Dim WordApp As Object, WordDoc As Object
Rep1 = "N:\OEM\SHARE\y-Mass_Production_Engineering\vie serie\VALIDATION_OBSOLESCENCE\_ DIVERS\"
Rep2 = "N:\OEM\SHARE\y-Mass_Production_Engineering\vie serie\VALIDATION_OBSOLESCENCE\Répertoire validation\" & Modif_VALAC & " " & Modif_RefAct & " " & Modif_NatDem & " " & Modif_RefFab & "\" & "VALAC " & Modif_VALAC & ".docx"
NDF = Rep1 & "Trame_Valac.docx"
If Not Exist_Fichier(Rep2) Then ' Verifie si le doc existe
Set WordApp = CreateObject("Word.Application")
Set WordDoc = WordApp.Documents.Open(NDF, ReadOnly:=False)
With WordApp
.Visible = False
WordDoc.Bookmarks("LBO").Range.Text = Me.Modif_LBO.Text
WordDoc.Bookmarks("Date_Emission").Range.Text = Me.Modif_Emi.Text
WordDoc.Bookmarks("DSH").Range.Text = Me.Modif_PCN.Text
WordDoc.Bookmarks("Désignation_Actia").Range.Text = Me.Modif_Designat.Text
WordDoc.Bookmarks("Fabricant").Range.Text = Me.Modif_Fab.Text
WordDoc.Bookmarks("Impact_Demande").Range.Text = Me.Modif_Impact.Text
WordDoc.Bookmarks("Level").Range.Text = Me.Modif_Level.Text
WordDoc.Bookmarks("N_Valac").Range.Text = Me.Modif_VALAC.Text
WordDoc.Bookmarks("Nature_demande").Range.Text = Me.Modif_NatDem.Text
WordDoc.Bookmarks("Raison_Validation").Range.Text = Me.Modif_Obser.Text
WordDoc.Bookmarks("Recomandation_Ser_Composants").Range.Text = Me.Modif_RecoSerCompo.Text
WordDoc.Bookmarks("Reférence_Service_Composants").Range.Text = Me.Modif_RefSerCompo.Text
WordDoc.Bookmarks("Référence_Actia").Range.Text = Me.Modif_RefAct.Text
WordDoc.Bookmarks("Référence_Doc").Range.Text = Me.Modif_RefDoc.Text
WordDoc.Bookmarks("Référence_Fabricant").Range.Text = Me.Modif_RefFab.Text
WordDoc.Bookmarks("Cas_Emploi").Range.Text = Me.Modif_CasEmp.Text
WordDoc.Bookmarks("Nb_Art_stt20").Range.Text = Me.Modif_NbStt.Text
WordDoc.Bookmarks("Demandeur").Range.Text = Me.Modif_Dem.Text
WordDoc.Bookmarks("Responsable_VS").Range.Text = Me.Modif_RespVal.Text
End With
'pour enregistrer le doc avec les divers éléments
WordDoc.Application.ActiveDocument.SaveAs Rep2
WordApp.Visible = True ' laisse le doc ouvert
Set WordDoc = Nothing
Set WordApp = Nothing
Else
On Error Resume Next
If Fichier_IsOpen(Rep2) Then ' Verifie si le doc est déja ouvert
Set WordApp = GetObject(, "Word.Application")
Set WordDoc = WordApp.Documents(Rep1)
Else
Set WordApp = CreateObject("Word.Application")
Set WordDoc = WordApp.Documents.Open(Rep2, ReadOnly:=False)
End If
With WordApp
.Visible = False
MAJ_Signet "LBO", Modif_LBO.Text, Rep2
MAJ_Signet "Date_Emission", Modif_Emi.Text, Rep2
MAJ_Signet "DSH", Modif_DSH.Text, Rep2
MAJ_Signet "Désignation_Actia", Modif_Designat, Rep2
MAJ_Signet "Fabricant", Modif_Fab, Rep2
MAJ_Signet "Impact_Demande", Modif_Impact, Rep2
MAJ_Signet "Level", Modif_Level, Rep2
MAJ_Signet "N_Valac", Modif_VALAC, Rep2
MAJ_Signet "Nature_demande", Modif_NatDem, Rep2
MAJ_Signet "Raison_Validation", Modif_Obser, Rep2
MAJ_Signet "Recomandation_Ser_Composants", Modif_RecoSerCompo, Rep2
MAJ_Signet "Reférence_Service_Composants", Modif_RefSerCompo, Rep2
MAJ_Signet "Référence_Actia", Modif_RefAct, Rep2
MAJ_Signet "Référence_Doc", Modif_RefDoc, Rep2
MAJ_Signet "Référence_Fabricant", Modif_RefFab, Rep2
MAJ_Signet "Cas_Emploi", Modif_CasEmp, Rep2
MAJ_Signet "Nb_Art_stt20", Modif_NbStt, Rep2
MAJ_Signet "Demandeur", Modif_Dem, Rep2
MAJ_Signet "Responsable_VS", Modif_RespVal, Rep2
End With
'pour enregistrer le doc avec les divers éléments
WordDoc.Application.ActiveDocument.SaveAs NDF2
WordApp.Visible = True ' laisse le doc ouvert
Set WordDoc = Nothing
Set WordApp = Nothing
End If
End SubLa partie intéressante pour la MAJ est la fonction crée exprès pour la MAJ du signet : MAJ_Signet
La fonction en question :
Sub MAJ_Signet(SignetMAJ As String, TexteAmettre As String, Rep As String)
Dim SignetRange As Range
Dim WordDoc, WordApp As Object
Set WordApp = CreateObject("Word.Application")
Set WordDoc = WordApp.Documents(Rep)
Set SignetRange = WordDoc.Bookmarks(SignetMAJ).Range
SignetRange.Text = TexteAmettre
WordDoc.Bookmarks.Add SignetMAJ, SignetRange
End SubMais elle ne s'exécute pas en entier. Elle s'arrête à l'expression :
Set SignetRange = WordDoc.Bookmarks(SignetMAJ).RangeDes pistes sur cette interruption du code ?
Bonne journée
- Messages
- 3'678
- Excel
- 365, 2019
- Inscrit
- 11/04/2020
- Emploi
- Formateur bureautique, dvpt de fichiers
Bonjour,
Je vais sembler tourner en rond mais pour moi c'est normal étant donné que le signet est supprimé.
À voir si quelqu'un est mieux informé.

