Se connecter / S'enregistrer
Votre question
Résolu

Afficher une liste de fichiers dans une celulle Excel

Tags :
  • Microsoft Excel
  • Programmation
Dernière réponse : dans Programmation
12 Septembre 2016 07:43:00

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

Autres pages sur : afficher liste fichiers celulle excel

12 Septembre 2016 08:28:00

Salut,
4 cases, mais 3 données, euh ...

Enfin pour les trois données que tu cites, voici:
  1. Sub GetFileData()
  2. Dim fso
  3. Dim Aname As String
  4. Dim AFileExtension As String
  5. Dim AFilename As String
  6. Dim ADate As String
  7. Dim APath As String
  8. Dim fo
  9. Set fso = CreateObject("Scripting.FileSystemObject")
  10. APath = "c:\test\" 'ton dossier
  11. Aname = APath & Dir(APath)
  12. While Aname <> APath
  13.  
  14. Set fo = fso.GetFile(Aname)
  15. AFileExtension = fso.GetExtensionName(Aname)
  16. AFilename = fso.GetBaseName(Aname)
  17. ADate = fo.DateCreated
  18.  
  19. ' juste pour la démo un msgbox, mais fais ce que tu veux de ces données ...
  20. MsgBox "Full file name: " & Aname & Chr(13) & " Filename (without ext): " & AFilename & Chr(13) & " DateCreated :" & ADate & Chr(13) & " Extension: " & AFileExtension
  21.  
  22. Aname = APath & Dir
  23.  
  24. Wend
  25. End Sub
m
0
l
12 Septembre 2016 10:43:41

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é :) 
m
0
l
Contenus similaires
12 Septembre 2016 11:24:37

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



m
0
l
12 Septembre 2016 11:57:53

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
m
0
l
12 Septembre 2016 12:07:55

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' :
  1. Sub Analyse()
  2.  
  3.  
  4. ' Déclaration des variables
  5. Dim fso
  6. Dim Aname As String
  7. Dim AFileExtension As String
  8. Dim AFilename As String
  9. Dim ADate As String
  10. Dim APath As String
  11. Dim fo
  12.  
  13. ' Création de la liste de fichiers pour backup_scan
  14.  
  15. Set fso = CreateObject("Scripting.FileSystemObject")
  16. APath = "C:\Users\xxxxx\Desktop\analyse_serveurs\backup_scan\"
  17. Aname = APath & Dir(APath)
  18. While Aname <> APath
  19.  
  20. Set fo = fso.GetFile(Aname)
  21. AFileExtension = fso.GetExtensionName(Aname)
  22. AFilename = fso.GetBaseName(Aname)
  23. ADate = fo.DateCreated
  24.  
  25. Windows("analyse_serveurs.xlsm").Activate
  26. Range("A6").Select
  27. ActiveCell.Analyse = Aname
  28.  
  29.  
  30. ' juste pour la démo un msgbox, mais fais ce que tu veux de ces données ...
  31. ' MsgBox "Full file name: " & Aname & Chr(13) & " Filename (without ext): " & AFilename & Chr(13) & " DateCreated :" & ADate & Chr(13) & " Extension: " & AFileExtension
  32. ' Aname = APath & Dir
  33.  
  34. Wend

End Sub
m
0
l
12 Septembre 2016 12:13:48

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
m
0
l
12 Septembre 2016 14:06:16

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.

  1. ' While Aname <> APath
  2. Set fo = fso.GetFile(Aname)
  3. AFileExtension = fso.GetExtensionName(Aname)
  4. AFilename = fso.GetBaseName(Aname)
  5. ADate = fo.DateCreated
  6. Result = Dir(APath) & " " & ADate
  7. Windows("analyse_serveurs.xlsm").Activate
  8. Range("A6").Select
  9. ActiveCell.Value = Result
  10. ' Wend


Que dois-je rajouter pour l'ensemble des fichiers s'affiche ? merci
m
0
l
12 Septembre 2016 14:25:43

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,

  1. Windows("analyse_serveurs.xlsm").Activate
  2. Range("A6").Select
  3. ActiveCell.Value = Result


se remplace avantageusement par:

  1. Windows("analyse_serveurs.xlsm").Range("A6").Value = Result
m
0
l
12 Septembre 2016 14:45:14

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.



m
0
l

Meilleure solution

12 Septembre 2016 14:59:38

Manque la "sheet" sorry :) 
bon je te le fais:
  1. Sub Analyse()
  2.  
  3.  
  4. ' Déclaration des variables
  5. Dim fso
  6. Dim Aname As String
  7. Dim AFileExtension As String
  8. Dim AFilename As String
  9. Dim ADate As String
  10. Dim APath As String
  11. Dim fo
  12. Dim target As Range
  13.  
  14. ' Création de la liste de fichiers pour backup_scan
  15. Set target = Workbooks("analyse_serveurs.xlsm").Sheets("Analyse").Range("A6") 'si c'est bien le nom de ton onglet cible
  16. Set fso = CreateObject("Scripting.FileSystemObject")
  17. APath = "C:\Users\xxxxx\Desktop\analyse_serveurs\backup_scan\"
  18. Aname = Dir(APath)
  19.  
  20. While Aname <> ""
  21. Set fo = fso.GetFile(APath & Aname)
  22. ADate = fo.DateCreated
  23. target.Value = Aname & " " & ADate
  24. Set target = target.Offset(1, 0)
  25. Aname = Dir()
  26. Wend
  27.  
  28. End Sub
partage
12 Septembre 2016 15:19:45

C'est nickel. Merci.
Maintenant je vais essayer d'intégrer mes variables et de les concaténer avec le path.
m
0
l
12 Septembre 2016 15:20:27

Si tu coinces, reviens ;) 
m
0
l
12 Septembre 2016 15:24:31

Pas de pb, merci. Même si tu m'en donnes beaucoup c'est bien aussi d'essayer avant :) 
m
0
l
12 Septembre 2016 15:30:45

C'est bien ce que je dis, commence par coincer (et si tu coinces pas c'est top !) et ensuite tu viens ... :o 
m
0
l
12 Septembre 2016 16:06:18

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

[code="vb"]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
m
0
l
12 Septembre 2016 16:21:47

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 ...
m
0
l
12 Septembre 2016 16:26:28

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 !
m
0
l
12 Septembre 2016 16:43:30

version 1)
  1. Sub Analyse()
  2. 'Déclaration des variables globales
  3. Dim IP As String
  4. Dim fso
  5. Dim Aname As String
  6. Dim ADate As String
  7. Dim APath(1 To 4) As String
  8. Dim fo
  9. Dim target(1 To 4) As Range
  10. Dim i As Integer
  11.  
  12. Workbooks("analyse_serveurs.xlsm").Sheets("Analyse").Range("A6:X842").ClearContents
  13. IP = Workbooks("analyse_serveurs.xlsm").Sheets("Analyse").Range("K1").FormulaR1C1
  14.  
  15. ' Création de la liste de fichiers pour backup_scan
  16. Set fso = CreateObject("Scripting.FileSystemObject")
  17.  
  18. Set target(1) = Workbooks("analyse_serveurs.xlsm").Sheets("Analyse").Range("A6")
  19. Set target(2) = Workbooks("analyse_serveurs.xlsm").Sheets("Analyse").Range("G6")
  20. Set target(3) = Workbooks("analyse_serveurs.xlsm").Sheets("Analyse").Range("M6")
  21. Set target(4) = Workbooks("analyse_serveurs.xlsm").Sheets("Analyse").Range("S6")
  22.  
  23. APath(1) = IP & "\analyse_serveurs\backup_scan\"
  24. APath(2) = IP & "\analyse_serveurs\Backupias3\"
  25. APath(3) = IP & "\analyse_serveurs\SAS-IAS3\"
  26. APath(4) = IP & "\analyse_serveurs\BACKUPIAS3\"
  27.  
  28. For i = 1 To 4
  29. Aname = Dir(APath(i))
  30. While Aname <> ""
  31. Set fo = fso.GetFile(APath(i) & Aname)
  32. ADate = fo.DateCreated
  33. target(i).Value = Aname & " " & ADate
  34. Set target(i) = target(i).Offset(1, 0)
  35. Aname = Dir()
  36. Wend
  37. Next
  38. End Sub
m
0
l
12 Septembre 2016 16:56:33

la 2), la plus propre à mon avis ... (je ne ferai pas la 3 qui n'a aucun intérêt ici)
  1. Sub Analyse()
  2. 'Déclaration des variables
  3. Dim IP As String
  4.  
  5. 'Initialisation
  6. Workbooks("analyse_serveurs.xlsm").Sheets("Analyse").Range("A6:X842").ClearContents
  7. IP = Workbooks("analyse_serveurs.xlsm").Sheets("Analyse").Range("K1").FormulaR1C1
  8.  
  9. ' Création de la liste de fichiers
  10. writeFilename APath:=IP & "\analyse_serveurs\backup_scan\", Target:=Workbooks("analyse_serveurs.xlsm").Sheets("Analyse").Range("A6")
  11. writeFilename APath:=IP & "\analyse_serveurs\Backupias3\", Target:=Workbooks("analyse_serveurs.xlsm").Sheets("Analyse").Range("G6")
  12. writeFilename APath:=IP & "\analyse_serveurs\SAS-IAS3\", Target:=Workbooks("analyse_serveurs.xlsm").Sheets("Analyse").Range("M6")
  13. writeFilename APath:=IP & "\analyse_serveurs\BACKUPIAS3\", Target:=Workbooks("analyse_serveurs.xlsm").Sheets("Analyse").Range("S6")
  14. End Sub
  15.  
  16. Function writeFilename(APath As String, ByRef Target As Range)
  17. Dim fso
  18. Dim Aname As String
  19. Dim ADate As String
  20. Set fso = CreateObject("Scripting.FileSystemObject")
  21. Aname = Dir(APath)
  22. While Aname <> ""
  23. ADate = fso.GetFile(APath & Aname).DateCreated
  24. Target.Value = Aname & " " & ADate
  25. Set Target = Target.Offset(1, 0)
  26. Aname = Dir()
  27. Wend
  28. Set fso = Nothing
  29. End Function
m
0
l
13 Septembre 2016 07:47:16

Hello, je me doutais que tu dirais que j'ai été fainéant (autocritique) :) 
Je pratique les boucles mais je ne maitrise pas encore, donc j'ai voulu rendre opérationnel et me pencher sur la boucle après,... J'ai peut-être tord, mais faire et défaire c'est toujours travailler :) 
Je regarde ce que tu m'as présenté dès que j'ai un moment (probablement cet après-midi).
Merci et bonne journée
m
0
l
13 Septembre 2016 08:10:22

Regard aussi ce message et répond aux questions qui s'y trouvent, il est très important !
Citation :

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 !
m
0
l
13 Septembre 2016 08:19:27

Pour le cas présent, il n'y a qu'un seul fichier et un seul onglet.
Ma variable est sur la cellule K1 qui et fusionnée jusqu'en L2.
Pour la msgbox, elle est là uniquement pour tester la prise en compte de ma variable et sera supprimée à terme.
Le 842 c'est uniquement parce que je suis sûre de ne pas aller aussi loin et donc de ne pas oublier d'effacer une ligne appartenant à un autre serveur. Je ne connais pas de commande plus précise pour le moment (pour info je n'ai pas eu de formation vb, j'apprend en créant mes macros depuis le début de l'année). Voilou :) 
Je regarde tout cela tout à l'heure A+
m
0
l
13 Septembre 2016 08:27:58

Ok, pour le 842, si ça t'intéresse je peux t'apprendre comment déterminer la plage qui t'intéresse.

Pour les autres points, si il n'y a qu'un classeur et qu'un onglet, alors pas, trop de risque, mais je t'invite à toujours préciser les éléments sur lesquelles tu travailles afin d'éviter des bugs parfois très gênant !
donc:
Workbooks("ton classeur").Sheets("ta feuille").Range("Ta range"), c'est plus long à écrire (y a des moyens pour raccourcir), mais bien moins dangereux.
m
0
l
11 Octobre 2016 15:14:25

Salut, désolé d'avoir fait le mort, j'ai changé de fonction. en tout cas merci pour tout.
m
0
l