Fichier de suivi
Bonjour à tous,
Je progresse en VBA, grâce à vous, mais toujours trop lentement pour ce que j’ai envie de faire.
Du coup, suite de mes aventures, avec aujourd’hui, un suivi !
J’aimerais que le tableau en Pj se remplisse seul, en allant chercher la présence des fichiers en colonne A dans les dossiers d’une arborescence qu’il m’aurait demandé avec une boîte de dialogue.
Les noms des dossiers sont connus.
La liste des fichiers serait renseignée par moi (il peut y en avoir plus de 2000).
Et du coup, dès qu’un fichier est présent dans un dossier, la case correspondante à la ligne du dossier rougie.
C’est-à-dire que dans le suivi d’un « workflow » à la fin, toutes les cases sont rouges.
Merci, beaucoup à tous ceux qui pourront m’aider.
Seb78
Bonjour Seb78
Pour info, caractère étrange (invisible) dans le nom du dossier parent de l'arborescence du dossier zippé
Sinon voici une possibilité
Sub TestFichierArbo()
Dim Col As Long, dLig As Long, Lig As Long
Dim sPathIni As String, Search As String
' Demander le choix du dossier parent
sPathIni = ChoixDossier(ThisWorkbook.Path, "CHOIX du DOSSIER PARENT")
If sPathIni = "" Then Exit Sub
' Sinon on parcours les dossiers indiqués
With ActiveSheet
dLig = .Range("A" & Rows.Count).End(xlUp).Row
' Parcourir chaque colonne
For Col = 2 To .Range("G1").Column
' Parcourir chaque ligne
For Lig = 3 To dLig
Search = sPathIni & "\" & .Cells(2, Col) & "\" & .Range("A" & Lig) & ".txt"
.Cells(Lig, Col).Value = Dir(Search) <> ""
Next Lig
Next Col
End With
End Sub
Function ChoixDossier(DefautPath As String, sTitre As String)
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFolderPicker)
With fd
.Title = sTitre
.InitialFileName = DefautPath
If .Show = -1 Then
ChoixDossier = fd.SelectedItems(1)
End If
End With
Set fd = Nothing
End FunctionEt le fichier avec le code
A+
Bonjour BrunoM45,
Pour l'histoire du caractère spécial… Je ne sais absolument pas du tout d'où ça vient… C'est corrigé, merci !
Concernant le code, c'est "quasi-parfait"... J'aurais juste deux questions :
1/ est-ce possible que la case passe en rouge (au lieu du vrai) et que rien ne s'affiche quand au lieu de faux,
2/ Est-ce possible que dans la case, on indique la date de dernier enregistrement du fichier pour chaque occurrence afin d'automatiser un suivi sur les délais de passage d'un état au suivant ?
Si cela demande trop de travail, laisse tomber, c'est déjà énorme ton truc !
Merci encore,
Seb78
Salut Seb78
1/ est-ce possible que la case passe en rouge (au lieu du vrai) et que rien ne s'affiche quand au lieu de faux,
Pour ça, tu peux faire une simple MFC : si VRAI alors fond rouge, écriture rouge; si FAUX alors écriture blanche
Sinon au lieu d'écrire directement le résultat, il faut faire un test
' .Cells(Lig, Col).Value = Dir(Search) <> ""
If Dir(Search) <> "" Then
.Cells(Lig, Col).Interior.Color = 255
EndifPour ce qui concerne
2/ Est-ce possible que dans la case, on indique la date de dernier enregistrement du fichier pour chaque occurrence afin d'automatiser un suivi sur les délais de passage d'un état au suivant ?Oui, c'est tout à fait possible, voici
Option Explicit
Sub TestFichierArbo()
Dim Col As Long, dLig As Long, Lig As Long
Dim sPathIni As String, Search As String
' Demander le choix du dossier parent
sPathIni = ChoixDossier(ThisWorkbook.Path, "CHOIX du DOSSIER PARENT")
If sPathIni = "" Then Exit Sub
' Sinon on parcours les dossiers indiqués
With ActiveSheet
dLig = .Range("A" & Rows.Count).End(xlUp).Row
' Parcourir chaque colonne
For Col = 2 To .Range("G1").Column
' Parcourir chaque ligne
For Lig = 3 To dLig
Search = sPathIni & "\" & .Cells(2, Col) & "\" & .Range("A" & Lig) & ".txt"
' # Modif du 13/12
If Dir(Search) <> "" Then
.Cells(Lig, Col).Value = Format(FileDateTime(Search), "dd/mm/yyyy")
.Cells(Lig, Col).Interior.Color = 255
End If
Next Lig
Next Col
End With
End Sub
Function ChoixDossier(DefautPath As String, sTitre As String)
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFolderPicker)
With fd
.Title = sTitre
.InitialFileName = DefautPath
If .Show = -1 Then
ChoixDossier = fd.SelectedItems(1)
End If
End With
Set fd = Nothing
End FunctionA+
T'as jamais fais fondre un clavier à taper si vite ?
Merci BEAUCOUP !
C'est parfait !