Résolu Afficher une liste de fichiers dans une celulle Excel

DEFSTRANGER

Habitué
Bonjour,

J'aurai besoin d'afficher une liste de fichier. Je m'explique.

Mon tableur se décompose en plusieurs parties. La partie haute reprend le logo, le compte ADM à saisir '(variable), le mot de passe de compte adm à saisir (variable), une adresse ip à saisir (variable) et le bouton de prise en compte des variables.
Puis tout le reste est divisé en quatre afin d'afficher dans chacune des 4 cellules une liste de fichier. (Nom de fichier + extension + date de création). Le but étant de suivre 4 répertoires précis sur chacun des serveurs de mon parc en alerte. Et lorsque que le répertoire n'existe pas, je ferai afficher un message du style "Le répertoire n'a pu être joints".

Je commence à jouer pas mal avec les macros VB. Je vois à peu près comment préparer ma macros. Mais, je ne vois pas du tout comment afficher le résultat souhaité dans les 4 cases (nom de fichier + extension + date de création).

Quelqu'un pourrait-il me donner une piste ?

Merci
 

drul

Obscur pro du hardware
Staff
Salut,
4 cases, mais 3 données, euh ...

Enfin pour les trois données que tu cites, voici:
Code:
Sub GetFileData()
    Dim fso
    Dim Aname As String
    Dim AFileExtension As String
    Dim AFilename As String
    Dim ADate As String
    Dim APath As String
    Dim fo
    Set fso = CreateObject("Scripting.FileSystemObject")
    APath = "c:\test\" 'ton dossier
    Aname = APath & Dir(APath)
    While Aname <> APath
 
        Set fo = fso.GetFile(Aname)
        AFileExtension = fso.GetExtensionName(Aname)
        AFilename = fso.GetBaseName(Aname)
        ADate = fo.DateCreated
        
        ' juste pour la démo un msgbox, mais fais ce que tu veux de ces données ...
        MsgBox "Full file name: " & Aname & Chr(13) & " Filename (without ext): " & AFilename & Chr(13) & " DateCreated :" & ADate & Chr(13) & " Extension: " & AFileExtension
        
        Aname = APath & Dir

    Wend
End Sub
 

DEFSTRANGER

Habitué
Merci Drul :)
En fait, il y a bien 4 cellules, mais je peux les diviser chacune en trois.
L'objectif étant d'analyser qu'il n'y a pas de blocage dans aucun des 4 répertoires surveillés.
Exemple :
c:\etape1\*.*, C:\etape 2\*.*, C:\etape 3\*.*, C:\etape 4\*.*
Je vais déjà tester dès que j'aurai un moment ce que tu m'as proposé :)
 

DEFSTRANGER

Habitué
Je suis un peu perdu... J'ai changé le nom de l'arborescence afin de positionner mon premier répertoire à analyser.
Mais rie ne se passe, même au 'pas à pas', je ne vois rien.
J'ai essayé de remplacer la msgbox par un dépôt dans une cellule et rien non plus et pas de message d'erreur...
Du coup, je pense que je n'ai pas du comprendre les étape de la macro.
' création de l'objet qui mémorisera les infos recherchées ?
Set fso = CreateObject("Scripting.FileSystemObject")

' repérage du répertoire à analyser ?
APath = "c:\test\" 'ton dossier

Dépôt des informations à analyser dans une variable
Aname = APath & Dir(APath)

'Séparation d nom et du chemin ?
While Aname <> APath

' Je ne suis pas sur de comprendre cette étape
Set fo = fso.GetFile(Aname)

'Récupération de l'extension des fichiers ?
AFileExtension = fso.GetExtensionName(Aname)

'Récupération du nom de fichier dans extension ?
AFilename = fso.GetBaseName(Aname)

'Récupération de la date de création du fichier ?
ADate = fo.DateCreated

Merci de m'éclairer :)



 

drul

Obscur pro du hardware
Staff
salut, post ton code ici ..


' repérage du répertoire à analyser ? oui, attention à pas oublié le "\" à la fin !
APath = "c:\test\" 'ton dossier

Dépôt des informations à analyser dans une variable: on vient scanner le répertoire cible et on prend le nom du premier fichier (avec dir(Apath))
Aname = APath & Dir(APath)

'Séparation d nom et du chemin ? on boucle tant que dir() ne renvoie pas "" (et par conséquant que Aname <> Apath)
While Aname <> APath

' Je ne suis pas sur de comprendre cette étape por récupérer la date de création, on a besoin d'un FileObject qui pointe sur ton fichier
Set fo = fso.GetFile(Aname)

'Récupération de l'extension des fichiers ? oui !
AFileExtension = fso.GetExtensionName(Aname)

'Récupération du nom de fichier sans extension ? oui !
AFilename = fso.GetBaseName(Aname)

'Récupération de la date de création du fichier ? oui, c'est ici qu'on utilise le FileObject
ADate = fo.DateCreated
 

DEFSTRANGER

Habitué
Effectivement avec un '\' à la fin ça va déjà mieux :)

Donc j'ai bien les msg box.
Mais pour déposer dans ma cellule mes informations, il n'aime pas 'ActiveCell' :
Code:
Sub Analyse()


' Déclaration des variables
    Dim fso
    Dim Aname As String
    Dim AFileExtension As String
    Dim AFilename As String
    Dim ADate As String
    Dim APath As String
    Dim fo

' Création de la liste de fichiers pour backup_scan

    Set fso = CreateObject("Scripting.FileSystemObject")
    APath = "C:\Users\xxxxx\Desktop\analyse_serveurs\backup_scan\"
    Aname = APath & Dir(APath)
    While Aname <> APath

        Set fo = fso.GetFile(Aname)
        AFileExtension = fso.GetExtensionName(Aname)
        AFilename = fso.GetBaseName(Aname)
        ADate = fo.DateCreated

   Windows("analyse_serveurs.xlsm").Activate
     Range("A6").Select
     ActiveCell.Analyse = Aname
     
     
 ' juste pour la démo un msgbox, mais fais ce que tu veux de ces données ...
'        MsgBox "Full file name: " & Aname & Chr(13) & " Filename (without ext): " & AFilename & Chr(13) & " DateCreated :" & ADate & Chr(13) & " Extension: " & AFileExtension
'        Aname = APath & Dir

    Wend
End Sub
 

drul

Obscur pro du hardware
Staff
Gné ? [:lamoufetteencolere:1]

ActiveCell.Analyse = Aname
Connait pas de propriété analyse moi ...

ActiveCell.Value peut-être ?

Edit: utilise les balises [code="vb"] ... ton code ... [/code] stp
 

DEFSTRANGER

Habitué
OUPS... J'ai mis le nom de l'onglet qui s'appelle 'analyse'.... autant pour moi :)

J'ai bien avancé. j'ai adapté pour que le résultat s'affiche dans la cellule. Le nom de fichier, suivi d'un espace, suivi de la date et de l'heure de création. Nikel.

Maintenant reste la boucle. Celle que tu m'avais proposé, était valable pour la msgbox, mais là, étant donné qu'il n'y a pas de bouton ok, je ne peux pas demander la suite.

Si je retire la boucle, je n'ai que le dernier fichier qui s'affiche.
L'objectif est d'afficher la liste.

Code:
'    While Aname <> APath
        Set fo = fso.GetFile(Aname)
        AFileExtension = fso.GetExtensionName(Aname)
        AFilename = fso.GetBaseName(Aname)
        ADate = fo.DateCreated
    Result = Dir(APath) & "  " & ADate
   Windows("analyse_serveurs.xlsm").Activate
     Range("A6").Select
     ActiveCell.Value = Result
 '   Wend

Que dois-je rajouter pour l'ensemble des fichiers s'affiche ? merci
 

drul

Obscur pro du hardware
Staff
mauvaise utilisation de "dir" ici !
Cette fonction marche de la manière suivante:
1er appel: "dir(Path)" retourne le nom premier fichier dans path
Ensuite: "dir()" sans argument, retourne le fichier suivant jusqu'au dernier fichier, ensuite il return une string vide "".


Et rognetudju,

Code:
   Windows("analyse_serveurs.xlsm").Activate
     Range("A6").Select
     ActiveCell.Value = Result

se remplace avantageusement par:

Code:
   Windows("analyse_serveurs.xlsm").Range("A6").Value = Result
 

DEFSTRANGER

Habitué
Donc, je ne peux pas utiliser cette commande pour afficher dans la cellule l'ensemble de la liste ?
Dans ce cas par quel code je peux remplacer ?

J'ai essayé de mettre ce que tu m'as proposé :

[Windows("analyse_serveurs.xlsm").Range("A6").Value = Result]

Mais, il a pas aimé => propriété ou méthode non gérée.



 

drul

Obscur pro du hardware
Staff
Meilleure réponse
Manque la "sheet" sorry :)
bon je te le fais:
Code:
Sub Analyse()
 
 
' Déclaration des variables
    Dim fso
    Dim Aname As String
    Dim AFileExtension As String
    Dim AFilename As String
    Dim ADate As String
    Dim APath As String
    Dim fo
    Dim target As Range
 
' Création de la liste de fichiers pour backup_scan
    Set target = Workbooks("analyse_serveurs.xlsm").Sheets("Analyse").Range("A6") 'si c'est bien le nom de ton onglet cible
    Set fso = CreateObject("Scripting.FileSystemObject")
    APath = "C:\Users\xxxxx\Desktop\analyse_serveurs\backup_scan\"
    Aname = Dir(APath)
    
    While Aname <> ""
        Set fo = fso.GetFile(APath & Aname)
        ADate = fo.DateCreated
        target.Value = Aname & " " & ADate
        Set target = target.Offset(1, 0)
        Aname = Dir()
    Wend

End Sub
 

DEFSTRANGER

Habitué
C'est nickel. Merci.
Maintenant je vais essayer d'intégrer mes variables et de les concaténer avec le path.
 

drul

Obscur pro du hardware
Staff
C'est bien ce que je dis, commence par coincer (et si tu coinces pas c'est top !) et ensuite tu viens ... :o
 

DEFSTRANGER

Habitué
la première variable simulant l'adresse IP a été intégrée :

Code:
Sub Analyse()

'Déclaration des variables globales

    Dim IP As String
    

' Déclaration des variables

    Dim fso
    Dim Aname As String
    Dim AFileExtension As String
    Dim AFilename As String
    Dim ADate As String
    Dim APath As String
    Dim fo
    Dim target As Range

    Range("A6:X842").Select
    Selection.ClearContents

    Windows("analyse_serveurs.xlsm").Activate
     Range("K1:L2").Select
    IP = ActiveCell.FormulaR1C1
    MsgBox IP
    

 ' Création de la liste de fichiers pour backup_scan

    Set target = Workbooks("analyse_serveurs.xlsm").Sheets("Analyse").Range("A6")
    Set fso = CreateObject("Scripting.FileSystemObject")
    APath = IP & "\analyse_serveurs\backup_scan\"
    Aname = Dir(APath)

    While Aname <> ""

        Set fo = fso.GetFile(APath & Aname)
        ADate = fo.DateCreated
        target.Value = Aname & " " & ADate
        Set target = target.Offset(1, 0)
        Aname = Dir()

    Wend

' Déclaration des variables

    Dim fso2
    Dim Aname2 As String
    Dim AFileExtension2 As String
    Dim AFilename2 As String
    Dim ADate2 As String
    Dim APath2 As String
    Dim fo2
    Dim target2 As Range

 ' Création de la liste de fichiers pour backup_scan

    Set target2 = Workbooks("analyse_serveurs.xlsm").Sheets("Analyse").Range("G6")
    Set fso2 = CreateObject("Scripting.FileSystemObject")
    APath2 = IP & "\analyse_serveurs\Backupias3\"
    Aname2 = Dir(APath2)

    While Aname2 <> ""

        Set fo2 = fso2.GetFile(APath2 & Aname2)
        ADate2 = fo2.DateCreated
        target2.Value = Aname2 & " " & ADate2
        Set target2 = target2.Offset(1, 0)
        Aname2 = Dir()

    Wend

' Déclaration des variables

    Dim fso3
    Dim Aname3 As String
    Dim AFileExtension3 As String
    Dim AFilename3 As String
    Dim ADate3 As String
    Dim APath3 As String
    Dim fo3
    Dim target3 As Range

 ' Création de la liste de fichiers pour backup_scan

    Set target3 = Workbooks("analyse_serveurs.xlsm").Sheets("Analyse").Range("M6")
    Set fso3 = CreateObject("Scripting.FileSystemObject")
    APath3 = IP & "\analyse_serveurs\SAS-IAS3\"
    Aname3 = Dir(APath3)

    While Aname3 <> ""

        Set fo3 = fso3.GetFile(APath3 & Aname3)
        ADate3 = fo3.DateCreated
        target3.Value = Aname3 & " " & ADate3
        Set target3 = target3.Offset(1, 0)
        Aname3 = Dir()

    Wend
    
' Déclaration des variables

    Dim fso4
    Dim Aname4 As String
    Dim AFileExtension4 As String
    Dim AFilename4 As String
    Dim ADate4 As String
    Dim APath4 As String
    Dim fo4
    Dim target4 As Range

 ' Création de la liste de fichiers pour backup_scan

    Set target4 = Workbooks("analyse_serveurs.xlsm").Sheets("Analyse").Range("S6")
    Set fso4 = CreateObject("Scripting.FileSystemObject")
    APath4 = IP & "\analyse_serveurs\BACKUPIAS3\"
    Aname4 = Dir(APath4)

    While Aname4 <> ""

        Set fo4 = fso4.GetFile(APath4 & Aname4)
        ADate4 = fo4.DateCreated
        target4.Value = Aname4 & " " & ADate4
        Set target4 = target4.Offset(1, 0)
        Aname4 = Dir()

    Wend


End Sub[code]

Il y a peut-être mieux mais c'est opérationnel. J'ai les variable de compte adm et mdp demain. Merci
 

drul

Obscur pro du hardware
Staff
Alors oui, on peut faire mieux ;)

tu fais 4 fois la même chose en déclarant 4x des variables inutiles, ce qui donne un code très long, lourd, pénible à maintenir ...

plusieurs méthodes pour améliorer:
1) faire un boucle sur la partie répétitive
2) déclarer une fonction qui effectue la partie répétitive et l’appeler 4x
3) un mix des deux ...
 

drul

Obscur pro du hardware
Staff
Quelques question subsidiaire :
Tu "joues" avec plusieurs classeurs Excel ?
plusieurs feuille ?

ici:
Windows("analyse_serveurs.xlsm").Activate
Range("K1:L2").Select
IP = ActiveCell.FormulaR1C1
MsgBox IP

IP est en cellule K1 ? c'est bien ça ? si oui code très peu efficace et même dangereux suivant la réponse au question précédentes.

ici:
Range("A6:X842").Select
Selection.ClearContents

pourquoi 842 ?
Même remarque: si plusieures classeurs/onglets alors code très dangereux !
 

drul

Obscur pro du hardware
Staff
version 1)
Code:
Sub Analyse()
'Déclaration des variables globales
Dim IP As String
Dim fso
Dim Aname As String
Dim ADate As String
Dim APath(1 To 4) As String
Dim fo
Dim target(1 To 4) As Range
Dim i As Integer

Workbooks("analyse_serveurs.xlsm").Sheets("Analyse").Range("A6:X842").ClearContents
IP = Workbooks("analyse_serveurs.xlsm").Sheets("Analyse").Range("K1").FormulaR1C1

' Création de la liste de fichiers pour backup_scan
Set fso = CreateObject("Scripting.FileSystemObject")

Set target(1) = Workbooks("analyse_serveurs.xlsm").Sheets("Analyse").Range("A6")
Set target(2) = Workbooks("analyse_serveurs.xlsm").Sheets("Analyse").Range("G6")
Set target(3) = Workbooks("analyse_serveurs.xlsm").Sheets("Analyse").Range("M6")
Set target(4) = Workbooks("analyse_serveurs.xlsm").Sheets("Analyse").Range("S6")

APath(1) = IP & "\analyse_serveurs\backup_scan\"
APath(2) = IP & "\analyse_serveurs\Backupias3\"
APath(3) = IP & "\analyse_serveurs\SAS-IAS3\"
APath(4) = IP & "\analyse_serveurs\BACKUPIAS3\"

For i = 1 To 4
    Aname = Dir(APath(i))
    While Aname <> ""
        Set fo = fso.GetFile(APath(i) & Aname)
        ADate = fo.DateCreated
        target(i).Value = Aname & " " & ADate
        Set target(i) = target(i).Offset(1, 0)
        Aname = Dir()
    Wend
Next
End Sub
 

drul

Obscur pro du hardware
Staff
la 2), la plus propre à mon avis ... (je ne ferai pas la 3 qui n'a aucun intérêt ici)
Code:
Sub Analyse()
'Déclaration des variables
Dim IP As String

'Initialisation
Workbooks("analyse_serveurs.xlsm").Sheets("Analyse").Range("A6:X842").ClearContents
IP = Workbooks("analyse_serveurs.xlsm").Sheets("Analyse").Range("K1").FormulaR1C1

' Création de la liste de fichiers
writeFilename APath:=IP & "\analyse_serveurs\backup_scan\", Target:=Workbooks("analyse_serveurs.xlsm").Sheets("Analyse").Range("A6")
writeFilename APath:=IP & "\analyse_serveurs\Backupias3\", Target:=Workbooks("analyse_serveurs.xlsm").Sheets("Analyse").Range("G6")
writeFilename APath:=IP & "\analyse_serveurs\SAS-IAS3\", Target:=Workbooks("analyse_serveurs.xlsm").Sheets("Analyse").Range("M6")
writeFilename APath:=IP & "\analyse_serveurs\BACKUPIAS3\", Target:=Workbooks("analyse_serveurs.xlsm").Sheets("Analyse").Range("S6")
End Sub

Function writeFilename(APath As String, ByRef Target As Range)
Dim fso
Dim Aname As String
Dim ADate As String
Set fso = CreateObject("Scripting.FileSystemObject")
    Aname = Dir(APath)
    While Aname <> ""
        ADate = fso.GetFile(APath & Aname).DateCreated
        Target.Value = Aname & " " & ADate
        Set Target = Target.Offset(1, 0)
        Aname = Dir()
    Wend
Set fso = Nothing
End Function
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 128
Messages
6 717 845
Membres
1 586 373
Dernier membre
https://forum.tomshardwar
Partager cette page
Haut