Lister fichier dans repertoire avec derniere date de modification et utilisateur

legenie

XLDnaute Nouveau
Bonjour le Forum et tous les grands cerveaux qui y donnent de leur temps.

J'ai cherché dans le forum et trouvé 1 ou 2 sujet qui s'apparentais au mien mais sans plus; je suis novice.

Quelqu'un connaitrait-il une macro qui dans un fichier me parcour un repertoire et:

- en colonne A, liste les noms de fichiers
- en colonne B, affiche la date de dernière modification
- en colonne C, affiche le nom du PC (utilisateur qui a fait la modif)
- en colonne D, affiche le contenue de la celule "AD7" de l'onglet "FORCE"

Avez-vous besoin d'un fichier quelconque pour le test ou ça va ;) ?

Merci infiniment, c un peu urgent, je suis nul en VBA et là on touche à de l'objet.

Merci encore au meilleur forum sur Excel !!!!!!
 

Staple1600

XLDnaute Barbatruc
Re : Lister fichier dans repertoire avec derniere date de modification et utilisateur

Bonjour legenie et Bienvenue sur XLD

Ce sujet a souvent été abordé sur le forum.

Heureusement grâce au moteur de recherche, on peut facilement les retrouver.

Si le péril est imminent , une sortie de secours bis est prévue en bas de page.

La bien nommée section : Discussions similaires, ou cinq liens hypertextes t’emmèneront vers cinq discussions qui abordent peu ou prou des questions proches de la tienne.
Pour finir, l'urgence ici n'a pas cours, et sa simple évocation peut provoquer chez certains d’entre nous des bouffées de chaleur, et des crises d'urticaires.
Une piste néanmoins pour orienter les recherches que tu ne manqueras pas de faire après lu mon message, vois aussi du côté de vbscript (proche cousin du VBA et exploitable dans VBA)
En attendant un fichier (qui normalement devrait contenir des bouts de codes issus de tes recherches), je te souhaite une bonne journée, et adresse mon amical souvenir à Soizic Corne puisque nous sommes mercredi.

EDITION: Bonjour Jean-Marcel, CBernardT, Bonsoir BrunoM45
 
Dernière édition:

CBernardT

XLDnaute Barbatruc
Re : Lister fichier dans repertoire avec derniere date de modification et utilisateur

Bonjour à tous,

Ci-joint, un fichier qui explore le répertoire choisi, donne le nom des fichiers avec le lien hypertexte, les dates et heures de création et de dernière modification. A voir si quelqu'un peut ajouter le PC !!! Pour le reste....
La mise en forme conditionnelle s'arrête à 500 lignes.
 

Pièces jointes

  • Exploreur_Rep_SousRep.xls
    52.5 KB · Affichages: 528
Dernière édition:

legenie

XLDnaute Nouveau
Re : Lister fichier dans repertoire avec derniere date de modification et utilisateur

Merci infiniment à tous!

Staple1600 : très drôle :)

Jean Marcel : c'est parfait, j'avais pas tapé les bons mots clés. BM45 a fait un travail de titan (pour sa femme...) :)

CBernardT: Grave merci !!!!


Maintenant que j'ai le "bout" de code de BM45 et je suis nul en VBA, comment pourrait-on rajouter en colonne J: le nom de l'utilisateur qui a fait la dernière modification et en colonne K le contenu de la cellule "AE7" de chaque fichier... :) ???

Les onglets en question sont : "Listing", "Previous" et "Histo".

Merci
 

Pièces jointes

  • Historique Fichiers V1.4.zip
    157.4 KB · Affichages: 197

Staple1600

XLDnaute Barbatruc
Re : Lister fichier dans repertoire avec derniere date de modification et utilisateur

Bonsoir à tous

Drôle mais sérieux
VB:
Dim objShell As Object, objFolder As Object 'extrait du code de la PJ de CBernardT
Set objShell = CreateObject("Shell.Application")

C'est ce que j'appelle du vbscript (donc la piste était bonne)

Le lien indiqué par Jean-Marcel prouve qu'il a utilisé le moteur de recherche.

Pour ta dernière question, même suggestion: le moteur de recherche du forum
(à moins que tu estimes qu'un génie ne touche qu'aux lampes et pas aux loupes)
Parce que la loupe est est pas loin , juste en haut à droite, et elle peut t'emmener loin dans les archives du forum où dorment des perles de discussions dont celle qui pourra t'aider à identifier la dernière personne à avoir modifié le fichier.

Allez je suis gentil, je t'indique le mot-clé:
ActiveWorkbook.BuiltinDocumentProperties
 
Dernière édition:

legenie

XLDnaute Nouveau
Re : Lister fichier dans repertoire avec derniere date de modification et utilisateur

Merci S1600. le très drole ct sur la tournure de tes phrases en fait :)

J'ai ce code sur un forum anglais et meme malgré le mot donné (je trouverai d'autre code) je n'arriverai pas à les adapter au code de BM45, je suis très novice (rien avoir avec mon nom mdr :)).

[highlight]
Option Explicit

Sub Users_Fullname()
'originally coded as VB script by A.Vials, converted to VBA by Sly
Dim objInfo
Dim strLDAP
Dim strFullName

Set objInfo = CreateObject("ADSystemInfo")
strLDAP = objInfo.UserName
Set objInfo = Nothing
strFullName = GetUserName(strLDAP)

MsgBox "Full name of User is " & strFullName 'step to test

End Sub

Function GetUserName(strLDAP)
Dim objUser
Dim strName
Dim arrLDAP
Dim intIdx

On Error Resume Next
strName = ""
Set objUser = GetObject("LDAP://" & strLDAP)
If Err.Number = 0 Then
strName = objUser.Get("givenName") & Chr(32) & objUser.Get("sn")
End If
If Err.Number <> 0 Then
arrLDAP = Split(strLDAP, ",")
For intIdx = 0 To UBound(arrLDAP)
If UCase(Left(arrLDAP(intIdx), 3)) = "CN=" Then
strName = Trim(Mid(arrLDAP(intIdx), 4))
End If
Next
End If
Set objUser = Nothing

GetUserName = strName

End Function

[/code]
 

legenie

XLDnaute Nouveau
Re : Lister fichier dans repertoire avec derniere date de modification et utilisateur

Je demande juste une adaptation du code de BM45 joint plus haut...Staple1600 toi qui est en statut "MEGA Barbetruc" doit surement comprendre les tournure du code de BM45.

Par exemple je ne sais si les codes me doneront le nom de l'auteur du fichier ou réellement de celui qui a fait la dernière modification. Moi je cherche la dernière modification

Merci d'avance
 
Dernière édition:

legenie

XLDnaute Nouveau
Re : Lister fichier dans repertoire avec derniere date de modification et utilisateur

Au risque de passer pour un toto, j'ai affronté le code de BM45 et insérer en colonne "J" ce code après plusieur recherche:

Code:
     .Range("J" & Lig).Value = FileItem.BuiltinDocumentProperties("Last Author")

j'ai une erreur du type: "Propriété ou méthode non gérée par cet objet"

j'ai ensuite essayé ça:

Code:
 .Range("J" & Lig).Value = FileItem.LastAuthor

même avec un simple : [highlight] FileItem.Author[/code] il n'y a rien à faire....

Et dire que je pensais pouvoir être fière de moi, c'est mal parti :)

Voici l’irrésistible codois :

[highlight]
Code:
Option Explicit
' Liste les fichiers d'un dossier et de ses sous dossiers
' dans une feuille de calcul avec certains renseignements
' Créé par BrunoM45 - infopassion@free.fr

Public FlgFirst As Boolean, FlgVoir As Boolean

Sub MaJ_Historique()
  Dim DerLig As Long, Lig As Long
  Dim LigF As Long, LigF2 As Long, VSearch As String
  Dim ShtL As Worksheet, ShtP As Worksheet
  Dim LigH As Long, ShtH As Worksheet
  Dim RootFolder As String
  Dim FlgAjt As Boolean, FlgMod As Boolean, FlgSup As Boolean, FlgDep As Boolean
  Dim IcAjt As Long, IcMod As Long, IcSup As Long, IcDep As Long
  ' Initialisation des variables objet
  Set ShtL = Sheets("Listing")
  Set ShtP = Sheets("Previous")
  Set ShtH = Sheets("Histo")
  With Sheets("Accueil")
    FlgAjt = (.Range("FicAjt") = "Oui")
    IcAjt = .Range("FicAjt").Interior.ColorIndex
    FlgMod = (.Range("FicMod") = "Oui")
    IcMod = .Range("FicMod").Interior.ColorIndex
    FlgSup = (.Range("FicSup") = "Oui")
    IcSup = .Range("FicSup").Interior.ColorIndex
    FlgDep = (.Range("FicDep") = "Oui")
    IcDep = .Range("FicDep").Interior.ColorIndex
    ' Visualiser l'avancement
    FlgVoir = (.Range("VisuAvt") = "Oui")
    ' Répertoire de référence
    RootFolder = .Range("DossierRef").Value
  End With
  ' Effacer l'ancien historique
  With ShtP
    DerLig = .Range("A" & Rows.Count).End(xlUp).Row
    If DerLig > 1 Then
      .Range("A2:H" & DerLig).EntireRow.Delete
    End If
  End With
  ' Choix du dossier à scanner
  If RootFolder = "" Then
    RootFolder = ChoisirDossier("Choisissez un répertoire")
  End If
  
  ' si aucun dossier alors on sort de la procédure
  If RootFolder = "" Then Exit Sub
  ' Copie de l'historique vers archives Histo
  ' Et effacer la feuille Listing
  With ShtL
    DerLig = .Range("A" & Rows.Count).End(xlUp).Row
    If DerLig > 1 Then
      .Range("A2:H" & DerLig).Copy Destination:=ShtP.Range("A2")
      .Range("A2:H" & DerLig).EntireRow.Delete
    End If
  End With
  ' Lister tous les fichiers du dossier et sous-dossier
  ListFilesInFolder "Listing", RootFolder, True
  
  ' Si c'est la première fois, pas d'historique à faire
  If FlgFirst = True Then FlgFirst = False: GoTo FinProc
  '
  ' EFFECTUER ENSUITE L'HISTORIQUE
  ' AJOUT et MODIFICATION
  With ShtL
    ' Visualiser l'avancement ou non
    If FlgVoir Then .Activate
    ' Récupérer la dernière ligne de la feuille Listing
    DerLig = .Range("A" & Rows.Count).End(xlUp).Row
    ' Pour chaque ligne
    For Lig = 2 To DerLig
      ' Visualiser l'avancement ou non
      If FlgVoir Then .Range("A" & Lig).Select
      ' Mettre à jour l'affichage du staut
      Application.DisplayStatusBar = True
      Application.StatusBar = "Historique AJT/MODIF vérification ligne : " & Lig & " sur " & DerLig
      '
      VSearch = .Range("C" & Lig).Value
      LigF = LigFind(VSearch, ShtP.Name, "C")
      If LigF = 0 Then
        ' Le fichier n'a pas été trouvé
        .Range("H" & Lig).Value = "Ajouté"
        .Range("A" & Lig & ":H" & Lig).Interior.ColorIndex = IcAjt
        If FlgAjt = True Then
          ' Prochaine ligne vide dans historique
          LigH = ShtH.Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Row
          ' Inscrire l'historique
          .Range("A" & Lig & ":H" & Lig).Copy Destination:=ShtH.Range("A" & LigH)
          ShtH.Range("I" & LigH).Value = Now()
        End If
      Else
        ' Le fichier à été trouvé, vérifier la date
        If .Range("E" & Lig) <> ShtP.Range("E" & LigF) Then
          .Range("H" & Lig).Value = "Modifié"
          .Range("A" & Lig & ":H" & Lig).Interior.ColorIndex = IcMod
          If FlgMod = True Then
            ' Prochaine ligne vide dans historique
            LigH = ShtH.Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Row
            ' Inscrire l'historique
            .Range("A" & Lig & ":H" & Lig).Copy Destination:=ShtH.Range("A" & LigH)
            ShtH.Range("I" & LigH).Value = Now()
          End If
        Else
          .Range("H" & Lig).Value = "RàS"
        End If
      End If
    Next Lig
  End With
  ' SUPPRESSION
  With ShtP
    ' Visualiser l'avancement ou non
    If FlgVoir Then .Activate
    ' Récupérer la dernière ligne de la feuille Listing
    DerLig = .Range("A" & Rows.Count).End(xlUp).Row
    ' Pour chaque ligne
    For Lig = 2 To DerLig
      ' Visualiser l'avancement ou non
      If FlgVoir Then .Range("A" & Lig).Select
      ' Mettre à jour l'affichage
      Application.DisplayStatusBar = True
      Application.StatusBar = "Historique DEPLT/SUPPR vérification ligne : " & Lig & " sur " & DerLig
      '
      VSearch = .Range("C" & Lig).Value
      LigF = LigFind(VSearch, ShtL.Name, "C")
      If LigF = 0 Then
        ' Recherche si fichier déplacé
        VSearch = .Range("B" & Lig).Value
        LigF2 = LigFind(VSearch, ShtL.Name, "B")
        If LigF2 <> 0 Then
          ' Le fichier a été trouvé mais dans un autre répertoire
          .Range("H" & Lig).Value = "Déplacé"
          .Range("A" & Lig & ":H" & Lig).Interior.ColorIndex = IcDep
          If FlgDep = True Then
            ' Prochaine ligne vide dans historique
            LigH = ShtH.Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Row
            .Range("A" & Lig & ":H" & Lig).Copy Destination:=ShtH.Range("A" & LigH)
            ShtH.Range("I" & LigH).Value = Now()
          End If
        Else
          ' Le fichier n'a pas été trouvé
          .Range("G" & Lig).Value = "Supprimé"
          .Range("A" & Lig & ":H" & Lig).Interior.ColorIndex = IcSup
          If FlgSup = True Then
            ' Prochaine ligne vide dans historique
            LigH = ShtH.Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Row
            .Range("A" & Lig & ":H" & Lig).Copy Destination:=ShtH.Range("A" & LigH)
            ShtH.Range("I" & LigH).Value = Now()
          End If
        End If
      End If
    Next Lig
  End With
  '
FinProc:
  ' Mettre à jour les date de MàJ
  With Sheets("Accueil")
    .Range("PreviousMaJ").Value = .Range("DerniereMaJ").Value
    .Range("DerniereMaJ").Value = Now()
  End With
  
  ' Effacer l'ancien TCD
  With Sheets("TCD")
    DerLig = .Range("A" & Rows.Count).End(xlUp).Row
    .Range("A1:B" & DerLig).ClearContents
    .Range("A1:B" & DerLig).ClearFormats
  End With
  ' Dernière ligne de la feuille Listing
  DerLig = ShtL.Range("A" & Rows.Count).End(xlUp).Row
  ' Lancer la création du TCD
  ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
        "Listing!R1C1:R" & DerLig & "C7").CreatePivotTable TableDestination:= _
        "'[" & ThisWorkbook.Name & "]TCD'!R1C1", TableName:= _
        "TCD1", DefaultVersion:=xlPivotTableVersion10
  With Sheets("TCD")
    .PivotTables("TCD1").AddFields RowFields:= _
        "Chemin d'accès"
    .PivotTables("TCD1").PivotFields("Taille"). _
        Orientation = xlDataField
    ' Formatage des nombre
    DerLig = .Range("A" & Rows.Count).End(xlUp).Row
    .Range("B3:B" & DerLig).NumberFormat = "# ##0"" Ko"""
    .Range("B:B").ColumnWidth = 13
    .Activate
  End With
  MsgBox "Historique effectué, TCD créé, c'est terminé ;-)", vbInformation, "C'EST FINI ..."
  ' Effacer les variables objet
  Set ShtL = Nothing
  Set ShtP = Nothing
  Set ShtH = Nothing
End Sub

Sub CompareFolder()
  Dim Col As Integer, DerLig As Long, Lig As Long, RootFolder1 As String, RootFolder2 As String
  Dim IcRec As Long, TpR() As String, Msg1 As String, Msg2 As String
  ' Définir le tableau des dates plus récentes
  TpR = Split("Création,Modification,Accès", ",")
  ' Couleur à utiliser pour donnée plus récente
  IcRec = Sheets("Accueil").Range("DonPR").Interior.ColorIndex
  ' Effacer l'ancien comparatif
  With Sheets("Comparatif")
    DerLig = .Range("A" & Rows.Count).End(xlUp).Row
    If DerLig > 1 Then
      .Range("A2:H" & DerLig).EntireRow.Delete
    End If
  End With
  ' 1er dossier à analyser
  RootFolder1 = Sheets("Accueil").Range("RepComp1").Value
  ' Choix du dossier à scanner
  If RootFolder1 = "" Then RootFolder1 = ChoisirDossier("Choisissez le répertoire n° 1")
  If RootFolder1 <> "" Then
    Sheets("Accueil").Range("RepComp1").Value = RootFolder1
  Else
    MsgBox "Impossible de continuer, vous devez choisir le dossier à analyser !", vbCritical, "ARRET de la MACRO"
    Exit Sub
  End If
  ' 2ème dossier à analyser
  RootFolder2 = Sheets("Accueil").Range("RepComp2").Value
  ' Choix du dossier à scanner
  If RootFolder2 = "" Then RootFolder2 = ChoisirDossier("Choisissez le répertoire n° 2")
  If RootFolder2 <> "" Then
    Sheets("Accueil").Range("RepComp2").Value = RootFolder2
  Else
    MsgBox "Impossible de continuer, vous devez choisir le dossier à analyser !", vbCritical, "ARRET de la MACRO"
    Exit Sub
  End If
  ' Lister tous les fichiers du dossier 1 et sous-dossier
  ListFilesInFolder "Comparatif", RootFolder1, True
  ' Lister tous les fichiers du dossier 2 et sous-dossier
  ListFilesInFolder "Comparatif", RootFolder2, True
  ' Avec la feuille de comparatif
  With Sheets("Comparatif")
    ' Trier par nom de fichier
    DerLig = .Range("A" & Rows.Count).End(xlUp).Row
    .Range("A1:H" & DerLig).Sort Key1:=.Range("B1"), Order1:=xlAscending, _
                                 Key2:=.Range("A1"), Order2:=xlAscending, Header:=xlYes, OrderCustom:=1, _
                                 MatchCase:=False, Orientation:=xlTopToBottom

    ' Faire le comparatif pour chaque fichier
    Lig = 2
    Do
      ' Si les 2 lignes qui ce suivent ont le même nom de fichier
      If .Range("B" & Lig) = .Range("B" & Lig + 1) Then
        ' Vérifier les dates pour les 2 fichiers
        For Col = 1 To 3
          If .Cells(Lig, 3 + Col).Value > .Cells(Lig + 1, 3 + Col).Value Then
            .Cells(Lig, 3 + Col).Interior.ColorIndex = IcRec
            Msg1 = Msg1 & TpR(Col - 1) & ","
            'If Col = 2 Then .Range("H" & Lig).Value = "Plus récent (date de modification)"
          End If
          If .Cells(Lig + 1, 3 + Col).Value > .Cells(Lig, 3 + Col).Value Then
            .Cells(Lig + 1, 3 + Col).Interior.ColorIndex = IcRec
            Msg2 = Msg2 & TpR(Col - 1) & ","
            'If Col = 2 Then .Range("H" & Lig).Value = "Plus récent (date de modification)"
          End If
        Next Col
        If Len(Msg1) > 0 Then
          Msg1 = Left(Msg1, Len(Msg1) - 1)
          .Range("H" & Lig).Value = "Plus récent (" & Msg1 & ")"
          Msg1 = ""
        End If
        If Len(Msg2) > 0 Then
          Msg2 = Left(Msg2, Len(Msg2) - 1)
          .Range("H" & Lig + 1).Value = "Plus récent (" & Msg2 & ")"
          Msg2 = ""
        End If
        ' Incrémenter la ligne
        Lig = Lig + 2
      Else  ' Si sur les 2 lignes le fichier est différent
        If .Range("A" & Lig) = RootFolder1 Then
          .Range("H" & Lig).Value = "Fichier inexistant dans : " & RootFolder2
        Else
          .Range("H" & Lig).Value = "Fichier inexistant dans : " & RootFolder1
        End If
        Lig = Lig + 1
      End If
    Loop While .Range("A" & Lig).Value <> ""
    ' Trier par nom complet
    .Range("A1:H" & DerLig).Sort Key1:=.Range("C1"), Order1:=xlAscending, _
                                 Header:=xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
  End With
End Sub

Sub ListFilesInFolder(ShtDest As String, SourceFolderName As String, IncludeSubfolders As Boolean)
' http://msdn.microsoft.com/en-us/library/hww8txat(VS.85).aspx
Dim FSO 'As Scripting.FileSystemObject
Dim SourceFolder 'As Scripting.Folder
Dim SubFolder 'As Scripting.Folder
Dim FileItem 'As Scripting.File
Dim Lig As Long, Ind As Long

  Set FSO = CreateObject("Scripting.FileSystemObject")
  Set SourceFolder = FSO.GetFolder(SourceFolderName)
  With Sheets(ShtDest)
    ' Visualiser l'avancement ou non
    If FlgVoir Then .Activate
    ' Ligne suivante
    Lig = .Range("A" & Rows.Count).End(xlUp).Row + 1
    Ind = 1
    For Each FileItem In SourceFolder.Files
      ' Visualiser l'avancement ou non
      If FlgVoir Then .Range("A" & Lig).Select
      ' Mettre à jour l'affichage
      Application.DisplayStatusBar = True
      Application.StatusBar = "Inscription fichier : " & Ind & " sur " & SourceFolder.Files.Count & " - Répertoire : " & SourceFolder.Name
      ' Inscrire les propriétés de chaque fichier
      .Range("A" & Lig).Value = FileItem.ParentFolder
      .Range("B" & Lig).Value = FileItem.Name
      ' Nom complet Path + Nom
      .Range("C" & Lig).Value = FileItem.ParentFolder & "\" & FileItem.Name
      ' Date de création
      .Range("D" & Lig).Value = FileItem.DateCreated
      ' Date de modification
      .Range("E" & Lig).Value = FileItem.DateLastModified
      ' Date d'accès
      .Range("F" & Lig).Value = FileItem.DateLastAccessed
      ' Taille du fichier en Ko
      .Range("G" & Lig).Value = Round(FileItem.Size / 1024, 0)
      ' Nom du dernier Autheur
      .Range("J" & Lig).Value = FileItem.Author
      ' numéro de Ligne suivante
      Lig = Lig + 1
      Ind = Ind + 1
    Next FileItem
    ' Faire les sous-dossier
    If IncludeSubfolders Then
      For Each SubFolder In SourceFolder.SubFolders
        ListFilesInFolder ShtDest, SubFolder.Path, True
      Next SubFolder
    End If
  End With
  ' Effacer les variables objet
  Set FileItem = Nothing
  Set SourceFolder = Nothing
  Set FSO = Nothing
End Sub


Private Function ChoisirDossier(LibTxt As String)
  Dim objShell, objFolder, VPath, SecuritySlash

  Set objShell = CreateObject("Shell.Application")
  Set objFolder = _
  objShell.BrowseForFolder(&H0&, LibTxt, &H1&)
  On Error Resume Next
  VPath = objFolder.ParentFolder.ParseName(objFolder.Title).Path & ""
  If objFolder.Title = "Bureau" Then
    ' D'parès une idée de MichelXLD
    VPath = CreateObject("WScript.Shell").SpecialFolders("Desktop")
  End If
  If objFolder.Title = "" Then
    VPath = ""
  End If
  ' Vérifier si slash à la fin
  SecuritySlash = InStr(objFolder.Title, ":")
  If SecuritySlash > 0 Then
    VPath = Mid(objFolder.Title, SecuritySlash - 1, 2) & ""
  End If
  ' Incrire le répertoire de référence dans la feuille Accueil
  Sheets("Accueil").Range("DossierRef").Value = VPath
  ' Renvoyer le chemin dans la fonction
  ChoisirDossier = VPath
  ' Mettre le FLAG Première fois à VRAI
  FlgFirst = True
End Function

Function LigFind(VSearch As String, Sht As String, Col As String)
  LigFind = 0 ' Mettre la valeur à ZERO
  With Sheets(Sht).Range(Col & ":" & Col)
    On Error Resume Next
    LigFind = .Find(What:=VSearch, LookIn:=xlValues, LookAt:=xlPart, _
      SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False).Row
    On Error GoTo 0
  End With
End Function
[/code]

idem
 

Staple1600

XLDnaute Barbatruc
Re : Lister fichier dans repertoire avec derniere date de modification et utilisateur

Re

legenie:
Pour éclaircir mon propos, quand je croise un nouveau membre d'XLD (ce qui est ton cas), j'ai l'habitude de simplement lui suggérer les us et coutumes d'XLD (ce que d'autres ont fait pour moi en leur temps) pour :
1) continuer à espérer que des questions posées mille fois ne le seront pas mille et une fois
2) que le nouveau membre sache qu'en utilisant les possibilités offertes par XLD ( c'est normal qu'il les ignore puisqu'il est tout nouveau )
a) il peut dans certains cas trouver seul réponse à sa question dans les archives du forum
b) optimiser ses chances de réponses en simplement connaissant et appliquant les us et coutumes d'XLD
PS: Maintenant libre à chacun d'ignorer ou pas ce genre de message de ma part.
Mais ceux-ci n'ont aucun caractère personnel et ne vise personne en particulier.

Pour revenir à ta question:
Si tu utilises le code de BrunoM45 tel quel, dans un nouveau classeur, il faut activer une référence dans VBE: Microsoft Scritping Runtime
(Où il faut écrire le code différemment pour ne pas avoir à activer cette référence)
( Désolé mais des exemples de cette syntaxe sont dans les archives du forum ;)
Tu devrais les trouver en utilisant ce mot-clé:
Set fso = CreateObject("Scripting.FileSystemObject")

Et il faut modifier tes Dim ainsi
Dim FSO
'As Object
(Soit Tu mets un ' avant Object et tutti quanti ou tu les supprimes pour avoir par exemple)
Dim FSO

 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Lister fichier dans repertoire avec derniere date de modification et utilisateur

Re


Je suppose que tu as eu la curiosité d'aller voir le lien présent dans le code de BrunoM45
Ce lien n'existe plus

Sinon, tu peux aller y faire un tout, c'est très instructif (je viens d'y aller voir)
et sans doute cela éclaira-t-il un peu plus ta lanterne.

PS: Tu commences pas par le plus facile, si tu débutes le VBA
Merci infiniment, c un peu urgent, je suis nul débutant (c'est mieux non ?) en VBA et là on touche à de l'objet.
Mais c'est tout à ton honneur.
(J'espère que tu as un stock de Dolipr-- à disposition ;) )
 
Dernière édition:

legenie

XLDnaute Nouveau
Re : Lister fichier dans repertoire avec derniere date de modification et utilisateur

Mdr!

Staple1600... Je t'entends rire comme je râle ... Je ne pensais pas qu'on puisse autant s'amuser autour d'une tombe...

Je suis moooooooooooooort, j'ai la tête en feu !!!!!:mad:

Non, lol, plus sérieusement, c'est vrai que je commence pas avec de la tartine; J'ai fait de l'algorithme et je comprend "la logique des codes". Mais là, c'est plus de la logique mais du code.

Donc voila ce que j'ai cru comprendre faire:

Activer le MRS : C'est fait : Outils\références et cocher la case. OK
DIm FSO c'est comme ça depuis le départ.

créé une nouveeau paramètre Objet windows :*

Code:
Set objInfo = CreateObject("ADSystemInfo") 
sourceInfo = objInfo.UserName 
Set objInfo = Nothing 
strFullName = GetUserName(sourceInfo)

Mais comment intégrer àa adns la boucle du code de BM45 qui indexé sur :
Code:
  Set FSO = CreateObject("Scripting.FileSystemObject")
  Set SourceFolder = FSO.GetFolder(SourceFolderName)

  With Sheets(ShtDest)
    ' Visualiser l'avancement ou non
    If FlgVoir Then .Activate
    ' Ligne suivante
    Lig = .Range("A" & Rows.Count).End(xlUp).Row + 1
    Ind = 1
    For Each FileItem In SourceFolder.Files
      ' Visualiser l'avancement ou non
      If FlgVoir Then .Range("A" & Lig).Select
      ' Mettre à jour l'affichage
      Application.DisplayStatusBar = True
      Application.StatusBar = "Inscription fichier : " & Ind & " sur " & SourceFolder.Files.Count & " - Répertoire : " & SourceFolder.Name
      ' Inscrire les propriétés de chaque fichier
      .Range("A" & Lig).Value = FileItem.ParentFolder
      .Range("B" & Lig).Value = FileItem.Name
      ' Nom complet Path + Nom
      .Range("C" & Lig).Value = FileItem.ParentFolder & "\" & FileItem.Name
      ' Date de création
      .Range("D" & Lig).Value = FileItem.DateCreated
      ' Date de modification
      .Range("E" & Lig).Value = FileItem.DateLastModified
      ' Date d'accès
      .Range("F" & Lig).Value = FileItem.DateLastAccessed
      ' Taille du fichier en Ko
      .Range("G" & Lig).Value = Round(FileItem.Size / 1024, 0)
     
      [COLOR="red"]' Nom du dernier Autheur[/COLOR]
      .Range("J" & Lig).Value = FileItem.Author



      ' numéro de Ligne suivante
      Lig = Lig + 1
      Ind = Ind + 1
    Next FileItem
    ' Faire les sous-dossier
    If IncludeSubfolders Then
      For Each SubFolder In SourceFolder.SubFolders
        ListFilesInFolder ShtDest, SubFolder.Path, True
      Next SubFolder
    End If
  End With
  ' Effacer les variables objet
  Set FileItem = Nothing
  Set SourceFolder = Nothing
  Set FSO = Nothing

endsub
 

Discussions similaires

Statistiques des forums

Discussions
312 231
Messages
2 086 448
Membres
103 213
dernier inscrit
Poupoule