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 :

Désordre avec macros de recherche récursive


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 17
    Points : 18
    Points
    18
    Par défaut Désordre avec macros de recherche récursive
    Bonjour,

    Je suis nouveau sur le forum et j'ai une question pointu pour les spécialistes du VBA. J'utilise plusieurs macros différentes pour lister depuis une feuille Excel 2013 , les sous-dossiers et leurs fichiers respectifs d'un dossier ciblé. Je récupère juste les noms des dossiers et des fichiers. L'arborescence se trouve sur un serveur Windows. j'ai constaté que le résultat de la recherche récursive ne respecte pas du tout l'ordre des dossiers et des fichiers de l'arborescence se trouvant sur le serveur. En revanche, lorsque je copie la même arborescence en local sur mon pc (windows 8, Excel 2013), la macro me présente parfaitement tous les dossiers et fichiers dans l'ordre de tri d'origine.

    Pourquoi cette différence ? Quelqu'un a t'il eu le même problème. Comment y remédier car au final la macro doit scanner des dossiers sur une zone d'échange du serveur et non sur mon PC en local. je sèche à ce niveau.

    J'ai fait le test avec une macro que j'ai trouvé sur le forum et j'obtiens le même résultat : la liste obtenu des sous-dossiers et fichiers (PDF) n'est pas dans l'ordre du tri d'origine lorsque la macro pointe sur un dossier du serveur. Par contre, le résultat est niquel lorsque la macro pointe sur une copie conforme de l'arborescence en local sur mon pc. Voici la macro de test :

    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
     
    Option Explicit
     
    Declare Function QueryPerformanceCounter Lib "Kernel32" (X As Currency) As Boolean
    Declare Function QueryPerformanceFrequency Lib "Kernel32" (X As Currency) As Boolean
     
    Dim NbFichiers As Long, NbDossiers As Long
    Dim Dep As Currency, Fin As Currency, Freq As Currency
     
    Private Sub Liste(ByVal sChemin As String, ByVal bSousDossier As Boolean)
    Dim FSO As Object, Dossier As Object, SousDossier As Object, Fichier As String
     
        Set FSO = CreateObject("Scripting.FileSystemObject")
        Set Dossier = FSO.GetFolder(sChemin)
     
        Fichier = Dir$(sChemin & "\*.*")
        Do While Len(Fichier) > 0
            NbFichiers = NbFichiers + 1
            With ShFichiers
                .Cells(NbFichiers, 1) = sChemin
                .Cells(NbFichiers, 2) = Fichier
            End With
            Fichier = Dir$()
            Application.StatusBar = "Dossiers : " & NbDossiers & "  Fichiers : " & NbFichiers
        Loop
     
        If bSousDossier Then
            For Each Dossier In Dossier.SubFolders
                NbDossiers = NbDossiers + 1
                Liste Dossier.Path, True
            Next Dossier
        End If
     
        Set Dossier = Nothing
        Set FSO = Nothing
    End Sub
     
    Sub Tst()
    Dim sChemin As String
        sChemin = ThisWorkbook.Path
        With Application.FileDialog(msoFileDialogFolderPicker)
            .InitialFileName = sChemin & "\"
            .Title = "Sélectionner un Dossier"
            .AllowMultiSelect = False
            .InitialView = msoFileDialogViewDetails
            .ButtonName = "Sélection Dossier"
            .Show
            If .SelectedItems.Count > 0 Then
                ShFichiers.Cells.Clear
                Application.ScreenUpdating = False
                Application.StatusBar = ""
                DoEvents
                QueryPerformanceCounter Dep
                NbFichiers = 0: NbDossiers = 0
     
                Liste .SelectedItems(1), True
     
                Application.ScreenUpdating = True
                QueryPerformanceCounter Fin: QueryPerformanceFrequency Freq
                Application.StatusBar = "Dossiers : " & NbDossiers & "  Fichiers : " & NbFichiers & " / " & Format(((Fin - Dep) / Freq), "0.00 s")
            End If
        End With
    End Sub
    Je précise que le nom d'un dossier ressemble à cela : 09016 filtres (UPLC-UV) et les noms des fichiers ressemble à celà : S42 RK0213L 68594 (KL MIT-T0).pdf. Merci pour vos réponses
    Mistral314

  2. #2
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Bonjour.

    Peut-etre ceci, mais sans conviction.

    EDIT: Ca devrait marcher. RDurupt dit que le FileSystemObject fonctionne bien sur un reseau.

    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
    Dim lig
    Dim Dest As Worksheet
     
    Sub tt4()
    Dim FileSystem As Object
    Set Dest = Worksheets("Feuil1")
    Dest.Cells.Clear
    lig = 0
    Repertoire = "C:\a_Rechercher\"
     
    Set FileSystem = CreateObject("Scripting.FileSystemObject")
    DoFolder FileSystem.GetFolder(Repertoire)
     
    End Sub
     
    Sub DoFolder(Folder)
        Dim SubFolder
        Dim File
        lig = lig + 1
        Dest.Cells(lig, 1) = Folder 'Folder.path
         'Lister les fichiers
        For Each File In Folder.Files
             lig = lig + 1
         Dest.Cells(lig, 1) = "    " & File.Path 'File.Name
        Next
         'Appel recursif vers les sous-repertoires
        For Each SubFolder In Folder.SubFolders
            DoFolder SubFolder
        Next
    End Sub
    Cordialement

    Docmarti.

  3. #3
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Moi, ce que j'en dis c'est qu'il n'y a aucune certitude que l'ordre d'affichage du résultat final soit l'ordre de lecture. Si tu veux mon opinion profonde sur le sujet la seule façon de s'approcher de l'ordre réel des fichiers c'est encore de les rechercher directement par l'API Windows. Autrement, tu n'as aucune certitude que Windows ou FSO n'a pas appliqué un tri quelconque en chemin. Et puis quand Windows enregistre un fichier, il enregistre où il y a de place et il ne se gêne pas pour les fragmenter en plusieurs parties disparates au besoin. L'organisation en dossiers et sous-dossiers n'est qu'une "carte géographique" pour faciliter la vie à l'utilisateur. Windows a ses propres paramètres et routines pour retrouver les fichier.

    Et puis VBA n'a rien de bien sérieux pour gérer la récursivité. VB.net oui, mais VB6-VBA non. FSO, je ne sais pas.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  4. #4
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut


    Bonjour, bonjour !

    Parmi les exemples VBA récursifs de ce forum, en voici un !
    Fonctionne bien en local, je ne garantis rien selon le réseau …

    Depuis le forum Excel, voir dans le sous-forum Contribuez parmi les contributions sur ce sujet, au moins trois …

    _________________________________________________________________________________________________________
    Je suis Paris, Nice, Bruxelles, Charlie, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  5. #5
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Une piste de plus

    Je m'étais fait cette petite proc il y a pas mal de temps mais jamais testé sur un réseau.
    Cette proc crée un décalage en fonction des dossiers et sous dossiers. Les dossiers sont sur fond jaune et si c'est un sous dossier, il est indiqué par une barre jaune sur la gauche (bordure sur la cellule de gauche) :
    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
     
    Dim J As Integer
    Dim Racine As Boolean
     
    Sub test()
     
        J = 0
        Racine = True
     
        ActiveSheet.UsedRange.Rows.Delete
     
        RecupDossiers "E:\" 'adapte le chemin
     
    End Sub
     
     
    Private Sub RecupDossiers(Dossier As String)
     
        Dim FSO As Object
        Dim Dos As Object
        Dim Fichier As Object
        Dim I As Integer
        Static DossierRacine As String
     
        'supprime le "\" de fin
        If Right(Dossier, 1) = "\" Then Dossier = Left(Dossier, Len(Dossier) - 1)
     
        If DossierRacine = "" Then DossierRacine = Dossier
     
        'crée l'objet FSO
        Set FSO = CreateObject("Scripting.FileSystemObject")
     
        'si le dossier n'existe pas
        If FSO.FolderExists(Dossier) = False Then
     
            MsgBox "Le dossier portant ce nom n'existe pas !"
            Exit Sub
     
        End If
     
        'si c'est le dossier racine
        If Racine = True Then
     
            J = 1
     
            Cells(J, 1) = Right(Dossier, Len(Dossier) - InStrRev(Dossier, "\"))
            Cells(J, 1).Font.Bold = True
            Cells(J, 1).Interior.ColorIndex = 27
     
            'récupère les fichiers contenus dans le dossier racine
            For Each Fichier In FSO.GetFolder(Dossier).Files
     
                J = J + 1
     
                Cells(J, 1) = Fichier.Name
     
            Next Fichier
     
            Racine = False
     
        End If
     
        'si c'est le lecteur, il n'y a pas de "\" donc, I doit être à 1 pour colonne A
        If InStr(Dossier, "\") = 0 Then I = 1 Else I = 0
     
        'boucle sur les dossiers
        For Each Dos In FSO.GetFolder(Dossier).SubFolders
     
            'défini I en recherchant les "\" afin de créer un décalage pour la hiérarchie
            I = UBound(Split(Replace(Dos, "\", ";"), ";")) - UBound(Split(Replace(DossierRacine, "\", ";"), ";")) + 1
     
            J = J + 1
     
            'récupère le nom du dossier et mets le nom en gras
            Cells(J, I) = Dos.Name
            Cells(J, I).Font.Bold = True
            Cells(J, I).Interior.ColorIndex = 27
     
            With Cells(J, I - 1).Borders(8)
     
                .LineStyle = xlContinuous
                .ColorIndex = 27
                .Weight = 4
     
            End With
     
     
            'évite l'erreur des fichiers interdits
            On Error Resume Next
     
            'récupère les fichiers contenus dans le dossier en cours
            For Each Fichier In Dos.Files
     
                J = J + 1
     
                Cells(J, I) = Fichier.Name
     
            Next Fichier
     
            'rappel de la proc pour chercher les dossiers enfants
            RecupDossiers Dossier & "\" & Dos.Name
     
        Next Dos
     
    End Sub

  6. #6
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 17
    Points : 18
    Points
    18
    Par défaut
    Merci à vous tous pour vos réponses, j'ai testé les différentes exemples de macros et mais à mon grand regret le résultat est le même. Pour vous confirmer la problématique dans une directory d'un lecteur réseau, les méthodes Itératives et récursives pour lister un répertoire donne un tri des dossiers et fichiers faussé, sauf pour le premier dossier en tête de liste. Avec FSO, dans un lecteur X \\serveur\partage le résultat de la liste donne par exemple :

    - 1,19,8,3, etc... impactant également l'ordre des fichiers du dossier

    alors que le même dossier et fichiers en local sur mon PC, donne bien le tri
    - 1,2,3,4,5 etc.... idem pour les fichier qui sont dans le même ordre 1,2,3,4,5

    Pourtant j'avais un espoir avec la commande CMD basique du style : dir x\\serveur\partage > c:\Temp\LaListe.txt /O:N
    Le commutateur O affiche les fichiers selon un tri spécifié : N qui fait le tri par Nom. Ça marche super bien comme je le veux, et j'ai bien la liste des dossiers et fichiers dans l'ordre originel. Mais c'est ingérable pour l'automatiser avec VBA.

    Donc la solution que j'ai retenu avec FSO c'est la copie pure et simple du dossier avec tous les sous-dossier et fichiers depuis le serveur\partage vers mon C:\Temp puis de retraiter avec une autre procédure la liste des dossiers et fichiers dans une feuille Excel. La macro de copie est la suivante :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub test()
    
    Set fs = CreateObject("Scripting.FileSystemObject")
    If Len(DIR("C:\Temp\Dossier", vbDirectory)) <> 0 Then
         fs.DeleteFolder ("C:\Temp\Dossier"), True
    End If
    
    fs.CopyFolder "\\serveur\partage\dossier1\dossier2\dossier3\dossierCible", "C:\Temp\Dossier", True
    
    'suite ..........
    Call MaSuiteProcedurePourEtablirLaListeDesDossierEtFichiersAvecUneMethodeRecursive
    End Sub
    Voilà, si vous avez des commentaires ou suggestions, je suis preneur. Comme disait clementmarcotte Windows conserve un certain mystère dans ses routines pour retrouver les fichier et dans mon cas mon problème n'a aucun rapport avec la taille des dossiers, ni leur attributs, peut être une gestion différentes de NTFS sur un serveur.
    Mistral314

  7. #7
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Ce genre de recherche "récursive" se traduit par un ordre de présentation des résultats différent selon que chaque dossier ne contient que des sous-dossiers ou que des fichiers ou qu'au contraire, certains dossiers et/ou sous-dossiers contiennent à la fois des sous-dossiers et des fichiers.
    La solution est alors de recenser les chemins complets, puis de les trier
    Une autre solution, un peu plus complexe, est de gérer complètement l'abondement d'une treeview.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 17
    Points : 18
    Points
    18
    Par défaut
    Bonsoir unparia, Merci pour ta réponse, oui ton raisonnement est bon, et pour la gestion d'un treeview tu parles de le faire le Treeview avec le contrôle depuis la boite à Outils ? Je n'y ai pas pensé.

    PS : Sinon, tu connais certainement la commande Dos TREE qui permet de faire un arbre ou une représentation graphique d'une arborescence. Je n'ai pas eu le résultat souhaité avec cette commande pour mon problème.

  9. #9
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Je crois que je n'ai pas été assez précis. Si tu utilises une treeview, il te faudra en gérer totalement toi-même l'abondement. Et ce ne sera certes pas à l'aide de la récursivité, mais totalement autrement : 1) ne lister que les dossiers et sous-dossiers (utiliser l'argument vbdirectory du la fonction DIR) , puis 2) abonder en noeuds, puis 3) revenir sur chacun d'eux pour y abonder les ficheirs éventuellement présents.
    C'est du boulot, c'est assez lent et sans réel grand intérêt.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 17
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par unparia Voir le message
    mais totalement autrement : 1) ne lister que les dossiers et sous-dossiers (utiliser l'argument vbdirectory du la fonction DIR) , puis 2) abonder en noeuds, puis 3) revenir sur chacun d'eux pour y abonder les ficheirs éventuellement présents.
    C'est du boulot, c'est assez lent et sans réel grand intérêt.
    J'ai testé l'argument vbdirectory du la fonction DIR mais ça marche pas avec la procédure si dessous. même topo. Quand tu parles d'abondement des fichiers tu peux préciser la méthode ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Test7()
        Dim X As Integer
        X = 1
        Path = "\\serveur\partage\dossier1\dossier2\dossierCible\"
        FirstDir = DIR(Path, vbDirectory)
        Do Until FirstDir = ""
          If (GetAttr(Path & FirstDir) And vbDirectory) = vbDirectory Then
            ActiveSheet.Cells(X, 1).Value = Path & FirstDir
            X = X + 1
          End If
          FirstDir = DIR()
        Loop
        End Sub

  11. #11
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Je n'ai pas accès à ton serveur pour voir ce qui ne va pas.
    Je ne vois pas pourquoi ton code (qui me parait bien et fonctionne bien sur mon PC), ne "marche pas" avec ton serveur.

    Je ne comprends pas ton second point :
    - le code t'a retourné une liste de chemins de dossiers. Ils sont les noeuds principaux
    - en les reprenant un à un ---> noeuds secondaires (si sous-dossiers) de sous-dossiers
    - reprendre les noeuds secondaires existants un à un ---> noeuds tertiairess (si sous-dossiers) de sous-dossiers
    etc ... jusqu'à plus soif
    - reprendre ensuite chaque noeud (un chemin de dossier ou de sous-dossier, donc) et y ajouter les seuls fichiers qu'il contient (argument vbnormal)

    C'est du boulot, c'est certain !
    Bon courage
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  12. #12
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    La question la plus importante devient celle-ci:

    Qu'est-ce qu'il y a de si important que cela que le nom du fichier soit à la ligne 1, la ligne 65536 ou la ligne 40 ?


    C'est bien plus important qu'il soit là que sa position dans la liste.

    D'autant plus, que VB-VBA peut utiliser deux types de tris qui donnent obligatoirement, ou presque, des résultats différents.

    Dans un tri de type "binaire" (0ption compare binary en VB-VBA), a, à, â et A ont différent et ne son pas regroupés parce qu'ils n'ont pas le même code ascii, Unicode ou ansi.

    Dans un tri de type "texte" (0ption compare text en VB-VBA), a, à, â et A sont regroupés et triés selon un ordre qui dépend de l'algorithme de tri implanté.

    Et puis, si tu veux mon avis profond sur cette histoire-là, tu as deux choix, tu gardes le résultat que tu obtiens et tu fais avec. Ou bien tu passes des heures et des heures à créer et déboguer "Le" ou ze comme vous dites en France programme de tri qui va donner exactement la liste que tu veux avoir et dans l'ordre exact jusqu'à la dernière lettre du dernier nom de fichier.

    Et puis, je ne suis même pas prêt à jurer que la version de Windows ne vas pas influencer l'ordre de tri.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  13. #13
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 17
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par clementmarcotte Voir le message
    La question la plus importante devient celle-ci:

    Qu'est-ce qu'il y a de si important que cela que le nom du fichier soit à la ligne 1, la ligne 65536 ou la ligne 40 ?


    C'est bien plus important qu'il soit là que sa position dans la liste.
    D'accord avec toi mais En fait c'est une exigence du client que ce soit identique à la cartographie de la source car à l’intérieur des dossiers se trouvent des PDF qui sont classés par semaine en ordre croissant. Et le classement des dossiers source doit être identique à la réception dans la feuille Excel.
    Actuellement le répertoire contient 20 dossiers et une centaine de document PDF. Après traitement d'autres moulinette font des rapports et des analyses de traitement à N+1 N+2 etc....

    dossier1 ---> 01002 Tartenpion CV (IC-UV)
    fichier -----> S28 RV7800W 41348 (AV-T36).pdf
    fichier -----> S28 RV9900Z 41348 (AV-T36).pdf

    dossier2 ---> 01007 TarteFraise Zn (IC-UV)
    fichier -----> S30 RV7800W 41348 (AV-T36).pdf
    fichier -----> S31 RV9900Z 41348 (AV-T36).pdf
    fichier ----->...........................................
    fichier ----->...........................................

  14. #14
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Tu pourrais les trier avec la valeur FileDateTime.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LaDate = FileDateTime(nomrep & NomFic)
    Ils seraient tous en ordre chronologique.
    Cordialement

    Docmarti.

  15. #15
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274

  16. #16
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Bonjour,

    Une piste intéressante (en anglais):
    http://stackoverflow.com/questions/4...files-returned
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  17. #17
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    L'ordre de lecture de répertoires et des fichier ne dépend pas du code mais de la machine qui héberge le répertoire et les fichiers!

    Ainsi il est possible de trouver dans un même répertoire, bien que l'application fonctionne sous Windows, un fichier toto.txt et TOTO TXT!

    http://www.developpez.net/forums/d16...s/#post8735786

Discussions similaires

  1. Recherche mot dans .PDF avec macro VBA
    Par klemsy20 dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 25/09/2019, 15h15
  2. Recherche V avec Macro
    Par cyr.il10 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/01/2012, 16h24
  3. [XL-2003] Macro de recherche dans un userform avec bouton et textbox
    Par guilo49 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 26/11/2009, 15h38
  4. Recherche récursive avec TIdFTP
    Par Leucistic dans le forum Débuter
    Réponses: 6
    Dernier message: 21/04/2008, 18h00
  5. Recherche avec macro
    Par sararoya dans le forum Access
    Réponses: 7
    Dernier message: 19/01/2007, 23h40

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