Ouvrir explorateur de fichier au clic

Bonjour,

Je souhaite que dès que je clique sur une cellule entre E2 et E500, l'explorateur de fichier à l'emplacement des documents (=mes documents) s'ouvre et que le chemin du fichier s'affiche dans la cellule sélectionnée.

Exemple : j'ai un document word "chiens" placé dans mes documents et en cliquant sur E3 l'explorateur s'ouvre, copie du fichier que je sélectionne et le chemin pour y parvenir est indiqué.

Par ailleurs, l'idéal serait que se fichier se rajoute en pièce jointe d'un mail généré par liste déroulante (j'ai déjà le code fonctionnel, mais sans pièce jointe).

Je vous joins le fichier concerné (test) en annexe.

Merci à vous ;-)

16classeur5.xlsm (24.91 Ko)

Bonjour Lucrob, bonjour le forum,

J'avoue que ce n'est pas clair du tout pour moi. Ton exemple est insignifiant et ne permet pas non plus de mieux comprendre.

Exemple : j'ai un document word "chiens" placé dans mes documents et en cliquant sur E3 l'explorateur s'ouvre, copie [] du fichier que je sélectionne et le chemin pour y parvenir est indiqué [].

[]=où ?

À tout hasard essaie ça, au-double-clic dans une cellule de la plage E2:E500 :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim EF As FileDialog 'déclare la variable EF (Explorateur de Fichiers)
Dim F As String 'déclare la variable F (Fichier)
Dim NS As String 'déclare la variable NF (Nom du Fichier)
Dim CA As String 'déclare la variable CA (Chemin d'Accès)

'si le double-clic a lieu ailleurs que dans la plage E2:E500, sort de la procédure
If Application.Intersect(Target, Range("E2:E500")) Is Nothing Then Exit Sub
Cancel = True 'annule le mode [Édition] lié au double-clic
Set EF = Application.FileDialog(msoFileDialogOpen) 'définit l'explorateur de fichier EF
EF.AllowMultiSelect = False 'n'autorise la séletion que d'un seul fichier
EF.InitialFileName = "C:\Documents" 'dossier de départ"
EF.Show 'affiche EF
If EF.SelectedItems.Count > 0 Then 'condition : si un fichier a été sélectionnée
    F = EF.SelectedItems(1)
    NF = Split(F, "\")(UBound(Split(F, "\"))) 'définit le nom du fichier NF (le texte après le dernier "\"
    MsgBox "Nom du Fichier : " & NF 'message montrant NF
    CA = Left(F, Len(F) - Len(NF) - 1) 'définit le chemin d'accès CA (texte sans le nom NF)
    MsgBox "Chemin d'accès : " & CA 'message montrant CA
End If 'fin de la condition
End Sub


Bonjour ThauTheme,

Merci pour ton commentaire et ton code.

L’idée est la suivante. Au double clic dans E3, l’explorateur de fichier (valisette jaune) s’affiche. Je clique sur le document, et le chemin pour y parvenir est indiqué (ex: C:\Mes Documents\chiens.docx) dans la cellule dans laquelle j’ai double-cliqué (donc C:\Mes documents\chiens.docx doit donc apparaitre).

La finalité est que dès que dans le fichier j’ai « en cours » ou « terminé » en A3, le mail s’affiche (c’est déjà fait). Visiblement il faut rajouter un Attachments.Add pour rajouter une pièce jointe. Dans Attachments.Add, cela copiera les données d’emplacement reprises dans E3.

Conclusion : je peux automatiser les mails et les pièces jointes respectives. (J’espère).

Pour que ça indique le chemin, j’ai trouvé une vidéo, que j’appliquerai dès demain: https://youtu.be/1xWMmRPyorw
aux différences près que cela se passerait au double-clic dans la cellule cliquée et non via un bouton d’action fixé sur une seule cellule.

J’ai mis chiens.docx, mais cela peut être : les champions de F1, l’art de gouache, les mots de 5 lettres avec 2Y….

J’espère avoir éclairci un peu plus ma demande? :)

Re,

Le code modifié ci-dessous. Pour l'envoie d'email je te laisse faire. Ce genre de code m'a toujours gavé et je ne sais donc pas faire...

Private Sub Worksheet_BeforeDoubleClick(ByVal target As Range, Cancel As Boolean)
Dim EF As FileDialog 'déclare la variable EF (Explorateur de Fichiers)
Dim F As String 'déclare la variable F (Fichier)
Dim NS As String 'déclare la variable NF (Nom du Fichier)
Dim CA As String 'déclare la variable CA (Chemin d'Accès)

'si le double-clic a lieu ailleurs que dans la plage E2:E500, sort de la procédure
If Application.Intersect(target, Range("E2:E500")) Is Nothing Then Exit Sub
Cancel = True 'annule le mode [Édition] lié au double-clic
Set EF = Application.FileDialog(msoFileDialogOpen) 'définit l'explorateur de fichier EF
EF.AllowMultiSelect = False 'n'autorise la séletion que d'un seul fichier
EF.InitialFileName = "C:\Documents" 'dossier de départ"
EF.Show 'affiche EF
If EF.SelectedItems.Count > 0 Then 'condition : si un fichier a été sélectionnée
    Target.Value = EF.SelectedItems(1)
End If 'fin de la condition
End Sub

Bonsoir,

ne manque t il pas un "\" après documents ?

@ bientôt

LouReeD

Bonjour,

Le code je le copie dans la feuille 1? Ou j’insère un module? Ou Thisworkbook?

Par ailleurs puisque l’attachment sera repris en tant que valeur en colonne E. Je dois mettre Attachments.Add .range(‘’E’’) (c’est un fichier par ligne) ?

Merci

Bonjour le fil, bonjour le forum,

Ton fichier contient déjà une événementielle. Je suis très étonné que tu poses cette question... Dans le composant VBA de l'onglet concerné...

@Lou ReeD,

Peut-être... Comme chez moi, Mes Documents pointe vers un vieux disque dur. Le chemin était "H:\Mes Document". J'ai recopié bêtement...

Bonjour,

J'ai trouvé, il ne me manque plus que la syntaxe pour .Attachmentsd.add , sachant que les chemins de mes fichiers se trouvent en ligne E.

En faisant .attachments.Add Cells(ab, "E") ne fonctionne pas.

Merci pour votre aide

@Lou Reed, rebonjour / bonsoir.

Une petite idée de savoir comment rajouter le chemin de fichier récupéré en colonne E, afin que ledit fichier apparait en pièce-jointe ? Je ne trouve pas la syntaxe pour .attachments.add :(

Bonsoir,

je ne comprend pas la demande, le code de ThauThème inscrit bien le lien dans la cellule cliquée, non ?

@ bientôt

LouReeD

Bonjour,, oui parfaitement.
Le hic est que ce chemin doit me servir comme un .attachments.add. et là, dans le code je bloque.
Par exemple dans le body, si le nom se trouve en colonne A, je fais Cells(ab, « A »), et ça reprend l’info du nom. Idem pour le mail par exemple en colonne B. Dans .to = , je fais Cells(ab, « B ») et ça reprend bien le mail renseigné dans la colonne B, pour le champ .to=.
Par contre j’ai un message d’erreur (débogage) si je fais attachments.add Cells(ab, « E »), alors que le chemin s’applique bien en colonne E par Thauthème.

A ce moment là, mettez le lien dans le body de cette manière :
"Please click<a href=" & Cells(ab, "E") & ">Here</a> to open the page"

@ bientôt

LouReeD

Bon je n'avais pas compris... Vous voulez mettre en pièce jointe le fichier qui se trouve être la cible du lien en colonne E, est ce bien cela ?

Voyez ceci :

 Set myAttachments = myItem.Attachments 
 myAttachments.Add Cells(ab,"E").Value, olByValue, 1, "Le Fichier" 

Bon tests !

@ bientôt

LouReeD

C’est bien cela.

Je teste et je tiens au courant ce mardi.

Bonne soirée

On attend le résultat du test alors.

@ bientôt

LouReeD

Bonjour LouReed,

Malheureusement, ton code, que j'ai adapté à mon fichier que j'utilise, ne fonctionne pas.

Je m'y prends sans doute mal dans le paramétrage.

Merci pour ton aide.

Bonsoir,

vu sur le net :

Private Sub ExempleNewMail()
    Dim appOutlook As Outlook.Application
    Set appOutlook = Outlook.Application
    Dim MESSAGE As Outlook.MailItem
    Dim objRecipient As Outlook.Recipient

    Set MESSAGE = appOutlook.CreateItem(olMailItem)
    With MESSAGE
        .Subject = "Mon Objet"

        <i>'Soit on ajoute un Corps en TEXTE BRUT</i>
        .BodyFormat = olFormatPlain
        .Body = "Voici le coprs du Mail" & vbCr & " A la ligne"

        <i>'Soit on ajoute un Corps en HTML</i>
        .BodyFormat = olFormatHTML
        .HTMLBody = "<html><body> <font face=""arial""><p>Bonjour,</p><p>Ceci est un exemple de Message HTML</p><p>Il faut utiliser des balises HTML pour formater le texte.</p><p>En <strong>gras</strong>, <em>Italic</em>, <u>Souligné</u></p><BR><p>Je suis passé à la ligne</p><p>Voici un lien hypertexte.</p>" & _
                    "<a href=""mailto:Joe.User@MyCompany.com"">Joe User</a></font></body></html>"

        <i>'Ajout d'un destinataire principal</i>
        Set objRecipient = .Recipients.add("toto@toto.com")
        objRecipient.Type = olTo    <i>'olBCC, olCC, olOriginator ou olTo.</i>
        objRecipient.Resolve

        <i>'Ajout d'un destinataire en copie</i>
        Set objRecipient = .Recipients.add("titi@toto.com")
        objRecipient.Type = olCC    <i>'olBCC, olCC, olOriginator ou olTo.</i>
        objRecipient.Resolve
        <i>'</i>
        <i>'Ajout d 'une PJ</i>
        Dim MaPJ
        MaPJ = "c:\temp\monPDF.PDF"
        <i>'on verifie d'abord qu'elle existe.</i>
        If DIR(MaPJ) <> "" Then
            .Attachments.add MaPJ
        End If

        <i>'ajout ar lecture</i>
        .ReadReceiptRequested = True

        <i>'Soit je l'affiche</i>
        .Display
        <i>'Soit je l'envoi</i>
        <i>'.Send</i>
    End With
End Sub

il suffit de remplacer le chemin du fichier qui est en "dur" par la valeur de la cellule colonne E.
A priori cela fonctionne !

@ bientôt

LouReeD

Rechercher des sujets similaires à "ouvrir explorateur fichier clic"