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 :

fonction recherche de fichiers


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 83
    Points : 60
    Points
    60
    Par défaut fonction recherche de fichiers
    Salut à tous
    J'ai le code d'une fonction pour rechercher des fichiers mais je ne le comprend pas, si quelqu'un pouvait m'expliquer le code j'en serai content

    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
    Private Function lfctFolderExists(aFolder As String) As Boolean
     
    Dim li_Index As Integer
     
    'Parcourt les éléments de la liste
     
    For li_Index = 0 To ListBoxResult.ListCount - 1
        'Si un des éléments porte le nom passé en paramètre, on sort en indiquant que l'élément est déjà présent
     
    If ListBoxResult.List(li_Index) = aFolder Then
            lfctFolderExists = True
            Exit Function
        End If
    Next li_Index
    End Function
    ce que je voudrais savoir, c'est à quoi sert les codes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For li_Index = 0 To ListBoxResult.ListCount - 1
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If ListBoxResult.List(li_Index) = aFolder Then
            lfctFolderExists = True
            Exit Function
        End If
    Next li_Index
    Voila je vous remercie tous et à très bientôt

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Pour t'explique, il faut partir de plus haut. Donne-nous le code qui t'a servi à remplir ta listbox (ListBoxResult) là on aura tout
    Sinon, ton code compare, dans une boucle, chaque index de la liste avec aFolder.
    Si ListBoxResult.List(No de la ligne dans la liste) = le nom (envoyé comme paramètre à la fonction - aFolder), la fonction renverra, à la procédure qui l'appelle, le boolean lfctFolderExists = True.
    For li_Index = 0 To ListBoxResult.ListCount - 1
    L'index d'une liste commence à 0
    Par contre, Listcount, qui compte le nombre de lignes dans une listbox, part de 1. Il existe donc un décalage entre Listindex de la dernière ligne de la liste et ListCount
    Si on mettait
    For li_Index = 0 To ListBoxResult.ListCount
    'ou
    Result = ListBoxResult.List(ListBoxResult.ListIndex.count)
    on aurait une erreur, cet index n'existant pas.
    Faut bosser !
    Mais tu as de meilleures indications dans L'aide en ligne
    Bonne soirée

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 83
    Points : 60
    Points
    60
    Par défaut
    salut ouskel'n'or
    Voici le reste de mon code qui me permet de faire la recherche sur mon bouton rechercher

    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
    Private Sub btnchercher_Click()
        Dim Fichier As String
     
        ListBoxResult.Clear  'on vide en premier
     
        'recherche dans un répertoire précis
        'Dir("C:\Documents and Settings\Vinc\Bureau\"): renvoie le premier fichier
        'de ce répertoire et parcour les suivants
     
     
    Fichier = Dir(Environ("USERPROFILE") & Application.PathSeparator & _
                    "Bureau" & Application.PathSeparator)
     
        Do While Fichier <> ""
        'UCase pour s'assurer d'une bonne comparaison entre les chaînes
            If UCase(Fichier) Like "*" & UCase(ZoneRech.Value) & "*.XLS" Then
                ListBoxResult.AddItem Fichier
            End If
            Fichier = Dir  ' Recherche suivante
        Loop
     
        'On spécifie l'Index à afficher seulement si la liste n'est pas vide
        If ListBoxResult.ListCount > 0 Then ListBoxResult.ListIndex = 0
    End Sub
    Par contre je n'ai pas tout à fait compris ce que tu disais à propos de:

    Citation:
    For li_Index = 0 To ListBoxResult.ListCount
    'ou
    Result = ListBoxResult.List(ListBoxResult.ListIndex.count)
    on aurait une erreur, cet index n'existant pas.
    Faut bosser !
    désolé mais je ne suis pas très fort en vba et j'ai beaucoup de mal

    Je te remercie pour ton aide et à très bientôt.

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Bonjour,

    Il y a pour moi deux choses à traiter :

    1) une appli à distribuer ne sait pas si, sur la machine d'accueil, le bureau s'rappelle réellement bureau (et pas Desktop, par exemple, comme ce serait le cas avec une machine anglaise) ...

    2) ce n'est pas ainsi que l'on liste avec Dir ...

    Essaye donc (avec ici un bouton de Commande Command1) ceci et dis-nous ...

    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
     
    ' tout en haut, dans la partie générale
     
     
    Option Explicit
    Private Type SHITEMID
        cb As Long
        abID As Byte
    End Type
    Private Type ITEMIDLIST
        mkid As SHITEMID
    End Type
    Private Declare Function SHGetSpecialFolderLocation Lib "shell32.dll" (ByVal hwndOwner As Long, ByVal nFolder As Long, pidl As ITEMIDLIST) As Long
    Private Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
     
     
    Private Sub Command1_Click()
        Dim r As Long, chemin As String, toto As String, monfiltre As String, fichiers As String
        Dim IDL As ITEMIDLIST
        r = SHGetSpecialFolderLocation(100, 0, IDL)
        toto = ""
        If r = 0 Then
            chemin = Space$(512)
            r = SHGetPathFromIDList(ByVal IDL.mkid.cb, ByVal chemin)
            toto = Left$(chemin, InStr(chemin, Chr$(0)) - 1)
        End If
        monfiltre = "*.XLS"
        fichiers = Dir(toto & "\" & monfiltre)
        Do While fichiers <> ""
          MsgBox fichiers
          fichiers = Dir
       Loop
    End Sub

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Citation Envoyé par isis1be Voir le message
    Par contre je n'ai pas tout à fait compris ce que tu disais à propos de
    Mon explication est dans là
    L'index d'une liste commence à 0
    Par contre, Listcount, qui compte le nombre de lignes dans une listbox, part de 1. Il existe donc un décalage entre l'index de la dernière ligne de la liste et ListCount
    Je reesplic'
    Dans le cas de ListIndex, tu as un tableau dont le premier indice commence à 0. L'index max est donc = au nombre d'index -1
    Comme si tu comptais de 0 à 9. Tu as 10 nombres
    Dans le cas de listcount, le décompte de tes lignes commence à 1. Mais le nombre de lignes est le même = 10
    Comme si tu comptais de 1 à 10. Tu as là aussi 10 nombres.

    Tu vois bien que si tu utilises Listcount pour connaître le du dernier Index de ta liste, tu dois faire Liscount -1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nb = ListBoxResult.Listcount -1
    et compter tes index depuis 0.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For NoIndex = 0 to ListBoxResult.Listcount -1
    Mais pour connaître le nombre d'item dans ta liste, ce sera
    ListBoxResult.Listcount tout court.
    Ceci dit, c'est l'aide en ligne qui un jour m'a renseigné mais c'est vrai, faut tout lire !
    Bonne journée.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 83
    Points : 60
    Points
    60
    Par défaut
    ok vais voir ca, je vous remercie à vous deux @++

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

Discussions similaires

  1. Réponses: 15
    Dernier message: 03/02/2009, 09h37
  2. fonction recherche de fichier
    Par yorukaze dans le forum Général Python
    Réponses: 4
    Dernier message: 25/09/2008, 16h15
  3. Réponses: 2
    Dernier message: 18/01/2008, 11h13
  4. Réponses: 3
    Dernier message: 06/10/2007, 08h24
  5. [VB]fonction rechercher. Fichier chm
    Par ptitesouris dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 31/07/2006, 12h01

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