XL 2019 Code pour la boîte Ouvrir

AIXELS

XLDnaute Occasionnel
Bonjour à tous les amis du Forum. :)
Je reviens vers vous une fois de plus pour vous demander
le code pour ouvrir la boîte de dialogue "Ouvrir"
voir fichier joint
et arriver au répertoire spécifié sans avoir à choisir le lecteur, le
répertoire, le ou les sous-répertoires et arriver directement sur
le répertoire spécifié à savoir :
D:\M_TRAVAIL\SAUVEGARDES\FICHIERS\
et ce, en cliquant sur l'icône PDF affectée à la macro ci-dessous.
Voir le fichier joint.

Par avance merci.
Bien cordialement.

Actuellement, j'ai ce code qui fonctionne très bien
mais qui m'oblige à aller sur D: le répertoire TRAVAIL, SAUVEGARDES, FICHIERS
et sélectionner le fichier avec l'extension .PDF pour l'envoyer par mail, pour
ce faire, je tape "=" sur la cellule F2 ou G2 pour insérer le nom du fichier avec
le chemin complet.


Sub LeFichier()
Dim file_path As String
file_path = Application.GetOpenFilename(MultiSelect:=False)
If file_path <> "False" Then
Selection.Value = file_path
End If
End Sub
 

Pièces jointes

  • BOITE OUVRIR.jpg
    BOITE OUVRIR.jpg
    104 KB · Affichages: 9
  • Aperçu tableau d'envoi mail.jpg
    Aperçu tableau d'envoi mail.jpg
    130.5 KB · Affichages: 8

xUpsilon

XLDnaute Accro
Bonjour,

Quelque chose comme ceci :
VB:
Dim fileName

ChDrive "D:"
ChDir "D:\M_TRAVAIL\SAUVEGARDES\FICHIERS\"

fileName = Application.GetOpenFilename(MultiSelect:=False)

If fileName <> "False" Then
    Selection.Value = fileName
End If

Bonne journée,
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Aixels,
Si j'ai bien compris :
VB:
Sub OuvrirSurDossier()
    Dim fld As FileDialog, Mondossier$
    racine = "C:\Users\PC_PAPA\Desktop\"  ' Ajuster chemin désiré
    Mondossier = Dir(racine, vbDirectory)
    If Mondossier <> "" Then
        Set fld = Application.FileDialog(msoFileDialogOpen)
        With fld
            .InitialFileName = (racine & Mondossier & "\*.pdf")
            .Show
        End With
    End If
End Sub
 

AIXELS

XLDnaute Occasionnel
Bonjour @sylvanu
Merci pour ta réponse.
J'ai un problème, avec un message d'erreur :
1680688813682.png

code adapté :
Sub LeFichier()

Dim fld As FileDialog, Mondossier$
racine = "D:\M_TRAVAIL\SAUVEGARDES\FICHIERS\"
Mondossier = Dir(racine, vbDirectory)
If Mondossier <> "" Then
Set fld = Application.FileDialog(msoFileDialogOpen)
With fld
.InitialFileName = (racine & Mondossier & "\*.pdf")
.Show
End With
End If
End Sub

Je supprime " Option Explicit ", rien ne se passe
Merci pour ton aide.
 
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
Supprimez la ligne Dim.
Si ca marche c'est qu'il y a un mauvais typage.
Mais sur mon PC ca marche.
quand je teste votre macro :
VB:
Sub LeFichier()
    Dim fld As FileDialog, Mondossier$
    racine = "D:\M_TRAVAIL\SAUVEGARDES\FICHIERS\"
    Mondossier = Dir(racine, vbDirectory)
    If Mondossier <> "" Then
        Set fld = Application.FileDialog(msoFileDialogOpen)
        With fld
            .InitialFileName = (racine & Mondossier & "\*.pdf")
            .Show
        End With
    Else
        MsgBox "Mondossier est vide."
    End If
End Sub
Il me dit que MonDossier est vide, ce qui veut dire que chez vous la variable Racine n'est pas la bonne. Vérifiez le chemin.
Dans l'explorateur, allez sur votre dossier. si vous cliquez sur la barre d'adresses vous avez le chemin auquel vous ajoutez le dernier "\". ( ça peut éviter des erreurs de syntaxe )
1680699318801.png
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
Bonjour juste en passant
VB:
Sub LeFichier()
    Dim fld As FileDialog, Racine$, Fichier$                'variable
    Racine = "D:\M_TRAVAIL\SAUVEGARDES\FICHIERS"            'chemin dossier de base
    If Dir(Racine, vbDirectory) = "" Then Exit Sub          'si le chemin n'existe pas bye!bye!
    Set fld = Application.FileDialog(msoFileDialogOpen)     'creation de l'object dialog(early binding)
    
     fld                                                    'donc pour ce dialog
        .InitialFileName = (Racine & "\*.pdf")              'sa situation initiale est dans le dossier racine
        If .Show = -1 Then                                  'si le show renvoie (true soit -1)
            Fichier = .SelectedItems(1)                     'alors fichier = le chemin complet du fichier selectionné
        Else:  MsgBox "ouverture annulée !": Exit Sub       'si annulé chtaoh bye circulez  y rien a voir
        End If
    End With
    MsgBox Fichier                                          'au cas ou le show est true on affiche pour la demo  le chemin complet du fichier dans un msgbox
End Sub
 

AIXELS

XLDnaute Occasionnel
Bonjour,
Supprimez la ligne Dim.
Si ca marche c'est qu'il y a un mauvais typage.
Mais sur mon PC ca marche.
quand je teste votre macro :
VB:
Sub LeFichier()
    Dim fld As FileDialog, Mondossier$
    racine = "D:\M_TRAVAIL\SAUVEGARDES\FICHIERS\"
    Mondossier = Dir(racine, vbDirectory)
    If Mondossier <> "" Then
        Set fld = Application.FileDialog(msoFileDialogOpen)
        With fld
            .InitialFileName = (racine & Mondossier & "\*.pdf")
            .Show
        End With
    Else
        MsgBox "Mondossier est vide."
    End If
End Sub
Il me dit que MonDossier est vide, ce qui veut dire que chez vous la variable Racine n'est pas la bonne. Vérifiez le chemin.
Dans l'explorateur, allez sur votre dossier. si vous cliquez sur la barre d'adresses vous avez le chemin auquel vous ajoutez le dernier "\". ( ça peut éviter des erreurs de syntaxe )
Regarde la pièce jointe 1167591

J'ai respecté scrupuleusement vos remarques, j'ai toujours le message d'erreur.
En mettant 'Option Explicit en commentaire, comme cité sur mon message précédent
la boîte de dialogue s'ouvre bien, les fichiers sont bien visibles, je choisi un fichier, j'ai
l'aperçu et en cliquant ouvrir pour le copier, pas de message d'erreur, mis il n'est pas copié.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Moi, je répondais à la question posée : "Code pour la boîte Ouvrir" et rien d'autre.
La macro ouvre la boite de dialogue sur le bon dossier et avec le bon filtre des pdf. Comme demandé :
Je reviens vers vous une fois de plus pour vous demander
le code pour ouvrir la boîte de dialogue "Ouvrir" voir fichier joint
et arriver au répertoire spécifié sans avoir à choisir le lecteur, le
répertoire, le ou les sous-répertoires et arriver directement sur
le répertoire spécifié à savoir :
Maintenant, précisez ce que vous voulez faire.
en cliquant ouvrir pour le copier
En cliquant vous n'allez pas le copier, mais l'ouvrir.
Que voulez vous coller ? Le fichier ? Le nom du Ficher ?
 

AIXELS

XLDnaute Occasionnel
Re @sylvanu
En effet ouvrir la boîte de dialogue "Ouvrir", après sélectionner un fichier,
le copier dans la cellule active, et fermer la boîte dialogue.
Désolé, je me suis mal exprimé et je me suis référé à la macro que
j'avais joint et qui enchainait toutes ces actions.
Autant pour moi.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Ok, j'ai compris. ;)
En PJ un essai avec cette macro:
VB:
Sub RécupérerNomFichier()
    Dim fld As FileDialog, Mondossier$
    racine = "g:\Users\PC_PAPA\Documents\"  ' A ajuster
    Mondossier = Dir(racine, vbDirectory)
    If Mondossier <> "" Then
        Set fld = Application.FileDialog(msoFileDialogOpen)
        With fld
            .InitialFileName = (racine & Mondossier & "\*.pdf")
            If .Show = -1 Then
                T = Split(.SelectedItems(1), "\")
                ActiveCell = T(UBound(T))
            End If
        End With
    End If
End Sub
Le nom du fichier est collé dans la cellule active.
 

Pièces jointes

  • RécupererNomFichier.xlsm
    15.9 KB · Affichages: 7

patricktoulon

XLDnaute Barbatruc
re
oui et non
j'avais corrigé le inititialfilename dans mon post

@sylvanu regarde le msgbox
VB:
Sub RécupérerNomFichier()
    Dim fld As FileDialog, Mondossier$
    racine = "g:\Users\PC_PAPA\Documents\"  ' A ajuster
    'racine = "C:\Users\patrick1\Desktop\"
    Mondossier = Dir(racine, vbDirectory)
    If Mondossier <> "" Then
        Set fld = Application.FileDialog(msoFileDialogOpen)
        With fld
            .InitialFileName = (racine & Mondossier & "\*.pdf")'ici racine suffit
            MsgBox racine & Mondossier & "\*.pdf"
            If .Show = -1 Then
                T = Split(.SelectedItems(1), "\")
                ActiveCell = T(UBound(T))
            End If
        End With
    End If
End Sub

ne pas confondre un
x= dir chemin,vbdirectory)
et un
x=dir(chemin &"\*.*)

le dir vbdirectory renvoi le nom du premier dossier si il y a des subfolder
ou
l
e nom du dossier sil il n'y a pas de subfolder
si il n'y a pas de subfolder le premier dossier se nomme "." et est inexploitable par vba c'est un dossier system virtuel

le dir fichier renvoie juste le nom du premier fichier

le initialfilename du dialog attend un chemin de dossier
 

Discussions similaires

Réponses
2
Affichages
284

Statistiques des forums

Discussions
312 189
Messages
2 086 031
Membres
103 101
dernier inscrit
CyberAlex93