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 :

[VBA-E] Bouton parcourir pour sélectionner un fichier


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 60
    Points : 50
    Points
    50
    Par défaut [VBA-E] Bouton parcourir pour sélectionner un fichier
    Bonjour,

    J'essai de faire un bouton parcourir dans une UserForm, cependant, ça ne fonctionne pas.
    J'ai créé une nouvelle form avec un bouton et j'ai utilisé ce code : http://vb.developpez.com/faq/?page=Fichiers#select_rep

    Cependant, quand je clique sur le bouton, j'ai :

    Erreur de compilation:
    Membre de méthode ou de données introuvable.
    Quel est le souci ?

    Merci d'avance !

    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
    Private Const BIF_RETURNONLYFSDIRS = 1
    Private Const BIF_DONTGOBELOWDOMAIN = 2
    Private Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BrowseInfo) As Long
    Private Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, _
        ByVal lpBuffer As String) As Long
    Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpString1 As String, _
        ByVal lpString2 As String) As Long
    Private Type BrowseInfo
        hWndOwner As Long
        pIDLRoot As Long
        pszDisplayName As Long
        lpszTitle As Long
         ulFlags As Long
        lpfnCallback As Long
        lParam As Long
        iImage As Long
    End Type
    Public Function SelectFolder(Titre As String, Handle As Long) As String
    Dim lpIDList As Long
    Dim strBuffer As String
    Dim strTitre As String
    Dim tBrowseInfo As BrowseInfo
    strTitre = Titre
    With tBrowseInfo
        .hWndOwner = Handle
        .lpszTitle = lstrcat(strTitre, "")
        .ulFlags = BIF_RETURNONLYFSDIRS + BIF_DONTGOBELOWDOMAIN
    End With
    lpIDList = SHBrowseForFolder(tBrowseInfo)
    If (lpIDList) Then
        strBuffer = String(260, vbNullChar)
        SHGetPathFromIDList lpIDList, strBuffer
        SelectFolder = Left(strBuffer, InStr(strBuffer, vbNullChar) - 1)
    End If
    End Function
     
    Private Sub CommandButton1_Click()
    MsgBox SelectFolder("Sélectionnez un répertoire :", Me.Hwnd)
    End Sub

  2. #2
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 109
    Points : 47
    Points
    47
    Par défaut
    Salut , j'ai pas tout relu ton code , mais moi j'utilise celui la ... il s'applique a un bouton CommandButton1


    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
     
    Option Explicit
    Private Const BIF_RETURNONLYFSDIRS = 1
    Private Const BIF_DONTGOBELOWDOMAIN = 2
    Private Const MAX_PATH = 260
    Private Declare Function FindExecutable Lib "shell32.dll" Alias "FindExecutableA" _
    (ByVal lpFile As String, ByVal lpDirectory As String, _
    ByVal lpResult As String) As Long
     
    Private Declare Function SHBrowseForFolder Lib _
    "shell32" (lpbi As BrowseInfo) As Long
    Private Declare Function SHGetPathFromIDList Lib _
    "shell32" (ByVal pidList As Long, ByVal lpBuffer _
    As String) As Long
    Private Declare Function lstrcat Lib "kernel32" _
    Alias "lstrcatA" (ByVal lpString1 As String, ByVal _
    lpString2 As String) As Long
    Private Type BrowseInfo
       hWndOwner As Long
       pIDLRoot As Long
       pszDisplayName As Long
       lpszTitle As Long
       ulFlags As Long
       lpfnCallback As Long
       lParam As Long
       iImage As Long
    End Type
    Dim sBuffer As String
     
     
    Sub CommandButton1_Click()
     
    Dim lpIDList As Long ' Declare Variables
    Dim szTitle As String
    Dim tBrowseInfo As BrowseInfo
    szTitle = "Clic sur le repertoire voulu"
     
    With tBrowseInfo
        .lpszTitle = lstrcat(szTitle, "")
       .ulFlags = BIF_RETURNONLYFSDIRS + BIF_DONTGOBELOWDOMAIN
    End With
    lpIDList = SHBrowseForFolder(tBrowseInfo)
    If (lpIDList) Then
       sBuffer = Space(MAX_PATH)
       SHGetPathFromIDList lpIDList, sBuffer
       sBuffer = Left(sBuffer, InStr(sBuffer, vbNullChar) - 1)
       'MsgBox sBuffer
    End If
        Controls("TextBoxChemin") = sBuffer
     
    ' LA SUITE C LA RECHERCHE DES FICHIERS DANS LE CHEMIN DONNE
    Dim Compteur1 As Integer
    Dim ObjetTrouve As FileSearch
    Dim ListeFichiers As String
    Dim Dossier As String
    Dim response As String
    Dim tbox As String
    Dim compte As Integer
     
    Dossier = sBuffer 'InputBox("Indiquez le répertoire à afficher", "Liste de fichiers", CurDir())
     
    If Dossier = "" Then
         MsgBox ("Opération annulée.")
    End If
    ListeFichiers = Dossier & Chr(13) & Chr(13)
    Set ObjetTrouve = Application.FileSearch
    With ObjetTrouve
        .NewSearch
        .LookIn = Dossier
        .SearchSubFolders = False
        .Filename = "*.xls"
        .Execute
    End With
    compte = 0
    If ObjetTrouve.FoundFiles.Count > 0 Then
        For Compteur1 = 1 To ObjetTrouve.FoundFiles.Count
     
            response = MsgBox("Voulez vous que" & ObjetTrouve.FoundFiles(Compteur1) & " soit dans la liste", vbYesNo)
            If response = vbYes Then
                compte = compte + 1
                tbox = "TextBox" & compte
                Controls(tbox) = ObjetTrouve.FoundFiles(Compteur1)
            End If
     
     ListeFichiers = ListeFichiers & ObjetTrouve.FoundFiles(Compteur1) & Chr(13)
        Next
    Else
        ListeFichiers = ListeFichiers & "Pas de fichiers trouvés."
    End If
        MsgBox ListeFichiers
    Voila yen a beaucoup mais adapte le a ta sauce

    A bientot

  3. #3
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Citation Envoyé par $p00ky
    Bonjour,

    J'essai de faire un bouton parcourir dans une UserForm, cependant, ça ne fonctionne pas.
    J'ai créé une nouvelle form avec un bouton et j'ai utilisé ce code : http://vb.developpez.com/faq/?page=Fichiers#select_rep

    Cependant, quand je clique sur le bouton, j'ai :



    Quel est le souci ?

    Merci d'avance !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    andButton1_Click()
    MsgBox SelectFolder("Sélectionnez un répertoire :", Me.Hwnd)
    End Sub
    en VBA remplace Me.Hwnd par 0

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 60
    Points : 50
    Points
    50
    Par défaut
    Oh, merci le sonic pour ton script, il marche très bien !

    Cependant, il ouvre une fenêtre de sélection de répertoire, car tu veux choisir plusieurs fichiers d'un même dossier... Moi je ne veux qu'un seul fichier donc préfererais pareil, mais au lieu d'ouvir une boite de dialogue pour choisir un dossier, choisir directement un fichier.


    [EDIT] merci bbil, ça fonctionne effectivement
    Maintenant, pourrait-il y avoir pareil avec sélection de fichier comme j'ai expliqué juste au dessus dans ce même message ?

  5. #5
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    stfile = Application.GetOpenFilename

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 60
    Points : 50
    Points
    50
    Par défaut
    ... Désolé pour le dérangement (j'aurais pu trouver tout seul...) et merci beaucoup !

    Encore une petite question pour ma culture personelle (problème résolu mais c'est juste pour savoir)... dans ton script le sonic, comment faire pour rechercher plusieurs types de fichiers ?

    Ici : .Filename = "*.xls"
    Chercher par ex. les .xls et les .doc ?
    (autrement qu'en passant par deux recherches successives, c'est tricher )

  7. #7
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 109
    Points : 47
    Points
    47
    Par défaut
    Ben tu ne renseigne pas le .FileName et je pense qu'il te cherchera tout les fichiers...

    Voila content de t'avoir pu t'aider

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 06/03/2009, 11h26
  2. Réponses: 3
    Dernier message: 15/05/2008, 15h22
  3. [VBA-E]Bouton useform pour impression
    Par LeSqual dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/04/2006, 21h26
  4. Réponses: 4
    Dernier message: 25/11/2005, 11h25
  5. Réponses: 4
    Dernier message: 20/04/2005, 12h00

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