Re bonjour,
Félicitation.
Qu'est-ce qui clochait au final ?
L'idée serait de mettre la solution au visuel de tous afin de permettre à quelqu'un qui aurait le même problème que toi, de trouver facilement une solution
Bonne continuation
@+ Lolote83
Effectivement. L'idéal aurait été d'envoyer le fichier, mais il me faudrait plusieurs heures pour enlever les données personnelles...
Je n'avais pas bien paramétré la variable.
Je rappelle que dans mon exemple le chemin du répertoire de destination varie à chaque ligne et se trouve en colonne 29 (colonne AC) sous format C:\Chemin\sous-chemin
Voici en bleu les modifications:
Option Explicit
Public Ligne_Ch&
Public Ligne&
Public DerLWs3&
Public Feuille As Worksheet
Public xchemin 'définit la variable
Sub Envoi_Word(Document As String)
Dim Application_Word As Object, Document_Type As Object 'Pour Word. Pour le choix du document type, il faut aller dans le module de la feuille WS3 indiquer la bonne cellule
Dim Chemin As String, Nom As String, i&
Dim dlgSaveAs
xchemin = Ws3.Cells(DerLWs3, 29) 'le chemin dans lequel enregistrer le fichier word selon le contenu de la colonne 29 (la colonne AC) de la ligne active sur la feuille 3. (ex. dans cette cellule se trouve C:\chemin... qui varie d'une ligne à l'autre)
'Ouverture document Word et renseignement des signets
Set Application_Word = CreateObject("Word.Application") 'ouvre une session word
Set Document_Type = Application_Word.Documents.Open(ThisWorkbook.Path & "\" & Document & ".docx") 'ouvre le document Modèle Word
Application_Word.Visible = True 'affiche le Word mode Visualisation.
(ici code selon les différents documents word)
Select Case Document
Case "commande fournisseur" 'Attention il faut que le texte et la casse soient exactement la même que dans le combobox
Nom = "Cde " & Year(Ws3.Cells(DerLWs3, 2)) & " " & Ws3.Cells(DerLWs3, 1) & " " & Ws3.Cells(DerLWs3, 10) & " " & Ws3.Cells(DerLWs3, 22) 'envoi automatique du nom du document dans word
With Document_Type
For i = 2 To 13 ' indique qu'il s'agit des signets 2 à 13
.Bookmarks("Signet" & i).Range = Ws3.Cells(DerLWs3, i + 8) ' indique que la valeur des signets n°2 à 13 correspond au contenu des colonnes de la feuille 3 (soit i+8 ici, donc par exemple i= signet n°2 donc 2+8=10, soit le signet n° 2 renvoie la valeur de la colonne n°10 de la feuille 3)
Next
End With
With Document_Type
For i = 21 To 23 'reprend ici les valeurs des signets n°21 à 23 (feuille "chantier", chantier + conducteur + chef d'équipe)
.Bookmarks("Signet" & i).Range = Ws3.Cells(DerLWs3, i - 17) 'indique que les signets n°21 à 23 correspondent au contenu de la feuille 3, colonnes i-17 = par exemple signet 21-17 = colonne n°4 de la feuille 3
Next i
End With
With Document_Type
For i = 25 To 26 'reprend ici les signets 25 à 26 soit les informations employés de la feuille paramètre
.Bookmarks("Signet" & i).Range = Ws3.Cells(DerLWs3, i - 0) 'indique que les signets 25 et 26 renvoient le contenu de feuille 3 en i-2 (soit ici signet 25 = colonne 23 de la feuille 3; signet 26 =...)
Next i
End With
Document_Type.Bookmarks("Signet30").Range = "DS/" & Ws3.Cells(DerLWs3, 24) & "/" & Year(Ws3.Cells(DerLWs3, 2)) & "/" & Ws3.Cells(DerLWs3, 1) ' soit initiales patron (jamais changées)/initiales employé de feuille 3 colonne 22 / année de feuille 3 colonne 1)
Document_Type.Bookmarks("Signet31").Range = Ws3.Cells(DerLWs3, 2) 'ajout d'un signet n°31 pour envoyer la date reprise feuille 3 cellule 2
Document_Type.Bookmarks("Signet32").Range = Ws3.Cells(DerLWs3, 22) 'ajout d'un signet n°32 pour envoyer le contenu de la cellule 22 de la feuille 3 = "concerne"
Select case...
(suite du code selon les différents modèles de documents word à choisir)
et à la fin du code pour "enregistrer sous" et déterminer le répertoire final selon le contenu de la ligne active, colonne 29, il faut encoder:
End Select
'Activation de l'application Word et donc du fichier Word
Application_Word.Activate
'Changement du répertoire
'Application_Word.ChangeFileOpenDirectory ThisWorkbook.Path '= ouvre la boite "enregistrer sous" sur le répertoire initial du document modèle.
'Pour préciser le chemin du dossier dans le code, il faut utiliser par exemple:
'Application_Word.ChangeFileOpenDirectory "C:\..."
'Changement du répertoire selon le contenu de la colonne 29
Application_Word.ChangeFileOpenDirectory (xchemin) 'change le répertoire de destination de la boite "enregistrer sous" et va chercher l'info dans xchemibn (voir début du code)
'Définit et ouvre la boite de dialogue "Enregistrer sous" avec le nom du fichier
Set dlgSaveAs = Application_Word.Dialogs(wdDialogFileSaveAs)
With dlgSaveAs
.Name = Nom
.Show
End With
Application_Word.Activate '=fait passer la boite "enregistrer sous" de word à l'écran devant l'application excel
End Sub
Encore merci, Lolote83