J'ai de nombreux classeurs, qui contiennent environ 20 feuilles, pour l'instant j'ouvrais chaque classeur et mettais mon code : je boucle sur les feuilles, je compile les feuilles (elles ont les mêmes colonnes) en créant dans chaque classeur une feuille "Compilation" et en faisant :
Code:
Sub Compilation()
Dim DerligR1 As Long
Dim DerligR2 As Long
Dim MaPlage As Range
Dim DerniereLigne As Integer
Dim nb As Integer
Dim j As Integer
Dim i As Integer
nb = ActiveWorkbook.Worksheets.Count
For j = 1 To nb
ActiveWorkbook.Worksheets(j).Tab.ColorIndex = 1
Next
For j = 1 To nb
If Left(ActiveWorkbook.Worksheets(j).Name, 1) = "P" Then
ActiveWorkbook.Worksheets(j).Select
ActiveWorkbook.Worksheets(j).Tab.ColorIndex = 3
With ActiveWorkbook.Worksheets(j)
DerligR1 = .Range("a" & .Rows.Count).End(xlUp).Row
Rows("2:" & DerligR1).Select
Selection.Copy
End With
ActiveWorkbook.Sheets("Compilation").Select
DerligR2 = Range("A300000").End(xlUp).Row + 1
Range("A" & DerligR2).Select
ActiveWorkbook.ActiveSheet.Paste
End If
Next j
MsgBox ("Fini")
End Sub
et ensuite, je copie colle les valeurs de "compilation" dans un classeur "Synthèse".
En fait, je cherche pour mon classeur "synthèse" : qu'il boucle sur tous les classeurs (contenus dans le même dossier, donc thisworkbook.path), qu'il fasse la macro ci dessus (=boucle sur les feuilles et compilation des données) et colle dans "synthèse".....
Re : Boucle sur répertoire, exécution macro sur boucle sur feuille, récupérer données
Bonjour,
J'ai bien trouvé dans le forum le code pour boucler sur les répertoires
Code:
Sub LoadFichUnRep()
Dim Rep$, Fichier$, NbrFich As Integer
'load rep
With Application.FileDialog(msoFileDialogFolderPicker)
.ButtonName = "OK"
.InitialFileName = ThisWorkbook.Path & " \ "
.Title = "Sélectionnez un dossier"
.Show
If .SelectedItems.Count > 0 Then
Rep = .SelectedItems(1): If Right(Rep, 1) <> "\" Then Rep = Rep & "\"
End If
End With
If Rep = "" Then Exit Sub
Cells.Clear: NbrFich = 0
Fichier = Dir(Rep & "*.*") '<<<<<<<<<<<<< ici mettre l'extention
Do While (Len(Fichier$) > 0)
NbrFich = NbrFich + 1
Cells(NbrFich, 1) = Fichier '<<<< ici voir l'emplacement sur feuille, remplacer NbrDeFich par Lig
Fichier = Dir() 'suite
Loop
End Sub
donc ce code irait dans mon fichier "synthèse" : il boucle sur tous les classeurs, mais ensuite, il faudrait faire tourner ma précédente macro : boucle sur toutes les feuilles, récupérer les données, les compiler et les mettre dans "synthèse"....
Re : Boucle sur répertoire, exécution macro sur boucle sur feuille, récupérer données
Bonjour erics83, le Forum
Si j'ai compris ce que tu recherches, regardes cet exemple ?
Un fichier "Synthèse" à placer dans un dossier, les fichiers "Classeur1,2,3" à placer dans le même dossier.
Lancer le bouton "Go" de "Synthèse" en Feuil1
Regarder le résultat sur cette feuille.
Re : Boucle sur répertoire, exécution macro sur boucle sur feuille, récupérer données
Merci néné06, Merci René,
Effectivement, cela donne presqu'exactement le résultat attendu, j'ai compris la logique du code et....il est impressionnant !!
J'ai modifié et adapté
Code:
b = Right(Nom_Fichier, 3) '4) 'b= extension du fichier (xlsm)
If b = "xls" And Nom_Fichier <> ActiveWorkbook.Name Then 'Si extension= xlsm et ce fichier <> de "Synthèse" alors
car mes classeurs sont en .xls.
Par contre, j'ai des écarts incompréhensibles : lorsque je fais avec mon ancienne méthode (très très longue), j'obtiens 217488 lignes (oui, je compile beaucoup de données...), et lorsque je fais tourner votre code, j'obtiens 217051 lignes...j'ai regardé en faisant un TCD s'il manquait quelques données, mais non, sur chaque classeur, je perds des données, plus ou moins....
Je me demande si cela ne vient pas des dernières lignes renseignées....car les colonnes ont toutes les mêmes entêtes, donc même nombre de colonnes....donc je me demande si
Code:
tablo = ActiveSheet.UsedRange.Value 'charge tableau des nombres
pose un problème ? pour exemple, j'ai 50 colonnes, mais chaque ligne ne sont pas toutes renseignées, exemple colonne 50, il y a des numéros de téléphone, par contre, dans certains classeurs, tous les numéros de téléphone ne sont pas renseignés.....donc peut-être c'est générateur d'erreur..?
La "seule" colonne toujours renseignée est la colonne N°41 (=AO), peut-être qu'il faudrait faire un
Code:
tablo
qui prendrait le nombre de colonne (numcol) et la dernière ligne renseignée (nombre que la colonne 41 nous donnerait...)...
Qu'en pensez vous ?
Mais quoiqu'il en soit, un très grand merci, vous avez exactement trouvé le fonctionnement que je cherchais à avoir.
Re : Boucle sur répertoire, exécution macro sur boucle sur feuille, récupérer données
Re,
Sans un fichier exemple joint, que l'on puisse voir si les colonnes ont des titres, voir l'architecture du fichier, il est difficile de "deviner" de quoi il en retourne!
Re : Boucle sur répertoire, exécution macro sur boucle sur feuille, récupérer données
Ré,
j'avais oublié d'indiquer la feuille à prendre en compte pour charger le tableau.
Là tableau chargeait toujours la première feuille de chaque classeur.
Re : Boucle sur répertoire, exécution macro sur boucle sur feuille, récupérer données
Bonsoir merci pour l'explication....
J'avais testé à la base avec juste des classeurs de 1 feuille (car trop long avec tous mes classeurs et feuilles), et donc n'avait pas compris le problème (je fais toujours des tests en petit, ça me permet de vérifier si problème...) , et ensuite, j'ai testé "Synthèse" new version (et là, sur tous mes classeurs et toutes mes feuilles), et ....donc.....je n'avais pas remarqué le problème avant....
Merci pour le code, et sincèrement, bravo, fluide, propre, un mot : la classe !!!!
Re : Boucle sur répertoire, exécution macro sur boucle sur feuille, récupérer données
Bonjour néné06, Bonjour René,
Juste une dernière petite question : comment mettre dans "tablo" après la dernière colonne renseignée, le nom du classeur copié-collé ? : il faudrait mettre après la dernière colonne l nom du classeur et l'inclure dans "tablo"....
En effet, le code fonctionne parfaitement, mais comme j'ai beaucoup de classeurs à ouvrir et de feuilles à lire, ce serait intéressant que dans mon tableau de synthèse, dans la dernière colonne que je sache de quel classeur vient l'info (l'idéal serait de savoir la feuille + classeur), mais bon, si on a déjà le nom du classeur, ce serait déjà super !!!
Re : Boucle sur répertoire, exécution macro sur boucle sur feuille, récupérer données
Merci René,
Non, pas bon : le code ne boucle plus sur tous les classeurs, ni sur toutes les feuilles....et dans la colonne supplémentaire, je n'ai pas le nom du classeur (sauf sur la 1ere ligne copiée-collée...)
Re : Boucle sur répertoire, exécution macro sur boucle sur feuille, récupérer données
Bonjour René,
Il y a un bug : j'ai repris vos fichiers, transformés en .xlsx et modifié et lancé le code, et le fichier se met en bug....: je n'ai pas de synthèse en "Feuil1"....et je ne comprends pas pourquoi......
Re : Boucle sur répertoire, exécution macro sur boucle sur feuille, récupérer données
Bonjour Eric,
J'ai rechargé tes pièces-jointes que j'ai placé dans un dossier, j'ai lancé "Synthèse" et le programme se déroule normalement et me donne les bons résultats.
Chez moi tout est OK et je ne comprends pas pourquoi ça ne fonctionne pas chez toi ?
Recharges, testes et dis-moi si il Bug, quel message apparait et si possible, envoies une copie d'écran.
Si tu peux faire le test sur un autre ordi, essayes.