Extirper des données sans connaitre les noms de fichier

MaitrePoul

XLDnaute Nouveau
Bonjour à tous,

Je suis nouveau sur ce forum. Grâce à celui-ci, j'ai pu résoudre un grand nombre de problème et je vous en remercie. Cependant, je me retrouve bloqué face à une situation un peu spéciale et c'est pourquoi je vous demande votre aide.

Voila le topo :

J'ai à ma disposition les feuilles des heures passées sur divers projet de plus de 600 employés.
Chaque employé à son classeur à son nom avec ses heures (une feuille par mois et un nouveau classeur par an)
Ces classeurs contiennent un lien vers un fichier listing de tout les projets pour qu'ils se mettent tous à jour automatiquement dès que l'on rajoute un nouveau projet.

Mon objectif serait de faire un classeur récapitulatif contenant la somme de toutes les heures passées par tous les employés par projet.

La somme totale d'heure passé par un employé sur un projet est toujours contenu dans la même cellule pour chaque fichier.
Aurait-il la possibilité de réussir ce calcul sans inclure les noms des classeurs des employés (car ceux-ci peuvent changer de nom, diminuer ou encore augmenter) ? Sachant que tout ces classeurs se trouvent dans le même dossier, il faudrais juste récupérer la valeur de la même cellule dans chaque classeur (sans en connaitre le nom) et d'en faire la somme.

Je peux faire un code VBA s'il le faut mais je suis pas encore expert.

Merci d'avance pour votre aide
Et félicitation pour ce forum vraiment très utile.
 

tototiti2008

XLDnaute Barbatruc
Re : Extirper des données sans connaitre les noms de fichier

Bonjour MaitrePoul,

Bienvenue sur XLD,

Gérer les heures passées sur divers projets de 600 personnes avec un classeur par personne sur Excel est à mon avis une erreur (je ne dis pas que ça ne peut pas marcher, je dis que ce n'est pas approprié)
C'est assez typiquement le genre de problématique à gérer par base de données, qui nécessite de créer une vraie base de données (pas sur Excel, sur un vrai système de gestion de base de données, Access si pas trop lourd, ou SQL Server, MySQL, Oracle, Sybase...). Ce n'est qu'une remarque et un conseil pour tes développements à venir sur le sujet, et lorsque d'autres couches de ton application devront être mises en place, tu risques de regretter de ne pas avoir envisagé la solution base de données...
Ceci dit ta demande doit être réalisable
La fonction Dir en VBA te permettra de passer en revue les noms de tous les fichiers du dossier
A partir de là, il doit être possible de lire le contenu d'une cellule dans une feuille précise du classeur
 

MaitrePoul

XLDnaute Nouveau
Re : Extirper des données sans connaitre les noms de fichier

Merci pour cette réponse rapide.

Cela dit étant stagière ingénieur (Génie mécanique en plus >,<... chercher l'erreur) je n'ai pas vraiment la possibilité de changer quoi que ce soit au système actuel.
Je dois faire avec et réussir ce calcul.

Es-ce qu'il y aurait moyen d'expliciter un peu plus la méthode ?
Si j'ai bien compris la fonction Dir peut me lister les noms de fichiers mais après comment je fais pour aller chercher les valeurs dans les cellules ?

Merci
 

tototiti2008

XLDnaute Barbatruc
Re : Extirper des données sans connaitre les noms de fichier

Re,

Oui, je peux expliciter la méthode
admettons que tes fichiers employés se trouvent dans un dossier C:\temp\Employés\
Et que le total pour ton projet1 se trouve dans la feuille projet1 en cellule A1

Le code suivant devrait te donner le total

Code:
Sub totalprojet1()
Dim total As Double, dossier As String, fic As String, valo
    dossier = "c:\temp\employés"
    fic = Dir(dossier & "\*.xls")
    Do Until fic = ""
        valo = ExecuteExcel4Macro("'" & dossier & "\[" & fic & "]projet1'!R1C1")
        If IsNumeric(valo) Then
            total = total + valo
        End If
        fic = Dir
    Loop
    MsgBox total
End Sub
 

MaitrePoul

XLDnaute Nouveau
Re : Extirper des données sans connaitre les noms de fichier

Re,
Merci beaucoup pour ta réponse ;)

J'ai compris pas mal de chose grâce à ton code mais je comprend pas :
ExecuteExcel4Macro("'" & dossier & "\[" & fic & "]projet1'!R1C1")

Si j'ai bien compris tu concatène des chaines de caractère pour les argument de la fonction mais je ne sais pas à quoi elle sert.
Tu récupère le nombre d'heure ?
et R1C1 c'est quoi, tu récupère la valeur de la cellule A1 ?

Cela dit, si j'ai bien compris le fait de refaire Dir sans argument te permet de récupérer le nom de fichier suivant jusqu'a ce qui en ai plus et que la boucle s'arrete c'est ça ? (Je sais je pose beaucoup de question.. désolé mais c'est mon premier jour de VBA j'en ai jamais fait mais j'ai fait un peu de C++)

Merci encore.
 
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : Extirper des données sans connaitre les noms de fichier

Re,

Cela dit, si j'ai bien compris le fait de refaire Dir sans argument te permet de récupérer le nom de fichier suivant jusqu'a ce qui en ai plus et que la boucle s'arrete c'est ça ?

Tout à fait, n'hésite pas à consulter l'aide VBA sur Dir, il y aura surement un exemple parlant de son utilisation

ExecuteExcel4Macro("'" & dossier & "\[" & fic & "]projet1'!R1C1")

ExecuteExcel4Macro permet de d'évaluer la "formule" entre guillemets qui pointe vers une cellule d'un autre classeur
admettons que le 1er fichier trouvé s'appelle Dupond.xls
la concatenation des éléments donnera

'C:\temp\employés\[Dupond.xls]Projet1'!R1C1

R1C1 est la méthode d'adressage des cellules en Ligne/colonne (R pour row = ligne, C pour column = colonne)
R1C1 veut donc dire A1 (1ère ligne, 1ère colonne)
ExecuteExcel4Macro attend des adressages en R1C1
 

MaitrePoul

XLDnaute Nouveau
Re : Extirper des données sans connaitre les noms de fichier

Montrueux !!!
Merci je vais certainement me servir de tout ça.
J'ai plein de boucle à rajouter ( j'ai notamment des calculs de totaux intermédiare selon des codes de sections) mais tout de suite je reprend confiance :D

J'aurais peut être quelques bugs et reviendrais ici mais en tout cas :

MERCI INFINIMENT
 

MaitrePoul

XLDnaute Nouveau
Re : Extirper des données sans connaitre les noms de fichier

Bonjour,

Ptite question :
Dans la ligne ExecuteExcel4Macro("'" & dossier & "\[" & fic & "]projet1'!R1C1")
Es ce que la cellule sélectionné par la fonction peut être variable ?

Je m'explique : j'essaye de faire R(compteur)C1 à la place de R1C1 le compteur étant une valeur que j'incrémente dans ma boucle.
Cela me permettrais de sélectionner une cellule toute les 2 lignes en incrémentant comme ceci :
compteur = compteur + 2
Malheuresement ça ne marche pas.

Merci d'avance.
 
Dernière édition:

MaitrePoul

XLDnaute Nouveau
Re : Extirper des données sans connaitre les noms de fichier

Salut !
Merci pour toute ton aide tototiti2008

Je me suis beaucoup servi de ce que tu ma filé tototiti2008, mais je ne m'en étais toujours pas servi
pour faire cette histoire de récupération de valeur dans les fichiers sans connaitre les noms et malheuresement j'ai un petit souci.

Je viens de tester ce code :
Code:
Sub total()

Dim total As Double, dossier As String, fichier As String, valeur As Double

    dossier = "G:\Development\Employés"
    fichier = Dir(dossier & "\*.xls")
    Do Until fichier = ""
        valeur = ExecuteExcel4Macro("'" & dossier & "\[" & fichier & "]Janv'!R5C11")
        If IsNumeric(valeur) Then
            total = total + valeur
        End If
        fic = Dir
    Loop
    
    Cells(1, 1) = total
    
End Sub

Donc j'ai regardé dans les variables locales lors de l'execution du code et la récupération de valeur et le total se réalisent très bien.
En fait le seul problème est la condition pour sortir de la boucle je crois. (lorsque j'execute pas à pas c'est bien à ce moment la que ça plante)

Apparemment Do Until fichier = "" ne marche pas.
J'ai l'erreur : Erreur d'execution '5' Argument ou appel de procédure incorrect

Alors j'ai testé avec un fichier s'appelant z.xls dans le dossier et changé la condition avec mais ça ne marche toujours pas.

Une petite idée ?

Merci d'avance

--------------------------------
Edit : Apparement c'est plutot l'execution de fic = Dir lorsqu'il n'y a plus d'autres fichiers restant qui pose problème
mais je suis pas sûr.
 
Dernière édition:

MaitrePoul

XLDnaute Nouveau
Re : Extirper des données sans connaitre les noms de fichier

.......

Effectivement, j'ai bien été bien débile sur ce coup la..
Je mets ça sur le compte de la fatigue hein ! :D

Merci une fois de plus ;)
Ces dernier temps, tu me sauves beaucoup fois la poire tititoto2008 !
Je te suis vraiment reconnaisant :p !
 

Discussions similaires

Réponses
45
Affichages
1 K
Réponses
9
Affichages
400

Statistiques des forums

Discussions
312 207
Messages
2 086 230
Membres
103 160
dernier inscrit
Torto