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 :

Indexation automatique des fichiers de sous dossiers spécifiques - récursivité [XL-2010]


Sujet :

Macros et VBA Excel

  1. #21
    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
    Citation Envoyé par RyuAutodidacte Voir le message
    Hi unparia,
    Je n'avais pas lu ce post et avec le titre j'avais pas fait de rapprochement
    Voilà bien la raison pour laquelle il est important de soigner la rédaction d'un titre de discussion. Si ce titre ne résume pas la véritable difficulté, la discussion échappe le plus souvent à certaines recherches.
    En l'occurrence, le titre donné ("Désordre avec macros de recherche récursive") ne mentionne même pas que la recherche concerne des fichiers.
    Au fait : LEBERUT est-il certain de ce que le titre que lui, a donné à la présente discussion n'est pas également de nature à la "noyer" ?
    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.

  2. #22
    Futur Membre du Club
    Homme Profil pro
    RSMQ
    Inscrit en
    Octobre 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : RSMQ
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2016
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    @Unaparia :
    Merci mais en parcourant le post je ne me retrouve pas dans cette problématique. Je n'ai pas d'attente particulière sur l'ordre des fichier à l'intérieur des dossiers. (faible nombre)

    @Kiki :
    Merci et bonne idée. J'ai testé et ca fonctionne très bien.
    Pour que ça soit pratique pour moi il faudrait que "Effacer" n’efface pas la première ligne et donc que le dossier sélectionne soit en B1 et non en A1.
    J'ai essayé de bidouiller cette partie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Effacer()
        Application.ScreenUpdating = False
        ActiveWindow.ScrollRow = 1
        ActiveWindow.ScrollColumn = 1
        With ShListe
            .Cells.Clear
            .Cells.ColumnWidth = 10.71
            .Range("A2").Select
        End With
        Application.ScreenUpdating = True
    End Sub
    Mais sans succès.

    Pour écrire en A2 j'ai réussit !
    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
    Private Sub CommandButton1_Click()
    Dim sChemin As String, sCol As String
     
        sChemin = ThisWorkbook.path
     
        bDossier = Dini
        bCoulFichiers = CFini
        bCoulDossiers = CDini
        bAutoFit = AutoIni
        bRecur = RecurIni
        bLien = LienIni
        bLienD = LienDini
        bTaille = TailleIni
     
        SaveINI
     
        With Application.FileDialog(msoFileDialogFolderPicker)
            .InitialFileName = sChemin & "\"
            .Title = "Sélectionner le Dossier Racine"
            .AllowMultiSelect = False
            .InitialView = msoFileDialogViewDetails
            .ButtonName = "Sélection Dossier"
            .Show
            If .SelectedItems.Count > 0 Then
                Unload Me
                DoEvents
                QueryPerformanceCounter Debut
                r = 0: d = 0: f = 0: iMaxi = -9999
                Application.ScreenUpdating = False
     
                ShListe.Cells.Clear
                sRacine = .SelectedItems(1)
                ActiveWindow.ScrollRow = 1
                ActiveWindow.ScrollColumn = 1
     
                Liste .SelectedItems(1)
     
                If bAutoFit Then
                    sCol = NumCol2Lettre(iMaxi)
                    If sCol <> "" Then
                        ShListe.Columns("A:" & sCol).Columns.AutoFit
                    End If
                Else
                    ShListe.Cells.ColumnWidth = 10.71
                End If
     
                ShListe.Range("A2") = sRacine
     
                Application.ScreenUpdating = True
                QueryPerformanceCounter Fin
                QueryPerformanceFrequency Freq
                Application.StatusBar = d & " / " & f & "  " & Format(((Fin - Debut) / Freq), "0.00 s")
                DoEvents
            Else
                Unload Me
            End If
        End With
    End Sub
    @Ryu :
    Merci.
    Colonnes : Dossier / Sous dossier / Nom du fichier / Lien / Date création / Date modification
    xls en pj. Attention : il peut y avoir régulièrement des ajouts de dossier (colonne) et de sous ou sous-sous dossier (lignes)

    Merci à tous,

    LEBERUT
    Fichiers attachés Fichiers attachés

  3. #23
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Bonjour @LEBERUT,
    j'ai bien avancé, mais pas encore satisfait du résultat; je suis pas loin car en rentrant plus dans le vif du sujet,
    j'ai pu mieux appréhender des paramètres de codage à prendre en compte.

    PS : Étant donné que je suis sur Mac je suis peu habitué au particularité PC en ce qui concerne System et ActiveX;
    mais pas d'inquiétude puisque je travail aussi mon code aussi sur Windows (installé récemment cette année),
    donc sur certain point il faut que je me mette à niveau.

    Je comprends mieux le post de @unparia sur le lien donné, car il est vrai que le tri aurait pu être l'un des paramètres, mais il y a aussi la récursivité.

    Donc j'ai déjà un plan de codage en tête, il faut juste que j'arrive à le mettre en application.

    Pour Explication :

    • En partant de l'idée de départ proposé, on aura pour chaque colonne représentant une famille:
    Famille => Lien du dossier principal =>dossiers/sous-dossiers … (cf capture ci dessous avec download)
    PS: les "\" devant les noms étaient pour spécifier quand l'on rentre dans des sous-dossier mais ce n'est pas mon idée final
    Nom : Capture d’écran 2016-10-10 à 11.48.13.png
Affichages : 568
Taille : 60,2 Ko

    • On commence avec la vérification et correspondances de chaques Familles/Onglets.
    si le nom d'une famille n'est pas trouvé dans les noms d'onglet existant, alors l'onglet est créé avec le nom de la famille manquante :
    Code de test (Fonction emprunté à Marc-L):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Function FeuilleExiste(FEUILLE) As Boolean
             FeuilleExiste = Evaluate("ISREF('" & FEUILLE & "'!A1)")
    End Function
     
    Sub FEUILLE()
    Dim Liste
        Liste = ThisWorkbook.Sheets("LISTES").Cells(1).CurrentRegion.Value
        For i = 1 To UBound(Liste, 2)
            If FeuilleExiste(Liste(1, i)) = False Then Sheets.Add , Sheets(Sheets.Count): Sheets(Sheets.Count).Name = Liste(1, i)
        Next
    End Sub
    Nom : Capture d’écran 2016-10-10 à 11.48.35.png
Affichages : 277
Taille : 9,2 Ko

    • C'est là qu'on rentre dans le vif du sujet : la récursivité
    Pour ma part j'essaie de bien en comprendre le principe, surtout que je passe par Dir pour une transportabilité PC/Mac.
    Je me suis renseigné sur le net, il y a un tas de codes en exemple mais pas comme je le souhaite,
    car il faut une adaptation que je ne maitrise pas de suite (mais ça ne saurait tardé).
    d'après ce que j'ai compris la propriété Dir n'est pas récursive mais il y a des méthodes pour obtenir cette récursivité.
    Le principe :
    1- lister les fichiers à partir du chemin principal (sélection du type de fichier à récupérer par "If … Like …"*extension" … or … Like …"*extension" …")
    Ex :
    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
      Do While Fichier <> ""
     
            With Sheets(Liste(1, i))
                If Fichier Like "*.xl*" Or Fichier Like "*.zip" Or Fichier Like "*.jp*g" Or Fichier Like "*.exe" Then
                    …
                    …
                    …
                    …
                    …
                    …
     
                End If
            End With
     
            Fichier = Dir
        Loop
    2- avec le chemin principal obtenir par méthode récursive tous les chemins des dossiers/sous- dossiers que l'on peut par exemple stocker dans un tableau
    3- en utilisant les chemins sauvegarder dans le tableau, on récupère la liste de chaque fichiers (sélection du type de fichier à récupérer par "If … Like …"*extension" … or … Like …"*extension" …")
    3 bis- pour obtenir la liste des fichiers seulement dans les dossiers voulus on va utiliser l'onglet "LISTES" et utiliser Application.Match afin de valider ou pas la récupération des fichiers
    Code de test vite fait + capture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub ValidationDossier()
    Dim Dossier_Liste, rep$, Dossier$, sep$, MonDossier
        sep = Application.PathSeparator
        Dossier_Liste = Application.Transpose(Application.Index(Range(Cells(3, 5), Cells(Rows.Count, 5).End(xlUp)), 0, 1))
        rep = "C:\Users\Nom_Utilisateur\Downloads\IMAGES\TOTO\"
        Dossier = Split(rep, sep)(UBound(Split(rep, sep)) - 1)
        MonDossier = Application.Match(Dossier, Dossier_Liste, 0)
        If IsError(MonDossier) Then MsgBox "Dossier suivant" Else MsgBox "Récupération de la liste"
    End Sub
    Nom : Capture d’écran 2016-10-10 à 13.41.45.png
Affichages : 318
Taille : 9,1 Ko

    Voilà

    NB : avec mes 1er tests voilà le résultat obtenu (méthode sans récursivité), mais des corrections sont à apporter dans le code :
    (ici on voit le noms en bleu pour dossier ou fichier, je les ai créé de cette façon afin de pourvoir ouvrir directement le dossier ou le fichier voulu)
    Nom : Capture d’écran 2016-10-10 à 11.48.59.png
Affichages : 639
Taille : 246,6 Ko

    Edit : existe t il une méthode autre que DateCreated pour récupérer la date de création du fichier ??
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  4. #24
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Bonjour @LEBERUT, le forum,

    tout d'abord j'ai une question pour les cadors :

    Après énormément de recherche, je suis tombé sur cette page qui permet apparemment d'avoir de multiple informations sur les fichiers : Comment obtenir les informations étendues d'un fichier ? - je remet le code du lien pour éviter d'aller de page en page
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        'bibliothèque "Microsoft Shell Controls and Automation"
    stRep="d:\MesPhotos"  
    stFichier ="photo.jpg"  
    Set oShell = CreateObject("Shell.Application") 
    Set oFolder = oShell.Namespace(stRep) 
    Set oFichier = oFolder.Items.Item(stFichier) 
    'Affiche les propriétés étendues du fichier 
    For i = 0 to 34 
     Wscript.Echo  "[" & i &  "] " & oFolder.GetDetailsOf(oFolder.Items, i  ) & " : " & oFolder.GetDetailsOf(oFichier, i) 
    Next
    Avec cette propriété :
    [4] Date de création : 31/10/2010 14:01
    sachant que je récupère le lien complet de fichiers dans une boucle, j'ai viré le For i = … de l'exemple et essayer de reconstituer le script afin de mettre le résultat dans une cellule :
    ex. en utilisant [4] :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        'bibliothèque "Microsoft Shell Controls and Automation"
    stRep="LiensDeMonDossierVariable"  
    stFichier ="MonFichierVariable"  
    Set oShell = CreateObject("Shell.Application") 
    Set oFolder = oShell.Namespace(stRep) 
    Set oFichier = oFolder.Items.Item(stFichier) 
    'Affiche les propriétés étendues du fichier 
     Range("A1").Value = Wscript.Echo  "[" & 4 &  "] " & oFolder.GetDetailsOf(oFolder.Items, 4  ) & " : " & oFolder.GetDetailsOf(oFichier, 4)
    cela m'a mis la ligne en rouge dont l'erreur pointé sur une mauvaise écriture notamment vers les guillmets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Range("A1").Value = Wscript.Echo  "[" & 4 &  "] " & oFolder.GetDetailsOf(oFolder.Items, 4  ) & " : " & oFolder.GetDetailsOf(oFichier, 4) 
    Je ne connais pas les scripts sur Windows (et aussi conjointement avec vba) et malgré mes recherches et différents tests, je n'ai pas réussi à le mettre en place .
    j'aimerai bien un peu d'aide svp

    @LEBERUT : j'ai bien avancé et je commence à avoir plus de résultats - qu'en est il de votre coté ??
    pour l'instant je ne mets pas encore le code car j'ai encore des points à résoudre mais mon dernier résultat sur un lien principal à donné ceci :
    (pointage sur les fichiers .exe, .jpg, .jpeg (.jp*g) et .xlsm)

    Nom : Capture d’écran 2016-10-11 à 11.26.24.png
Affichages : 536
Taille : 146,4 Ko
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  5. #25
    Futur Membre du Club
    Homme Profil pro
    RSMQ
    Inscrit en
    Octobre 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : RSMQ
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2016
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Merci beaucoup Ruy.
    Concernant 'DateCreated' dans les deux codes que j'utilise c'est cette méthode qui a été choisie. Je n'en connais pas d'autres.

    L’exemple à l'air très bien. Si je comprend bien dans le sous dossier "Exemple" il n'y a pas de fichier ?

    Merci.

    LEBERUT

  6. #26
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    non il y a des fichiers, mais il n'y a pas de fichiers avec les extensions recherchées !!
    En journée j'ai peu de temps pour faire de l'Excel car ça ne fait pas partie de mon taf de plus je travail sur Mac.
    Donc j'ai accès à un PC (double boot Mac et PC) le soir quand je suis chez moi.
    pour le fichier (qui est chez moi sur mon ordi) c'est un fichier test non finaliser; la je suis dans une erreur de boucle afin de boucler sur l'ensemble des familles
    et il reste à déterminer la sélection des dossiers dans une famille, mais après tout dépend de la hiérarchisation des dossier dans une famille,
    car si il n'y a que les dossiers concernés à scanner, dans ce cas il n y a plus besoin de faire une validation scan avec application.Match

    Edit : C'était pas une erreur de boucle mais une erreur de liens, il manquait l'anti slash à la fin du chemin donc attention en renseignant les différents chemins principaux

    Bonsoir,

    PS : si une âme charitable passant par là peut m'aider sur ma question posée en post #24

    Voilà un code pour lister les fichiers dans dossiers et sous-dossiers :
    - Pas besoin de créer d'onglet juste créer l'onglet "LISTES"
    - En 1è ligne mettre les noms des familles
    - sur la ligne 2 mettre les chemins des dossiers principaux à scanner correspondant au familles, Ex. : C:\Users\Nom_Utilisateur\Downloads\

    NB : ne pas oublier l'anti-slash à la fin du chemin - sur ce code la validation scan avec application.Match n'est pas faite

    Le code à mette dans un module (Attention je n'utilise pas l'option explicit):
    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
    Function FeuilleExiste(FEUILLE) As Boolean
             FeuilleExiste = Evaluate("ISREF('" & FEUILLE & "'!A1)")
    End Function
     
     
    Sub MyDirFolder()
     
        With ThisWorkbook.Sheets("LISTES")
            Liste = Application.WorksheetFunction.Index(.Range(.Cells(1, 1), .Cells(1, Columns.Count).End(xlToLeft)).Value, 1, 0)
            For i = 1 To UBound(Liste)
                If FeuilleExiste(Liste(i)) = False Then Sheets.Add , Sheets(Sheets.Count): Sheets(Sheets.Count).Name = Liste(i)
            Next
            rep = Application.WorksheetFunction.Index(.Range(.Cells(2, 1), .Cells(2, Columns.Count).End(xlToLeft)).Value, 1, 0)
        End With
        For i = 1 To UBound(rep)
            Sheets(Liste(i)).Cells(2, 1).CurrentRegion.Clear: DRep$ = rep(i)
            ShName = Liste(i)
            ListPath DRep, ShName
     
        Next
     
    End Sub
     
     
    Sub ListPath(path As String, ByVal MaFeuille As String)
        Dim currentPath As String, directory As Variant
        Dim dirCollection As Collection
        Set dirCollection = New Collection
        Dim Fso
        Set Fso = CreateObject("Scripting.FileSystemObject")
     
        currentPath = Dir(path, vbDirectory)
     
    Application.ScreenUpdating = False
     
    With Sheets(MaFeuille)
     
        Do Until currentPath = vbNullString
            If currentPath Like "*.xlsm" Or currentPath Like "*.jp*g" Or currentPath Like "*.exe" Then
                    ActiveSheet.Hyperlinks.Add Anchor:=.Range("A" & Rows.Count).End(xlUp)(2), Address:= _
                        path, TextToDisplay:=Split(path, "\")(UBound(Split(path, "\")) - 1)
                    .Range("B" & Rows.Count).End(xlUp)(2) = currentPath
                    ActiveSheet.Hyperlinks.Add Anchor:=.Range("C" & Rows.Count).End(xlUp)(2), Address:= _
                        path & currentPath, TextToDisplay:=currentPath
                    .Range("D" & Rows.Count).End(xlUp)(2) = Round(FileLen(path & currentPath) / 1024, 2) & "Ko"
                    Set file = Fso.GetFile(path & currentPath): .Range("E" & Rows.Count).End(xlUp)(2) = Format(file.DateCreated, "dd/mm/yy - hh:mm")
                    .Range("F" & Rows.Count).End(xlUp)(2) = Format(FileDateTime(path & currentPath), "dd/mm/yy - hh:mm")
            End If
            If Left(currentPath, 1) <> "." And _
                (GetAttr(path & currentPath) And vbDirectory) = vbDirectory Then
                    dirCollection.Add currentPath
            End If
            currentPath = Dir()
        Loop
     
        For Each directory In dirCollection
            For y = 0 To 5
                With .Cells(Rows.Count, y + 1).End(xlUp)(2)
                    .Value = "---- SubFolder: " & directory & " ----"
                    .HorizontalAlignment = xlCenter: .VerticalAlignment = xlCenter: .ReadingOrder = xlContext: .Font.Size = 11
                End With
            Next
            ListPath path & directory & "\", MaFeuille
        Next directory
     
        .Columns("A:F").AutoFit
     
            Entete = Array("DOSSIERS", "FICHIERS", "LIENS", "POIDS", "DATE DE CREATION", "DATE DE MODIFCATION")
            With .Range("A1").Resize(, UBound(Entete) + 1)
                .Value = Entete
                .HorizontalAlignment = xlCenter: .Interior.ColorIndex = 6: .Font.Bold = True: .Font.Size = 11.5
            End With
     
            With .Range("A2:F" & .Cells(Rows.Count, 1).End(xlUp).Row)
                .Cells.FormatConditions.Delete
                .FormatConditions.Add Type:=xlTextString, String:="SubFolder:" _
                , TextOperator:=xlContains
                .FormatConditions(.FormatConditions.Count).SetFirstPriority
                With .FormatConditions(1).Font
                    .Bold = True
                End With
                With .FormatConditions(1).Interior
                    .PatternColorIndex = xlAutomatic
                    .ThemeColor = xlThemeColorDark1
                    .Color = 14869218
                End With
                .FormatConditions(1).StopIfTrue = False
            End With
     
    End With
     
    Application.ScreenUpdating = True
     
    End Sub
    Faire le changement dans le If pour les le choix des extensions - cf. ligne 39

    Edit : comme l'a suggéré unparia, il serait judicieux de renommer le titre du post afin qu'il soit plus en adéquation avec la problématique !
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  7. #27
    Futur Membre du Club
    Homme Profil pro
    RSMQ
    Inscrit en
    Octobre 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : RSMQ
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2016
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Bonjour Ryu,

    J'ai fait un test rapide et ça semble marcher super bien.

    Je regarde plus dans le détail et reviens vers toi et le forum.

    Merci beaucoup,

    LEBERUT

  8. #28
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Bonjour,

    Pour les pro : j'aimerais bien si possible des commentaires sur le code, à savoir ce qui va pas ou peut être arrangé Ci-dessus. Merci d'avance pour les réponses

    LEBERUT : j'essaierai par la suite de faire une version avec sélection des dossiers choisis dan la liste par famille (dans un répertoire principal) + focus sur une colonne de l'onglet LISTES pour Maj ou nouvel onglet famille.
    J'insiste encore sur une possibilité de changement de titre du post afin qu'il soit plus explicite et aussi afin que les gens rencontrant le même problème et faisant une recherche puissent trouver facilement une réponse.
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  9. #29
    Futur Membre du Club
    Homme Profil pro
    RSMQ
    Inscrit en
    Octobre 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : RSMQ
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2016
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Re-Bonjour,

    Pour le titre : pas de problème : Est-ce que tu penses que celui là conviendrait mieux ? "Indexation automatique des fichiers de sous dossiers spécifiques"

    Pour future version, une option intéressante serait de pouvoir rentrer dans LISTES des chemins de dossier à exclure, ou Exclure des sous dossiers dont le nom contient un caractère ou une suite de caractères convenue.

    Par exemple, dans beaucoup de sous dossier j'ai des sous-sous dossiers Archives que je ne souhaite pas faire apparaitre dans ma base.
    Là je suis en train de modifier l'organisation de mon dossier pour que ça match.

    J'ai rentré l'ensemble des chemins de mes sous dossier.
    Cf image ci-jointe.
    Nom : Capture.PNG
Affichages : 444
Taille : 25,7 Ko
    Ca fonctionne bien, mais je n'ai la liste que des fichiers du premier chemin de chaque colonne. Qu'est -ce que j'ai mal fait ?

    LEBERUT

  10. #30
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Re,
    Pour future version, …
    Réponse :
    j'essaierai par la suite de faire une version avec sélection des dossiers choisis dan la liste par famille (dans un répertoire principal)
    Donc pour l'instant j'irai seulement sur les dossiers à inclure
    (comme tu peux le voir au niveau de l'heure du post ça ma demandé pas mal de taf surtout que c'est nouveau pour moi ce type de code),
    pour les dossier à exclure je verrai plus tard mais à mon avis il faudra juste inversé la condition

    Re,
    Pour explication sur le listage des chemin :
    Étant donné que l'on se trouve dans une "Famille", j'ai supposé que 'ensemble des dossiers/sous-dossiers/fichiers étaient rangé dans un dossier regroupant l'ensemble des centres d’intérêts/type de données. Ex. : "0-Procédures groupes" ou "1-MANAGEMENT"
    Donc tous les dossiers/fichiers sont censés être rangés dans un dossier principal ayant le même centre d’intérêt (ex.: "1-MANAGEMENT") qui lui donnera le chemin principal que l'on trouve en ligne 2 de l'onglet "LISTES"

    Après je pense que cela pourra marché autrement avec l'évolution du code/future version

    Voilà

    Edit : j'ai bien spécifié que la sélection des dossiers dans le code n'était pas fait pour l'instant
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  11. #31
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Bonjour je ne comprends pas tres bien ou vous été allés vu la demande initiale
    mais si vous cherchez a lister les fichiers dans dossiers et sous dossiers on peut utiliser une fonction récursive simple
    voici un exemple que j'ai simplifier par rapport a mon besoins perso

    dans le debug ca liste les dossier et sous dossiers et leur fichiers qui sont dedans
    devant chaque items il y a "dossier ou " fichier" pour que cela soit intelligible
    le nom court du fichier est obtenu par "itemvu "
    je vous laisse regarder
    vous pourriez simplement remplacer les ligne debug.print... par un placement dans une cellule

    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
    Sub test2()
        chemin = "G:" ' racine pour la recherche
       cherche chemin '
    End Sub
    Function cherche(dossier)
            Dim chemin As String, itemsvu As String, nbitemsVu As Long, i As Long
        chemin = dossier & "\"
        itemsvu = Dir(chemin, vbDirectory)
        Do
            nbitemsVu = nbitemsVu + 1
            If itemsvu <> "." And itemsvu <> ".." Then
                If (GetAttr(chemin & itemsvu) And vbDirectory) = vbDirectory Then
                                   Debug.Print "Dossier " & chemin & itemsvu
                    Call cherche(chemin & itemsvu)
                    'après avoir examiné le sous-dossier, il faut repositionner Dir sur l'entrée suivante
                    'car la fonction dir n'est pas récursive et a donc perdue la dernière position
                    'on réinitialise donc Dir et repositionne le flag à la bonne place avec nbitemsVu
                     itemsvu = Dir(chemin, vbDirectory)
                    For i = 1 To nbitemsVu - 1: itemsvu = Dir: Next i
                Else
                    Debug.Print "fichier " & dossier & "\" & itemsvu
     
                End If
            End If
            itemsvu = Dir
        Loop While itemsvu <> ""
       End Function
    ps: RYU je vois pas très bien ce que tu cherche a faire dans ton post 24

    tu te mélange un peu les pinceaux je dirais moi avec vba et vbscript
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  12. #32
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    hi Patrick,
    Je dois me mélanger les pinceaux comme tu le dis.
    en fait j'avais fait un un rapprochement sur Mac ou l'on peut utiliser des script avec MacScript
    mais sur PC cela doit être autrement; il me semblait qu'à partir de vba on pouvait lancer des script ou shell (c'est comme cela que l'on dit ???)

    sinon pour le code je regarderai ce soir tranquillement
    Merci

    Edit - Patrick :
    Citation Envoyé par patricktoulon Voir le message
    Bonjour je ne comprends pas tres bien ou vous été allés vu la demande initiale
    mais si vous cherchez a lister les fichiers dans dossiers et sous dossiers on peut utiliser une fonction récursive simple
    Non en fait ce n'est pas un simple listage, mais un listage avec des dossiers bien précis a différent endroits et a repartir sur différents onglets.
    Le code que j'utilise est aussi récursif j'ai juste ajouté la création d'onglets si il n'existe pas, la sélection des extensions pointages sur différents dossiers et onglets, j'ai aussi rajouté une mise en forme auto
    Et la je vais rajouter en plus une sélection de dossier selon une liste à inclure où exclure
    Voilà
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  13. #33
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 924
    Points
    55 924
    Billets dans le blog
    131
    Par défaut
    Salut.

    34 messages pour une demande qui me semble assez basique au départ...

    Il serait donc intéressant que le demandeur initial rédige clairement ses attentes (from scratch et pas en fonction de l'existant actuel). Partir du code initial et de la demande mal formulée (ce n'est pas une critique, c'est un constat ) permet rarement d'arriver à une solution satisfaisante, pérenne et évolutive.

    Je ne saurais que trop conseiller de découper le processus en procédures et fonctions qui ont une seule responsabilité. C'est le meilleur moyen d'arriver à un résultat efficace qui permet, entre autres choses, de réutiliser du code paramétrable.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  14. #34
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Bonjour,

    Pierre Fauconnier :
    La demande pour ma part je l'ai bien comprise, mais la difficulté de mon coté c'est que j’apprends par moi même et c'est la 1ère fois que je m'attaque à ce genre de code, donc je me renseigne sur le net pour essayer de comprendre et test au fur et à mesure pour avancer.
    Chose importante : comme je suis sur Mac et que je peux aussi booter en mode PC, mon but est de faire aussi un code transversale sur les 2 plateformes Mac/PC (Car sur Mac on est mal lotis donc c'est aussi une aide envers la communauté Mac tout en prenant en compte les spécificité PC)
    Je suis tout à a fait d'accord aussi pour couper le code en plusieurs partie car je me suis rendu compte que j'avais moins de clarté pour finaliser mon code

    LEBERUT :
    j'ai bien avancé, j'ai fait un code test, à essayer pour faire des remonter.
    le but est pour l'instant de tester le code sur un nouveau fichier juste avec un répertoire à renseigner dans le code et les dossiers à inclure ou exclure à mettre sur la feuille active qui lors de mon test, étaient mis sur la colonne M (correspond à 13 dans le code) à partir de la ligne une
    ne pas oublier de renseigner le type de fichier voulu
    Le résultat est en Debug.Print et est réduit à son minimum juste pour tester ce qui va ou pas
    (Si besoin de plus d'info ne pas hésiter)
    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
    Sub SousD1()
        SousD2 "C:\Users\Nom_Utilisateur\Downloads\" 'Mettre un répertoire
    End Sub
     
    Sub SousD2(chemin As String)
    Dim ctr As Integer, Dossier As String, Repertoire As New Collection, cheminertoire()
    sep = Application.PathSeparator
     
    ctr = 1
    Dossier = Dir(chemin, vbDirectory)
    'Debug.Print Dossier
    Do Until Dossier = ""
        If (GetAttr(chemin & Dossier) And vbDirectory) = vbDirectory Then
            If Dossier <> "." And Dossier <> ".." Then 'Typique au PC
                Repertoire.Add Dossier
                    ActiveSheet.Cells(ctr, 1).Value = Dossier & "  -------->  " & chemin & Dossier & "  -------->  " & Split(chemin & Dossier, sep)(UBound(Split(chemin & Dossier, sep)))
                    ctr = ctr + 1
            End If
        End If
      Dossier = Dir()
    Loop
     
    'Cette partie du code estlà pour lister les dossier à inclure ou exclure selon "If IsError" ou "If Not IsError"
    'cf ligne 29
    Dossier_Liste = Application.Transpose(Application.Index(Range(Cells(1, 13), Cells(Rows.Count, 13).End(xlUp)), 0, 1))
     
        For Each R In Repertoire
            MonDossier = Application.Match(R, Dossier_Liste, 0)
            If IsError(MonDossier) Then 'IsError => Exclure - Not IsError => Inclure
                Debug.Print "--- SubDirectory: " & R & " ---"
                    Fichier = Dir(chemin & R & sep)
                    Do Until Fichier = vbNullString
                        If Fichier > "." And Fichier > ".." Then 'Typique au PC
                            If Fichier Like "*.xl*" Or Fichier Like "*.jp*g" Then 'Mettre les type de fichier à rechercher
                                Debug.Print Fichier
                            End If
                        End If
                        Fichier = Dir()
                    Loop
                SousD2 chemin & R & sep
            Else
                SousD2 chemin & R & sep
            End If
        Next R
     
    End Sub
    Edit : une fois tous les paramètres pris en compte, on finalisera le code qui sera un mixte entre mon code précédent bouclant sur chaque famille et celui-ci se rapprochant de l'idée final sur la suggestion que j'avais proposé
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  15. #35
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut
    Bonjour
    perso pour moi cela devient de moins en moins clair !!!

    peut être le demandeur devrait être plus clair sur son besoins

    ps: RYU je t'ai donné une fonction récursive listant les dossier et leur sous dossiers ainsi que leur fichiers

    tu a dans ce code pour vos besoins les deux ligne debug.print
    la première donne un dossier
    la deuxième donne un fichier que contient le dossier
    c'est ici qu'il faut ajouter tes besoins

    je comprends pas pourquoi tu te complique a a lister les dossiers puis relancer un dir sur chaque dossier puis ...etc.....

    tu a déjà tout dans la fonction

    et puis pour obtenir a coup sur le nom d'un dossier séparé de son full name tu peut très bien faire un split un strreverse( strreverse(chemin,"/")(0)) tout simplement

    les ajout de sheets peuvent très bien être intégré ou un ligne l'ors de debug peut très bien piloter une fonction externe d'ajout de sheet

    non vraiment je comprends pas
    comme d'habitude je te donne quelque chose de simple et tu en fait une caravane

    je connais ta soif d'apprendre mais apprendre ne veut pas dire délirer avec des codes abracabrantesques cela et complètement inutile
    je te suggère de méditer sur ces points

    re
    voici ma fonction qui a la base recherche des fichier dans les dossiers et sous-dossier dont les chaines de caractères en paramètres son présentes dans son nom
    comme tu vois l'exemple que je t'ai donné est tiré de cette fonction

    tu constatera que les endroit ou se trouve les debug dans l'exemple que je t 'ai donné précédemment correspondent au action que je veux tout simplement

    le principe

    1. dir racine
    2. si dossier redir
    3. redir *X pour remonter tout les dir (dir n'a pas de récursivité) donc on la créé
    4. si fichier faire ceci ou cela
    5. loop dir=""


    code
    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
     Sub test2()
        Dim mesfichiers, t()
        chemin = "G:" ' racine pour la recherche
        exT = ".xls" ' extention de fichiers recherchés
        argmt1 = "toto" ' partie du nom de fichiers recherchés
        argmt2 = "titi" ' autre partie du nom de fichiers recherchés
        mesfichiers = cherche(chemin, exT, argmt1, argmt2) '  ||mesfichier|| deviendra un tableau de nom de fichiers selon les condition précédemment énumérée
    If UBound(mesfichiers) > 0 Then
    ' ton code ici!!!!!
    'exemple te liste les fichiers trouver avec toto ou titi en .xls dans un msgbox avec join
    MsgBox Join(mesfichiers, vbCrLf)
    End If
    End Sub
    Function cherche(dossier, exT, argmt1, argmt2, Optional texte As String)
     
        Dim chemin As String, itemsvu As String, nbitemsVu As Long, i As Long
        chemin = dossier & "\"
        itemsvu = Dir(chemin, vbDirectory)
        Do
            nbitemsVu = nbitemsVu + 1
            If itemsvu <> "." And itemsvu <> ".." Then
                If (GetAttr(chemin & itemsvu) And vbDirectory) = vbDirectory Then
                    'Debug.Print String(20, "*")
                    'Debug.Print chemin & itemsvu
                    Call cherche(chemin & itemsvu, exT, argmt1, argmt2, texte)
                    'après avoir examiné le sous-dossier, il faut repositionner Dir sur l'entrée suivante
                    'car la fonction dir n'est pas récursive et a donc perdue la dernière position
                    'on réinitialise donc Dir et repositionne le flag à la bonne place avec nbitemsVu
                    itemsvu = Dir(chemin, vbDirectory)
                    For i = 1 To nbitemsVu - 1: itemsvu = Dir: Next i
                Else
                    'Debug.Print dossier & "\" & itemsvu & " ---- " & InStr(itemsvu, argmt1)
                    'intégration des fichiers ciblés dans le tablo
                    If Right(itemsvu, 4) = exT Then ' si ca correspond a l'extention recherché 
                        If itemsvu Like "*" & argmt1 & "*" Or itemsvu Like "*" & argmt2 & "*" Then 'si les nom contiennent les argument 1 ou 2 
                            texte = texte & dossier & "\" & itemsvu & vbCrLf
                        End If
                    End If
                    'Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) = dossier & "\" & itemsvu & vbCrLf
                End If
            End If
            itemsvu = Dir
        Loop While itemsvu <> ""
        cherche = Split(texte, vbCrLf)
    End Function
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  16. #36
    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,

    je rebondis sur le message de Pierre …

    Dans le forum Contribuez il y a au moins trois contributions sur ce sujet
    sans compter les exemples dans les discussions de ce forum !

    Pour Ryu un exemple dans cette discussion parmi tant d'autres …

    _________________________________________________________________________________________________________
    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)

  17. #37
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Bonjour Patrick et Marc,

    Patrick, par manque de temps je n'ai pas eu le temps de bien tout analyser avec le 1er code que tu as donné,
    car je suis tombé sur une erreur 53 fichier introuvable sur Mac, et comme j'aimerai une transversalité PC/MAC
    donc je vais regarder à un moment ou je serai plus tranquille avec plus temps - Merci pour le complément sur ton dernier post

    Marc, merci pour ton lien. j'étais tombé sur ton post aussi, j'ai vu ton code, mais il me faut plus de temps pour y rentrer et en comprendre le raisonnement
    Idem que Patrick manque de temps. De plus je m'étais posé une question concernant ton code sur :
    car je recherche le moyen de de prendre en considération plusieurs extension et là ça parait figé (surement que je me trompe)

    Donc je vais rentrer dans tous cela afin de mieux le digérer et surtout comprendre la différence (surement infime) entre Mac et PC pour que le tout marche directement sans modification

    Merci à tous les 2
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  18. #38
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Bonjour LEBERUT, Marc et Patrick,

    Marc, j'ai regardé de plus près ton code (donné en lien) et fait fonctionné celui-ci sur PC et MAC.
    sur PC OK, sur MAC ça n'a pas marché (il faut que je regarde de plus près).
    C'est toujours codé avec subtilité; j'ai du m'y reprendre plusieurs fois pour en comprendre le fonctionnement et des notes sur l'ensemble de la démarche ne serait pas de trop pour que j'arrive à m'y retrouver.
    je t'ai mis un

    Patrick, le 2ème code fourni sur la base du 1er est très bien aussi (mais c'est pour un besoin bien précis) je t'ai mis aussi un
    La base du code je l'avais rencontré aussi avant.
    Mais comme c'était nouveau pour moi je ne suis pas rentré dedans du 1er coup (par le manque de temps aussi).
    j'ai bien vu le système du compteur afin que le Dir puisse retrouver sa place et donc sur chaque dossier rencontré la boucle for est utilisée
    Mais j'ai eu du mal à adapter ce code pour ce que je voulais faire, car les fichiers du Path se retrouvent mélangés avec les fichiers des différents sous-dossiers
    Donc j'ai préféré passer pour ma base par ce code trouvé ici (que je trouve simple aussi sans boucle for)

    LEBERUT,
    Voilà une 1è version finalisé (je verrai si j'en fait d'autres d'une autre manière)
    Principe :
    - Dans un onglet liste on répertorie dans une colonne : Ligne 1 -> Le nom de l'onglet / Ligne 2 -> le chemin du dossier voulu / Ligne 3 et + -> le(s) nom(s) des dossier à Inclure ou Exclure

    OngletFamile1 OngletFamile2 OngletFamile3
    C:\Users\N_user\Downloads\ C:\Users\N_user\Downloads\IMAGES\ C:\Users\N_user\Documents\
    INSTALL TUTU Source
    IMAGES TEST_1

    - Pour exclure les dossiers marqués dans la colonne, il faut faire une modification identique sur 2 lignes bien précises comme pour inclure,
    ça dépendra donc du contexte en cours dans le code; voilà la ligne en question à faire x2 (ajouter/enlever le "not" dans le sub "MyFiles_List") :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If IsError(MyFolders) Then   '=> Exclure  -  If not IsError(MyFolders) Then => inclure
    le code est séparé en plusieurs partie, le tout à copier dans un module (partie séparé : un code gestion des onglet/Liens... ; un code pour les dossiers/fichiers; un code pour la copie des infos fichiers, un code pour la mise en forme)
    Le Sub à lancer est "FolderFileList"

    Le code :
    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
    109
    110
    111
    112
    113
    114
    115
    116
    Function FeuilleExiste(Feuille) As Boolean
             FeuilleExiste = Evaluate("ISREF('" & Feuille & "'!A1)")
    End Function
     
    Sub FolderFileList()
        With ThisWorkbook.Sheets("LISTES")
            Liste = Application.WorksheetFunction.Index(.Range(.Cells(1, 1), .Cells(1, Columns.Count).End(xlToLeft)).Value, 1, 0)
            For i = 1 To UBound(Liste)
                If FeuilleExiste(Liste(i)) = False Then Sheets.Add , Sheets(Sheets.Count): Sheets(Sheets.Count).Name = Liste(i)
            Next
            Rep = Application.WorksheetFunction.Index(.Range(.Cells(2, 1), .Cells(2, Columns.Count).End(xlToLeft)).Value, 1, 0)
     
            For i = 1 To UBound(Rep)
                Sheets(Liste(i)).Cells(2, 1).CurrentRegion.Clear: chemin$ = Rep(i)
                ShName = Liste(i)
                F_List = Array(Application.Transpose(.Range(.Cells(3, i), .Cells(Rows.Count, i).End(xlUp)).Value))
                MyExtensions = Array("exe", "jpeg", "xlsx", "xls", "pdf") 'Ici on ajoute ou on enlève les extensions
     
                    With Sheets(ShName)
                        .Cells(1) = "'" & String(50, "---") & " STARTING FOLDER : " & " " & Split(chemin, "\")(UBound(Split(chemin, "\")) - 1) & " " & String(50, "---") & "  CHEMIN : " & chemin & " " & String(50, "---")
                        .Rows("1:1").RowHeight = 34
                        With .Range("A1:F1")
                            .HorizontalAlignment = xlCenterAcrossSelection: .VerticalAlignment = xlCenter: .Interior.Color = 15921906: .Font.Bold = True: .Font.Size = 14
                        End With
                    End With
                    Entete = Array("DOSSIERS/LIENS", "FICHIERS/LIENS", "DATE DE CREATION", "DATE DE MODIFCATION", "POIDS", "REPERTOIRES")
                    With Sheets(ShName).Range("A2").Resize(, UBound(Entete) + 1)
                        .Value = Entete
                        .HorizontalAlignment = xlCenter: .Interior.ColorIndex = 6: .Font.Bold = True: .Font.Size = 11.5
                    End With
     
                MyFiles_List chemin, ShName, F_List, MyExtensions
                MiseEnForme ShName
            Next
        End With
     
    End Sub
     
     
    Sub MyFiles_List(ByVal path As String, ByVal MaFeuille As String, ByVal FolderList As Variant, Extension)
        Dim Fichier As String, directory As Variant, dirCollection As New Collection
     
        Fichier = Dir(path, vbDirectory)
        Do Until Fichier = vbNullString
     
            If Fichier <> "." And Fichier <> ".." Then
            MyFolders = Application.Match(Split(path, "\")(UBound(Split(path, "\")) - 1), FolderList, 0)
                If IsError(MyFolders) Then   '=> Exclure  -  If not IsError(MyFolders) Then => inclure
                    ExtFic = StrReverse(Split(StrReverse(Fichier), ".")(0)): FicOK = Application.Match(ExtFic, Extension, 0)
                    If Not IsError(FicOK) Then
                        InfosFichiers path, Fichier, MaFeuille
                    End If
                End If
            End If
            If Left(Fichier, 1) <> "." And _
                (GetAttr(path & Fichier) And vbDirectory) = vbDirectory Then
                dirCollection.Add Fichier
            End If
            Fichier = Dir()
        Loop
     
        For Each directory In dirCollection
            MyFolders = Application.Match(Split(path & directory & "\", "\")(UBound(Split(path & directory & "\", "\")) - 1), FolderList, 0)
            If IsError(MyFolders) Then   '=> Exclure  -  If not IsError(MyFolders) Then => inclure
                For y = 0 To 5
                    With Sheets(MaFeuille).Cells(Rows.Count, y + 1).End(xlUp)(2)
                        .Value = "---- SubFolder: " & directory & " ----"
                        .HorizontalAlignment = xlCenter: .VerticalAlignment = xlCenter: .ReadingOrder = xlContext: .Font.Size = 11
                    End With
                Next
            End If
            MyFiles_List path & directory & "\", MaFeuille, FolderList, Extension
        Next directory
     
    End Sub
     
    Function InfosFichiers(chemin As String, I_Fichier As String, Feuille As String)
    Dim FSO
        sep = Application.PathSeparator: Set FSO = CreateObject("Scripting.FileSystemObject")
    Application.ScreenUpdating = False
        With Sheets(Feuille)
            ActiveSheet.Hyperlinks.Add Anchor:=.Range("A" & Rows.Count).End(xlUp)(2), Address:= _
                chemin, TextToDisplay:=Split(chemin, "\")(UBound(Split(chemin, "\")) - 1)
            ActiveSheet.Hyperlinks.Add Anchor:=.Range("B" & Rows.Count).End(xlUp)(2), Address:= _
                chemin & sep & I_Fichier, TextToDisplay:=I_Fichier
            Set file = FSO.GetFile(chemin & sep & I_Fichier): .Range("C" & Rows.Count).End(xlUp)(2) = Format(file.DateCreated, "dd/mm/yy - hh:mm")
            .Range("D" & Rows.Count).End(xlUp)(2) = Format(FileDateTime(chemin & sep & I_Fichier), "dd/mm/yy - hh:mm")
            .Range("E" & Rows.Count).End(xlUp)(2) = Round(FileLen(chemin & sep & I_Fichier) / 1024, 2) & " Ko"
            .Range("F" & Rows.Count).End(xlUp)(2) = chemin & I_Fichier
        End With
    Application.ScreenUpdating = True
    End Function
     
    Function MiseEnForme(ByVal Feuille As String)
        With Sheets(Feuille)
        Application.ScreenUpdating = False
            .Columns("A:F").AutoFit
     
            With .Range("A2:F" & .Cells(Rows.Count, 1).End(xlUp).Row)
                .Cells.FormatConditions.Delete
                .FormatConditions.Add Type:=xlTextString, String:="SubFolder:" _
                , TextOperator:=xlContains
                .FormatConditions(.FormatConditions.Count).SetFirstPriority
                With .FormatConditions(1).Font
                    .Bold = True
                End With
                With .FormatConditions(1).Interior
                    .PatternColorIndex = xlAutomatic
                    .ThemeColor = xlThemeColorDark1
                    .Color = 14869218
                End With
                .FormatConditions(1).StopIfTrue = False
            End With
        Application.ScreenUpdating = True
        End With
    End Function
    Voilà j'attends le retour

    Edit : j'ai oublié pour choisir les extensions, c'est dans le sub "FolderFileList" code ci-dessous (à mettre sans le point ("."))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MyExtensions = Array("exe", "jpeg", "jpg", "xlsx", "xls", "pdf") 'Ici on ajoute ou on enlève les extensions
    Dans le résultat on peut ouvrir directement le dossier en cliquant sur son nom, même chose pour le fichier

    Testé sur Excel 2010, windows 10

    Edit 2 : Ajout de "Application.ScreenUpdating" dans le code de la mise en forme
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  19. #39
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Bonjour RYU

    franchement on me donne le surnom de serial codeur mais je dois avouer que la palme te reviens

    j'ai pas tester je te fait confiance

    mais bien sur avec moi il y a toujours un "mais"

    je me demande si tu va pas trop loin dans tes délires

    redonne moi le cahier des charges en terme clair

    1 lister les fichiers dans certains dossiers
    2 exclure quoi et pourquoi? et surtout comment, a t on une liste pré établi une variable array ou autre
    3 ne prendre que certaines extensions

    je comprends pas pourquoi tu complique la chose en fait il y a quelques chose qui m'échappe

    dans le dernier model que je t'ai donné il y a 2 lignes debug
    ces lignes debug te donne le chemin complet soit du dossier soit du fichier

    comme je te l'ai dis précédemment a la place de ces deux lignes tu met tes conditions et inscription dans les cellules avec création de sheet pourquoi pas

    les exceptions peuvent être traitées exactement au même moment

    tu a dis précédemment aussi qu'il y avais des fichiers manquants dans le résultat de mon model ca me parait peu probable

    non il y a vraiment quelque chose qui m'échappe

    c'est bien j'apprécie ton engouement pour apprendre et enrichir ton expérience mais tu n'est pas sur la bonne voie a mon avis même si ca marche

    dis toi bien plus tu fera simple plus tu pourra modifier ,agrémenter , corriger . la en l'occurrence j'y métrais pas mes mains

    c'est pour cela que je n'ai pas testé

    reviens a l'essentiel tu verra par toi même

    prends une feuille blanche et écrit toi même le cahier des charges et fait avec tu verra les choses te paraitrons plus simples
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  20. #40
    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

    Patrick, tout passionné est un « serial codeur » surtout quand l'on découvre, teste, … moi y compris !

    C'était en toute amitié, certes quelque peu taquin mais sans arrière pensée offensante …
    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)

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. [Python 2.X] Ecrire plusieur fois dans une même cellule excel
    Par stagière38 dans le forum Général Python
    Réponses: 7
    Dernier message: 01/07/2014, 13h53
  2. [Débutant] sérialiser plusieurs fois dans le même fichier XML (VB.NET)
    Par anissa2 dans le forum Développement Windows
    Réponses: 1
    Dernier message: 02/01/2013, 15h02
  3. [2.x] Utiliser le même formulaire plusieurs fois dans la même page
    Par Daecarios dans le forum Symfony
    Réponses: 3
    Dernier message: 06/07/2012, 14h53
  4. utilisation de script js plusieurs fois dans une même page
    Par tribalnanasss dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 09/07/2010, 00h34
  5. [Applet]Utiliser plusieurs Applet dans une même classe
    Par BRAUKRIS dans le forum Applets
    Réponses: 5
    Dernier message: 11/06/2004, 15h27

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