IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

ouvrir boite de dialogue avec repertoire dejà predefini [XL-2019]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Data_Analyst
    Inscrit en
    Décembre 2020
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Data_Analyst

    Informations forums :
    Inscription : Décembre 2020
    Messages : 32
    Points : 33
    Points
    33
    Par défaut ouvrir boite de dialogue avec repertoire dejà predefini
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Dim xxx As FileDialog
     
    Set xxx = Application.FileDialog(msoFileDialogFolderPicker)
        With xxx
                .InitialFileName = "\\***\***\03_CLIENTS RA_Offres de prix_Contrats\01- DEVIS CLIENTS"
                .Title = "Sélectionner un dossier"
    End with
    Bonjour, j'ai mis ce code pour ouvrir une boite de dialogue avec le chemin du répertoire voulu, sauf que comme .InitialFileName ne sélectionne que le nom du dossier, la boite de dialogue ne s'ouvre pas avec le répertoire que je veux.

    Quelqu'un sait-il comment faire si c'est possible svp ?Nom : Sans titre.jpg
Affichages : 157
Taille : 139,0 Ko

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 313
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 313
    Points : 1 919
    Points
    1 919
    Par défaut
    Salut,

    N'oublie pas l'anti-slash terminal dans le chemin, sinon ca fait des bizarreries:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set xxx = Application.FileDialog(msoFileDialogFolderPicker)
    With xxx
        .InitialFileName = "\\***\***\03_CLIENTS RA_Offres de prix_Contrats\01- DEVIS CLIENTS\"
    PS: Si le dossier n'existe pas, la boite de dialogue s'ouvre avec le chemin par défaut définit par le system.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Data_Analyst
    Inscrit en
    Décembre 2020
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Data_Analyst

    Informations forums :
    Inscription : Décembre 2020
    Messages : 32
    Points : 33
    Points
    33
    Par défaut @deedolith
    l'antislash ne change rien !
    Sans antislash, la fenêtre s'ouvre avec le nom du dossier mais c'est juste le nom que j'ai moi-même crée. Je ne veux pas ça, je souhaite que la fenêtre s'ouvre sur le répertoire que je veux. J'ai pu voir un code C ou ça fonctionne mais j'ai essayé avec vba, ça ne fonctionne pas !
    En faite, il faut parametrer la boite de dialogue sous windows pour qu'il s'ouvre avec le repertoire que je veux , ex "mes documents" ou "program files" ..., sauf qu'il faut le faire en vba donc j'ignore complètement si c'est possible et si oui comment faire.
    Merci pour vos réponses!!!!! ca rendrait service à plus d'un(e)

  4. #4
    Membre expérimenté
    Inscrit en
    Décembre 2002
    Messages
    836
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 836
    Points : 1 320
    Points
    1 320
    Par défaut
    Salut, teste ceci, j'appelle la méthode .Show pour afficher la boîte de dialogue.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub OpenFolderDialog()
        Dim xxx As FileDialog
     
        Set xxx = Application.FileDialog(msoFileDialogFolderPicker)
        With xxx
            .Title = "Sélectionner un dossier"
            .InitialFileName = "\\***\***\03_CLIENTS RA_Offres de prix_Contrats\01- DEVIS CLIENTS\"
            If .Show = -1 Then ' Si l'utilisateur sélectionne un dossier
                MsgBox "Le dossier sélectionné est : " & .SelectedItems(1)
            Else
                MsgBox "Aucun dossier sélectionné"
            End If
        End With
    End Sub

  5. #5
    Membre éclairé Avatar de Valtrase
    Homme Profil pro
    Jeune retraité...
    Inscrit en
    Janvier 2016
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Jeune retraité...
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2016
    Messages : 401
    Points : 701
    Points
    701
    Par défaut
    Bonjour à tous,
    En faite, il faut parametrer la boite de dialogue sous windows pour qu'il s'ouvre avec le repertoire que je veux , ex "mes documents" ou "program files"
    Pour ce faire il vous faut une fonction qui utilise les API Windows.
    • D'abord il faut créer un module que vous nommerez Scriptings.
    • Ensuite vous collez dans ce module le code ci-dessous.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    '————————   DECLARATION DES FONCTIONS API DE SPECIALS FOLDER   ——————————————————————————————————————————————————————
    'Déclaration en 64 ou 32 bits
    #If VBA7 Then
        Private Declare PtrSafe Function SHGetPathFromIDList _
                                         Lib "shell32.dll" _
                                         Alias "SHGetPathFromIDListA" ( _
                                         ByVal pidl As LongPtr, _
                                         ByVal pszPath As String) _
                                         As Boolean
        Private Declare PtrSafe Function SHGetSpecialFolderLocation _
                                         Lib "shell32.dll" ( _
                                         ByVal hwndOwner As LongPtr, _
                                         ByVal nFolder As Long, _
                                         pidl As ITEMIDLIST) _
                                         As LongPtr
        Private Type SHITEMID
            SHItem As LongPtr
            itemID() As Byte
        End Type
     
    #Else
        Private Declare Function SHGetPathFromIDList _
                                Lib "shell32.dll" _
                                Alias "SHGetPathFromIDListA" ( _
                                ByVal pidl As Long, _
                                ByVal pszPath As String) _
                                As Boolean
     
        Private Declare Function SHGetSpecialFolderLocation _
                                Lib "shell32" ( _
                                ByVal hwndOwner As Long, _
                                ByVal nFolder As Long, _
                                shidl As ITEMIDLIST) _
                                As Long
     
        Private Type SHITEMID
            SHItem As Long
            itemID() As Byte
        End Type
    #End If
     
    Private Type ITEMIDLIST
        shellID As SHITEMID
    End Type
     
    '————————   ENUMS POUR SPECIALS FOLDERS   —————————————————————————————————————————————————————————————————————————————
    Public Enum vaDossier
        ApplicationDatas = 26
        Bureau = 16
        BureauCommun = 25
        Cookies = 33
        Demarrer = 11
        DemarrerCommun = 22
        DemarrerDemarrage = 7
        DemarrerDemarrageCommun = 24
        DemarrerMenuDemarrer = 29
        DemarrerProgrammes = 2
        DemarrerProgrammesCommun = 23
        Documents = 5
        DocumentsCommuns = 46
        DocumentsRecents = 8
        DossierLocal = 28
        EnvoyerVers = 9
        Favoris = 6
        FavorisCommuns = 1
        FichierInternetTemporaires = 32
        Historique = 34
        Images = 39
        ImagesPubliques = 54
        MesFavories = 31
        Modeles = 21
        MusiquePublique = 53
        Musiques = 13
        Polices = 20
        ProgrammeData = 35
        Programmes = 38
        RaccourcisImprimantes = 27
        RaccourcisReseau = 19
        Utilisateur = 40
        Videos = 14
        VideosPubliques = 55
        Windows = 36
        WindowsSysteme = 37
        WindowsSYSWOW = 41
        WindowsTemplates = 45
    End Enum
     
    '@Description "Retourne le chemin d'un dossier spécial windows"
    Public Function getSpecialFolderPath(ByVal SpecialFolder As vaDossier) As String
        Dim localPath As String
        Dim dtuID As ITEMIDLIST
     
    #If VBA7 Then
            Dim lngRes As LongPtr
    #Else
            Dim lngRes As Long
    #End If
     
        ' // Chercher le Bureau virtuel.
        lngRes = SHGetSpecialFolderLocation(0&, SpecialFolder, dtuID)
     
        If lngRes = 0 Then                           ' Pas d'erreur...
            localPath = String$(512, Chr$(0))
            lngRes = SHGetPathFromIDList(dtuID.shellID.SHItem, localPath)
            If lngRes Then getSpecialFolderPath = Left$(localPath, _
                                                        InStr(localPath, Chr$(0)) - 1)
        End If
    End Function
    Pour l'appel de la fonction c'est comme ceci (Pour par exemple le répertoire du menu démarrer) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub test2()
        MsgBox Scriptings.getSpecialFolderPath(Demarrer)
    End Sub
    Notez, que l'utilisation d'une Enumération facilite la programmation, et évite de connaître les correspondances long des dossiers. Exemple ci-dessous :
    Nom : 000554.png
Affichages : 77
Taille : 6,6 Ko
    nb: pour ma part je ne suis pas adepte des API Windows. (VBA ne contrôle pas la gestion d'erreurs de celles-ci)

    Edit :
    Donc dans vôtre cas on peut adapter le code comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Function Test3() As String
        Dim xxx As FileDialog
     
        Set xxx = Application.FileDialog(msoFileDialogFolderPicker)
        With xxx
            ' // si l'on veux que le répertoire par défaut soit Mes Documents
            Dim InitialFolderPath As String
            InitialFolderPath = Scriptings.getSpecialFolderPath(Documents)
            .InitialFileName = InitialFolderPath
            .Title = "Sélectionner un dossier"
            If .Show Then
                Test3 = .SelectedItems(1)
            Else
                Test3 = ThisWorkbook.Path
            End If
        End With
    End Function
    Jean-Paul sous Office 365 et Windows 10/11 (Intel I7 16Go)

    Si vous avez trouvé réponse à votre question penser à la passer en Vous avez aimé la discussion alors un fait toujours plaisir.
    Le savoir n'a de valeur que s'il est partagé.
    La vérité de demain se nourrit de l'erreur d'hier. Antoine de Saint-Exupéry

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 313
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 313
    Points : 1 919
    Points
    1 919
    Par défaut
    Salut,
    Citation Envoyé par qvn83 Voir le message
    je souhaite que la fenêtre s'ouvre sur le répertoire que je veux. J'ai pu voir un code C ou ça fonctionne mais j'ai essayé avec vba, ça ne fonctionne pas !
    Heu ..
    Tes propos ne sont pas très cohérent.
    Si tu veux ouvrir la boite de dialogue sur un dossier existant, c'est bel et bien la propriété InitialFileName qu'il faut initialiser.
    S le dossier en question n'existe pas, la boite de dialogue s'ouvre sur le dossier par defaut (paramètre interne de Windows, qu'il vaut mieux ne pas toucher).

    Quand aux dossiers "particuliers", c'est l'objet Windows Script Host qui te les donneras:
    https://admhelp.microfocus.com/uft/e...382021d0aa.htm
    Les APIs lourdingues sont inutiles.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Data_Analyst
    Inscrit en
    Décembre 2020
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Data_Analyst

    Informations forums :
    Inscription : Décembre 2020
    Messages : 32
    Points : 33
    Points
    33
    Par défaut @deedolith
    En faite j'ai réessayé sans le antislash et ça fonctionne. Il m'a rendu fou vba, la syntaxe fonctionne parfois et parfois non, du coup je me prend la tête à chercher des solutions hypercompliqué pour rien.

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Data_Analyst
    Inscrit en
    Décembre 2020
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Data_Analyst

    Informations forums :
    Inscription : Décembre 2020
    Messages : 32
    Points : 33
    Points
    33
    Par défaut @Valrase
    Merci pour le précieux post !

    Savez vous comment on pourrait connaître le chiffre qui correspond à chaque dossier ouvert ? Dans vaDossier, l'ouverture est limité aux dossiers décrits, il n'y a que ça où il y en a d'autres?

  9. #9
    Membre éclairé Avatar de Valtrase
    Homme Profil pro
    Jeune retraité...
    Inscrit en
    Janvier 2016
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Jeune retraité...
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2016
    Messages : 401
    Points : 701
    Points
    701
    Par défaut
    Bonjour à tous,
    A ma connaissance, ils y sont tous, il y a les principaux dossiers utiles, quel dossier souhaitez vous ?
    Jean-Paul sous Office 365 et Windows 10/11 (Intel I7 16Go)

    Si vous avez trouvé réponse à votre question penser à la passer en Vous avez aimé la discussion alors un fait toujours plaisir.
    Le savoir n'a de valeur que s'il est partagé.
    La vérité de demain se nourrit de l'erreur d'hier. Antoine de Saint-Exupéry

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Data_Analyst
    Inscrit en
    Décembre 2020
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Data_Analyst

    Informations forums :
    Inscription : Décembre 2020
    Messages : 32
    Points : 33
    Points
    33
    Par défaut @Valtrase
    Citation Envoyé par Valtrase Voir le message
    Bonjour à tous,
    A ma connaissance, ils y sont tous, il y a les principaux dossiers utiles, quel dossier souhaitez vous ?
    Bonjour,

    Si par exemple j'ai plusieurs disques dur, ou plusieurs emplacements réseaux d'où ma question de manière générale, comment connaitre le numéro qui correspond à chaque emplacement Windows vu que cela peut être aléatoire.

    Citation personnelle : toute chose peut être expliquée, si on ne peut pas, alors son explication est qu'elle ne s'explique pas !

  11. #11
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 313
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 313
    Points : 1 919
    Points
    1 919
    Par défaut
    Heu,

    Les valeurs permettant d'obtenir les dossiers système spécifiques sont des constantes, leur valeur n'a de raison d'être qu'un identifiant.
    Le même identifiant identifiera toujours le même dossier (par exemple le dossier "Mes documents") quelque soit ton emplacement sur la machine.
    Connaitre leur valeur n'a aucune importance, contentes-toi d'employer leur nom, c'est lisible et c'est tout ce qui compte.

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Data_Analyst
    Inscrit en
    Décembre 2020
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Data_Analyst

    Informations forums :
    Inscription : Décembre 2020
    Messages : 32
    Points : 33
    Points
    33
    Par défaut @deedolith
    D'accord, il me reste qu'à faire des test alors, merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2010] Impossible d'ouvrir une boîte de dialogue avec un client léger
    Par MAO2000 dans le forum VBA Access
    Réponses: 9
    Dernier message: 20/05/2016, 12h21
  2. Réponses: 2
    Dernier message: 23/10/2009, 16h13
  3. Réponses: 5
    Dernier message: 26/02/2006, 21h32
  4. boîte de dialogue avec image de fond + texte
    Par Eugénie dans le forum MFC
    Réponses: 13
    Dernier message: 31/08/2004, 13h32
  5. Boite de dialogue avec opengl
    Par inddzen dans le forum OpenGL
    Réponses: 3
    Dernier message: 23/04/2004, 20h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo