Boucle sur répertoire, exécution macro sur boucle sur feuille, récupérer données

erics83

XLDnaute Impliqué
Bonjour,

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".....


Un petite aide ?

En vous remerciant,
 
Dernière édition:

erics83

XLDnaute Impliqué
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"....

Merci pour votre aide,
 

néné06

XLDnaute Accro
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.

A+

René
 

Pièces jointes

  • Classeur1.xlsm
    9.1 KB · Affichages: 38
  • Classeur1.xlsm
    9.1 KB · Affichages: 31
  • Classeur2.xlsm
    9 KB · Affichages: 35
  • Classeur2.xlsm
    9 KB · Affichages: 32
  • Classeur3.xlsm
    9.1 KB · Affichages: 38
  • Classeur3.xlsm
    9.1 KB · Affichages: 32
  • Synthèse.xlsm
    24.3 KB · Affichages: 20
  • Synthèse.xlsm
    24.3 KB · Affichages: 19
Dernière édition:

erics83

XLDnaute Impliqué
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.

Merci,
Eric
 
Dernière édition:

néné06

XLDnaute Accro
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!

A+
René
 

néné06

XLDnaute Accro
Re : Boucle sur répertoire, exécution macro sur boucle sur feuille, récupérer données

Re,

Je pense avoir fais une erreur!

Supprimer en premiere ligne:
Private tablo ()

et placer Dim Tablo() comme suit.


numcol = Sheets(fe).Range("A1").End(xlToRight).Column 'rechercher la derniere colonne ecrite
Dim tablo()
tablo = ActiveSheet.UsedRange.Value 'charge tableau des nombres

Essayes et dis-nous?

René
 

néné06

XLDnaute Accro
Re : Boucle sur répertoire, exécution macro sur boucle sur feuille, récupérer données

Re,

J'ai fais une erreur, prendre ce fichier!
Toutes mes excuses!:(

rené
 

Pièces jointes

  • Synthèse.xlsm
    24.3 KB · Affichages: 28
  • Synthèse.xlsm
    24.3 KB · Affichages: 30

erics83

XLDnaute Impliqué
Re : Boucle sur répertoire, exécution macro sur boucle sur feuille, récupérer données

Merci néné06, Merci René,

Je viens de tester votre code, avec plus de 30 classeurs, contenant 20 feuilles chacun, tout est OK !!!! Merci

Juste pour mon info personelle, "l'erreur" se situait "juste" dans le dimensionnement du tableau ?

Merci,
A+
 
Dernière édition:

néné06

XLDnaute Accro
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.

Rene
 

erics83

XLDnaute Impliqué
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 !!!!

Merci !!!!!!

Merci René,
Eric
 

erics83

XLDnaute Impliqué
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 !!!

Merci pour votre aide,
 

néné06

XLDnaute Accro
Re : Boucle sur répertoire, exécution macro sur boucle sur feuille, récupérer données

Bonjour Eric, le Forum

Essayes cette version, fais les modif "Xlms","Xls" et dis-nous ?


A+

René
 

Pièces jointes

  • Synthèse.xlsm
    24.9 KB · Affichages: 20
  • Synthèse.xlsm
    24.9 KB · Affichages: 19

erics83

XLDnaute Impliqué
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...)

Merci pour votre aide,
 

erics83

XLDnaute Impliqué
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......

Merci pour votre aide,
Eric
 

Pièces jointes

  • Classeur2.xlsx
    8.6 KB · Affichages: 34
  • Classeur1.xlsx
    8.6 KB · Affichages: 41
  • Synthèse-1.xlsm
    17.6 KB · Affichages: 29
  • Classeur3.xlsx
    8.6 KB · Affichages: 42
  • Classeur2.xlsx
    8.6 KB · Affichages: 27
  • Classeur1.xlsx
    8.6 KB · Affichages: 43
  • Classeur3.xlsx
    8.6 KB · Affichages: 32

néné06

XLDnaute Accro
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.

A+

René
 

Discussions similaires

Statistiques des forums

Discussions
312 198
Messages
2 086 149
Membres
103 133
dernier inscrit
mtq