Récupérer la valeur d'une cellule excel d'une liste de fichiers

Résolu
Timi493 Messages postés 6 Date d'inscription mercredi 29 octobre 2008 Statut Membre Dernière intervention 29 avril 2011 - 27 févr. 2009 à 10:26
Timi493 Messages postés 6 Date d'inscription mercredi 29 octobre 2008 Statut Membre Dernière intervention 29 avril 2011 - 27 févr. 2009 à 16:11
Bonjour,
Sur un disque j'ai un ensemble de répertoires dans lesquels se trouvent des fichiers excel.
Il sont tous construis sur la même base car issus d'une matrice xlt.
J'ai une macro qui me permet de choisir parmi ces répertoires et de lister les fichiers Excel présent dans le répertoire ciblé.


La macro affiche dans la première colonne les noms des fichiers.
J'ai besoin de récupérer la valeur (1 ou vide 0) de la feuille 5 et cellule M15 pour chacun des fichier qui sont listés et de l'afficher dans la colonne d'a côté.
J'arrive à afficher le type de fichier, le poids le nom des fichiers concernés mais pas cette valeur.

ActiveCell.Offset(1, 0).Activate
                (-1, 1) = f1.Type
                 (-1, 1) = f1.Name
                  (-1, 1) = f1.Size


J'arrive à afficher la valeur M15 de mon fichier avec :


       ActiveCell.Offset(-1, 2) = "=Feuil5!M15"
Ou par
       ActiveCell.Offset(-1, 3) = Worksheets("Feuil5").Range("M15").Value        


Mais pas de ceux qui son listés dans l'offset
Je ne suis pas un expert en vba et il faut sans doute déclarer ou faire une variable ou fonction mais toute mes tentatives ont plantés.
Voici le code utilisé.


Sub EcritureDonnées(ByVal f As Variant, ByRef niveau As Integer)
    Dim FichiersPrésent As Boolean
            PremièreLigne = ActiveCell.Row
                Set fc = f.Files
                FichiersPrésent = False
                For Each f1 In fc
                        ActiveCell = f1.Name 'affiche nom
                    On Error GoTo Boucle
Boucle:
        ActiveCell.Offset(1, 0).Activate          ' affiche la liste des fichiers du repertoire choisi
        ActiveCell.Offset(-1, 1) = f1.Type       'affiche le type de fichier
                       
        ActiveCell.Offset(-1, 2) = "=Feuil5!M15"                   'affiche valeur feuille5 cellule m15
        ActiveCell.Offset(-1, 3) = Worksheets("Feuil5").Range("M15").Value          'idem ci-dessus
                                                                    
         ActiveCell.Offset(-1, 4) = f1.Size / 1024       'affiche volume en Ko
         ActiveCell.Offset(-1, 5) = f1.Size                   'affiche volume en octets
         ActiveCell.Offset(-1, 6).Value = f1.Size          'affiche aussi le volume en octets
                       
             FichiersPrésent = True
                Next
                Columns("A:B").EntireColumn.AutoFit
                Range("A1").Select
End Sub


Je veux bien une petite aide pour ce problème car mes recherches n'aboutissent à rien.
Merci à vous.

Timi493

2 réponses

r1r2 Messages postés 22 Date d'inscription mardi 23 janvier 2007 Statut Membre Dernière intervention 31 mars 2010
27 févr. 2009 à 15:05
Bonjour,

Je suppose que la variable f contient un objet Folder.
Le problème est qu'il faut faire référence à la cellule M15 de la Feuil5 du fichier Excel f1 et pas du classeur actif.

Essaie de remplacer :
ActiveCell.Offset(-1, 2) = "=Feuil5!M15"
par
ActiveCell.Offset(-1, 2) = "='" & f1.ParentFolder.Path & "\[" & f1.Name & "]Feuil5'!$M$15"

Cela crée une référence externe vers chacun des fichiers Excel du répertoire.
Pour supprimer ces références et mettre la valeur, il faut rajouter un copier/coller valeurs sur la colonne concernée après la boucle For Each ... Next


Par ailleurs, attention à l'utilisation d'Activecell, car on n'est pas toujours sûr que la cellule active est bien celle que l'on croit...
3
Timi493 Messages postés 6 Date d'inscription mercredi 29 octobre 2008 Statut Membre Dernière intervention 29 avril 2011
27 févr. 2009 à 16:11
Super, Grand Merci.


Ta formule fonctionne du premier coup et pas besoin d'ajouter quoi que ce soit ensuite.


Cela fait trois jours que je cherche, si j'avais su, j'aurai pausé ma question plus tôt.
Mais ça m'a permis de trouver d'autres choses.
Merci encore.

Timi493
0
Rejoignez-nous