XL 2021 Remplacer ThisWorkbook.Path par une cellule précise

cgpa

XLDnaute Occasionnel
Bonjour le forum,

A partir d'excel j'utilise "ThisWorkbook.Path" pour ouvrir la boite "enregistrer sous" dans word mais j'aimerais que la boite s'ouvre directement dans un dossier pour lequel le chemin d'accès est précisé sur une cellule précise, à savoir la colonne AC de la ligne active sur mon tableau.

Ma ligne de code initiale qui fonctionne pour l'ouverture est:
Application_Word.ChangeFileOpenDirectory ThisWorkbook.Path

J'ai essayé ceci qui ne fonctionne pas:
Application_Word.ChangeFileOpenDirectory Ws3.Cells(DerLWs3, 29) (où Ws3 est le nom de la feuille et 29 le numéro de la colonne AC.)

Si je remplace dans le code Ws3.Cells(DerLWs3, 29) par le chemin "C:\..." ça fonctionne. Mais le chemin est à chaque fois différent selon le contenu de la colonne AC, ce qui m'oblige à renvoyer vers le contenu de cette cellule.
Quelqu'un peut-il me dire comment je dois adapter le code?
Merci d'avance, bonne journée!
 
Dernière édition:
Solution
Bonjour,
Si tu affectes une variable à la commande suivante
xChemin=Ws3.Cells(DerLWs3, 29)
Qu'est ce que tu obtiens ????
Dans mon exemple j'ai
VB:
Sub TEST()
    Set Ws3 = Sheets("Feuil1")
    DerLWs3 = 10
    xChemin = Ws3.Cells(DerLWs3, 2)
End Sub
Donc ici, on ira chercher la cellule B10 et ma variable me donne TOTO10 comme résultat puisque dans la formule donnée on va dans l'onglet Feuil1, DerLWs3=10 et 2 pour la colonne donc B
1706264630545.png

Le résultat de la variable est un string donc accollée à ta commande, je pense que cela devrait le faire
Application_Word.ChangeFileOpenDirectory xChemin
ou peut être faut-il l'écrire comme ceci
Application_Word.ChangeFileOpenDirectory(xChemin)
C'est une piste mais je ne peut pas...

Lolote83

XLDnaute Barbatruc
Bonjour,
Si tu affectes une variable à la commande suivante
xChemin=Ws3.Cells(DerLWs3, 29)
Qu'est ce que tu obtiens ????
Dans mon exemple j'ai
VB:
Sub TEST()
    Set Ws3 = Sheets("Feuil1")
    DerLWs3 = 10
    xChemin = Ws3.Cells(DerLWs3, 2)
End Sub
Donc ici, on ira chercher la cellule B10 et ma variable me donne TOTO10 comme résultat puisque dans la formule donnée on va dans l'onglet Feuil1, DerLWs3=10 et 2 pour la colonne donc B
1706264630545.png

Le résultat de la variable est un string donc accollée à ta commande, je pense que cela devrait le faire
Application_Word.ChangeFileOpenDirectory xChemin
ou peut être faut-il l'écrire comme ceci
Application_Word.ChangeFileOpenDirectory(xChemin)
C'est une piste mais je ne peut pas tester
Bon courage
@+ Lolote83
 

cgpa

XLDnaute Occasionnel
Bonjour,
Si tu affectes une variable à la commande suivante
xChemin=Ws3.Cells(DerLWs3, 29)
Qu'est ce que tu obtiens ????
Dans mon exemple j'ai
VB:
Sub TEST()
    Set Ws3 = Sheets("Feuil1")
    DerLWs3 = 10
    xChemin = Ws3.Cells(DerLWs3, 2)
End Sub
Donc ici, on ira chercher la cellule B10 et ma variable me donne TOTO10 comme résultat puisque dans la formule donnée on va dans l'onglet Feuil1, DerLWs3=10 et 2 pour la colonne donc B
Regarde la pièce jointe 1189340
Le résultat de la variable est un string donc accollée à ta commande, je pense que cela devrait le faire
Application_Word.ChangeFileOpenDirectory xChemin
ou peut être faut-il l'écrire comme ceci
Application_Word.ChangeFileOpenDirectory(xChemin)
C'est une piste mais je ne peut pas tester
Bon courage
@+ Lolote83
bonjour Lolote83. Merci pour la piste. Après quelque essais infructueux, j'ai réussi à adapter mon code. ça marche, merci beaucoup!!!
 

Lolote83

XLDnaute Barbatruc
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
 

cgpa

XLDnaute Occasionnel
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
 

Lolote83

XLDnaute Barbatruc
Re bonjour,
Merci pour le retour et les précisions apportées qui permettront peut être à d'autres d'y voir plus clair
Juste une remarque
Quand tu dois joindre du code, utilise la balise adéquat, cela permet là aussi d'y voir plus clair
Balise ICI
1706276249750.png

@+ Lolote83
 

Statistiques des forums

Discussions
315 095
Messages
2 116 170
Membres
112 676
dernier inscrit
little_b