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] Probleme d'api


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut [VBA-E] Probleme d'api
    hm, désolé pour le titre je savais pas quoi mettre

    Alors, je récupere un chemin grace à un explorateur windows avec le code suivant

    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
    'declarations
    Private Const BIF_RETURNONLYFSDIRS = 1
    Private Const BIF_DONTGOBELOWDOMAIN = 2
    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
     
     
     
    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
     
    Public Function RechercherDossier(Titre As String, Handle As Long) As String
    Dim lpIDList As Long
    Dim strBuffer As String
    Dim strTitre As String
    Dim tBrowseInfo As BrowseInfo
     
        With tBrowseInfo
            .hWndOwner = Handle
            .lpszTitle = lstrcat(strTitre, "")
            .ulFlags = BIF_RETURNONLYFSDIRS + BIF_DONTGOBELOWDOMAIN
        End With
     
        lpIDList = SHBrowseForFolder(tBrowseInfo)
     
        If (lpIDList) Then
            strBuffer = String(255, vbNullChar)
            SHGetPathFromIDList lpIDList, strBuffer
            RechercherDossier = Left(strBuffer, InStr(strBuffer, vbNullChar) - 1)
        End If
    End Function
    Là tout va bien !!

    Je voudrais maitenant trouver les fichiers texte dans ce dossier que j'ai choisi. J'ai à la base le chemin qui est un string dans un label d'un userform.
    J'ai trouvé ici ce code que j'ai mis dans un autre module:

    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
    '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
    
     
     
    Sub RechercheFichier()
    
    Dim lpIDList As Long ' Declare Variables
    Dim szTitle As String
    Dim sBuffer As String
    Dim tBrowseInfo As BrowseInfo
    szTitle = "Choisissez le répertoire :"
     
    With tBrowseInfo
        .lpszTitle = lstrcat(szTitle, "")
        .ulFlags = BIF_RETURNONLYFSDIRS + BIF_DONTGOBELOWDOMAIN
    End With
    lpIDList = SHBrowseForFolder(tBrowseInfo)
    
    
    Debug.Print lpIDList
    
    
    If (lpIDList) Then
        sBuffer = Space(MAX_PATH)
        SHGetPathFromIDList lpIDList, sBuffer
        sBuffer = Left(sBuffer, InStr(sBuffer, vbNullChar) - 1)
    End If
     
    'Recherche des fichiers dans le dossier
    Dim Compteur1 As Integer
    Dim ObjetTrouve As FileSearch
    Dim ListeFichiers As String
    Dim Dossier As String
    Dim response As String
     
    Dossier = sBuffer 'InputBox("Indiquez le répertoire à afficher", "Liste de fichiers", CurDir())
    
    If Dossier = "" Then
         Exit Sub
    End If
    ListeFichiers = ""
    Set ObjetTrouve = Application.FileSearch
    With ObjetTrouve
        .NewSearch
        .LookIn = Dossier
        .SearchSubFolders = False
        .Filename = "*.txt"
        .Execute
    End With
    
    
    If ObjetTrouve.FoundFiles.Count > 0 Then
        For Compteur1 = 1 To ObjetTrouve.FoundFiles.Count
            Menu.ListeTexte.AddItem ObjetTrouve.FoundFiles(Compteur1)
        Next
    End If
    
        
    End Sub
    je l'ai deja un peu modifié mais le probleme est que ce code debute lui aussi d'un explorateur pour selectionner le dossier contenant (et moi je voudrait qu'il cherche directement dans le chemin qui se trouve dans mon label)

    J'ai fait quelques tests et j'ai vu que cetai à cette ligne qu'il lancer l'explorateur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lpIDList = SHBrowseForFolder(tBrowseInfo)
    et que la fonction renvoyait un numero. J'ai vu que ce numero changeait à chaque execution

    là le seul moyen de faire ce que je veux (je pense) serait de realiser une fonction me permettant de trouver le numero du chemin qui se trouve dans mon label pour ainsi directement le fournir à ma sub RechercherFichier (et ainsi ne plus avoir à choisir le dossier qui contient les fichiers).

    J'espere avoir été clair

    bon j'ai deja fait quelques recherches mais là je patoge un peu

    le numero renvoyé est bien le "handle" ??

    merci de votre aide

  2. #2
    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
    je comprends pas ton probléme... dans ton second code il suffit de supprimer les lignes précédent le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'Recherche des fichiers dans le dossier
    et de modifier la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ...
    Dim response As String
     
    Dossier = RechercherDossier("Choisir répertoire", 0)
    
    
    If Dossier = "" Then
    ...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut
    hmhm,

    oui bah... oui...

    moi je cherchais pas plus loin que mon probleme

    Et fais pas trop ton malin d'accord !!


    merci bbil

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

Discussions similaires

  1. [VBA-E]Probleme pour relier API de bloomberg et VBA
    Par Mou dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 17/04/2007, 22h36
  2. [EXE] Problème avec Api
    Par Regis.C dans le forum Général Java
    Réponses: 5
    Dernier message: 14/03/2005, 12h09
  3. [VBA-E] problème avec le sendkeys
    Par darkpocket dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/02/2005, 15h25
  4. Probleme D'API WIN32 - NetServerEnum
    Par gnolfy dans le forum C++Builder
    Réponses: 1
    Dernier message: 22/11/2004, 21h39
  5. Probleme connection API C
    Par Biou Pink Powa dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 29/04/2004, 13h04

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