VBA Ouverture de fichier (fonction shell)

Bonjour le forum,

J'ai une question sur l'ouverture de fichier en vba, j'aimerai que quand on clique sur cellule de mon tableau colonne numéro d'offre, le windows explorer s'ouvre et m'affiche le répertoire du fichier contenant l'offre du client.

Pour l'instant ça va mais l'affaire se complique puisque le répertoire du fichier est sous cette forme:

O:\Logistique\Rapports\CEM\Doc_provisoires\2019\"Numero d'offre"-"Nomclient"

Le numéro d'offre se trouve dans chaque cellule de la colonne F et le nom du client dans chaque cellule de la colonne E.

Apres avoir fait des recherches, je pense qu'il faut que j'utilise l’événement Worksheet_BeforeDoubleClick (au double-clic) et que j'utilise ensuite la fonction shell:

Dim MonDossier As String

MonDossier = " O:\Logistique\Rapports\CEM\Doc_provisoires\2019\ "

Shell Environ("WINDIR") & "\explorer.exe " & MonDossier, vbNormalFocus

Donc il faudrait que quand je clique sur la cellule excel rajoute dans le lien de l'adresse la valeur de la cellule en F et la valeur de la cellule en E exemple F17 et E17 .

Bien cordialement

Bonjour Tiberias,

L'évènement "Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)" te permet de récupérer la cellule sur laquelle le double-clic a été fait : c'est la variable "Target". Tu récupères le valeur contenue dans "Target" (le numéro d'offre si j'ai bien suivi) puis tu récupères le nomclient en référençant "target.offset(,-1).Value" i.e. la valeur contenue dans la cellule juste avant celle cliquée..

J'espère avoir été clair...

Bonjour Tiberias,

L'évènement "Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)" te permet de récupérer la cellule sur laquelle le double-clic a été fait : c'est la variable "Target". Tu récupères le valeur contenue dans "Target" (le numéro d'offre si j'ai bien suivi) puis tu récupères le nomclient en référençant "target.offset(,-1).Value" i.e. la valeur contenue dans la cellule juste avant celle cliquée..

J'espère avoir été clair...

Bonsoir,

Merci de la réponse cependant je n'ai pas bien compris

il faut donc stocker arget.offset(,-1).Value dans une variable ?

et ensuite faire MonDossier = "O:\Logistique\Rapports\CEM\Doc_provisoires\2019\&target&-&variable&"

cordialement

Oui Tiberias, tu as bien compris. Cependant quelques rectifications dans ton code. Je propose :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Const cExtension = ".docx"          'GVS: ! A modifier suivant la nature du fichier d'offre
    Dim MonDossier As String, sNomClient As String, sNumOffre As String, sFilename As String
    Dim oFS As Object

    Set oFS = CreateObject("Scripting.FilesystemObject")
    MonDossier = "O:\Logistique\Rapports\CEM\Doc_provisoires\2019\"  'GVS: ! Attention aux espaces devant et derrière le chemin

     'On récupère le numéro d'offre et le nom du client
    sNumOffre = Target.Value
    sNomClient = Target.Offset(, -1).Value
    sFilename = MonDossier & sNumOffre & "_" & sNomClient & cExtension

    'On vérifie que le fichier existe dans le dossier indiqué
    If oFS.FileExists(sFilename) Then
        Shell Environ("WINDIR") & "\explorer.exe " & MonDossier, vbNormalFocus     'GVS: ! Cette commande ouvre l'explorateur Windows dans le dossier indiqué
    Else
        MsgBox "Le fichier '" & sFilename & "' n'existe pas!"
    End If
End Sub

Bonjour,

j'ai testé et y'a juste un petit problème c'est que c'est juste un dossier que j'aimerai ouvrir et non un un fichier docx ou pdf

J'ai enlevé le cExtension du sFilename mais ça ouvre toujours pas le fichier.

Bonjour Tiberias,

Tu ecris :

j'ai testé et y'a juste un petit problème c'est que c'est juste un dossier que j'aimerai ouvrir et non un un fichier docx ou pdf

J'ai enlevé le cExtension du sFilename mais ça ouvre toujours pas le fichier.

J'y relève une petite contradiction : ouvrir le fichier ou ouvrir le dossier?

Si c'est le dossier que tu veux ouvrir, le code tel quel fait le job...

Oui pardon j'aimerai juste ouvrir le dossier mais ça me met qu'il existe pas alors qu'il existe bien

En ce cas, si c'est juste pour ouvrir le dossier "O:\Logistique\Rapports\CEM\Doc_provisoires\2019\", a quoi sert la récupération du numéro d'offre et du nom du client?

En ce cas, si c'est juste pour ouvrir le dossier "O:\Logistique\Rapports\CEM\Doc_provisoires\2019\", a quoi sert la récupération du numéro d'offre et du nom du client?

Car dans "O:\Logistique\Rapports\CEM\Doc_provisoires\2019\" se trouve cette liste de dossiers et en recupérant le numero d'offre et le nom client j'aimerai ouvrir le dossier correspondant dans la liste.

izjsozf

J'ai pigé...

Dans ce cas, le code sera:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim MonDossier As String, sNomClient As String, sNumOffre As String, sFoldername As String
    Dim oFS As Object

    Set oFS = CreateObject("Scripting.FilesystemObject")
    MonDossier = "O:\Logistique\Rapports\CEM\Doc_provisoires\2019\"  'GVS: ! Attention aux espaces devant et derrière le chemin

     'On récupère le numéro d'offre et le nom du client
    sNumOffre = Target.Value
    sNomClient = Target.Offset(, -1).Value
    sFoldername = MonDossier & sNumOffre & "_" & sNomClient

    'On vérifie que le dossier existe
    If oFS.FolderExists(sFoldername) Then
        Shell Environ("WINDIR") & "\explorer.exe " & sFoldername, vbNormalFocus  'GVS: ! Cette commande ouvre l'explorateur Windows dans le dossier indiqué
    Else
        MsgBox "Le dossier '" & sFoldername & "' n'existe pas!"
    End If

End Sub

ça marche youpi !!!! Un très grand MERCI Gerard, Excellente après-midi à toi !

Edit: Ah si une dernière question, comment je fais dans le code pour restreindre le double clic de l'evenement que sur la colonne F car actuellement on peut double clic partout.

Il faut simplement vérifier que le "Target" est bien en colonne "F", sion, on ne fait rien. Ce qui donne :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim MonDossier As String, sNomClient As String, sNumOffre As String, sFoldername As String
    Dim oFS As Object

    'On vérifie que le double-clic a été fait en colonne "F"
    If Target.Column = 6 Then  ' 6 c'est la colonne "F"
        Set oFS = CreateObject("Scripting.FilesystemObject")
        MonDossier = "O:\Logistique\Rapports\CEM\Doc_provisoires\2019\"  'GVS: ! Attention aux espaces devant et derrière le chemin

         'On récupère le numéro d'offre et le nom du client
        sNumOffre = Target.Value
        sNomClient = Target.Offset(, -1).Value
        sFoldername = MonDossier & sNumOffre & "_" & sNomClient

        'On vérifie que le dossier existe
        If oFS.FolderExists(sFoldername) Then
            Shell Environ("WINDIR") & "\explorer.exe " & sFoldername, vbNormalFocus  'GVS: ! Cette commande ouvre l'explorateur Windows dans le dossier indiqué
        Else
            MsgBox "Le dossier '" & sFoldername & "' n'existe pas!"
        End If
    End If
End Sub

Génial merci !!!!

Rechercher des sujets similaires à "vba ouverture fichier fonction shell"