Compiler plusieurs onglets de différents fichiers dans un seul

Résolu
turz Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   -  
turz Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous,

Je cherche à compiler les onglets de plusieurs fichiers qui sont dans un répertoire en un seul fichier. Le problème est que mes fichiers possèdent 3 onglets et je ne m'aimerais récupérer que les onglets 'résultats'.

Sub Importer()
  Dim nf As String
  Dim strPath As String
  Dim synthese As Workbook
  Dim wbkSource As Workbook
  Dim wksSource As Worksheet
 
  strPath = ActiveWorkbook.Path
  Set synthese = ActiveWorkbook
  nf = Dir(strPath & "\*.xlsm")
  Application.EnableEvents = False
 
  Do While nf <> ""
    If nf <> synthese.Name Then
      Set wbkSource = Workbooks.Open(Filename:=strPath & "\" & nf)
      For Each wksSource In wbkSource.Worksheets
        wksSource.Copy After:=synthese.Sheets(synthese.Sheets.Count)
      Next wksSource
      wbkSource.Close False
    End If
    nf = Dir
  Loop
 
  Application.EnableEvents = True
End Sub


Serait il possible de dire à la macro de ne récupérer seulement les onglets 'Resultats' dans les fichiers qu'il compile un par un ?

En vous remerciant.
A voir également:

4 réponses

gbinforme Messages postés 14946 Date d'inscription   Statut Contributeur Dernière intervention   4 724
 
Bonjour,

Tu remplaces :
      For Each wksSource In wbkSource.Worksheets
        wksSource.Copy After:=synthese.Sheets(synthese.Sheets.Count)        
      Next wksSource

par
wksSource.sheets("Resultats").Copy After:=synthese.Sheets(synthese.Sheets.Count)

0
turz Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
J'ai une erreur de compilation :

Membre de méthode ou de donnée introuvable
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention  
 
Bonjour,

Gbinforme:
:o)
au lieu de wkssource ne serait ce pas plutôt wbKsource
bien qu'on puisse s"en passe passer puisque c'est le classeur actif

pour turz
dans cette procédure, je ne vois pas l'utilité de enableevents=false
0
gbinforme Messages postés 14946 Date d'inscription   Statut Contributeur Dernière intervention   4 724
 
Bonjour Michel,

Bien sûr, tu as raison je n'ai pas copié la bonne partie et comme je n'ai pas eu le courage de créer toute la structure pour tester...

wbkSource.sheets("Resultats").Copy After:=synthese.Sheets(synthese.Sheets.Count)
et même comme tu dis
sheets("Resultats").Copy After:=synthese.Sheets(synthese.Sheets.Count)
0
turz Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
Merci de vos réponses : J'ai fait ceci qui fonctionne :
 If wksSource.Name = "Resultats" Then
       wksSource.Copy After:=synthese.Sheets(synthese.Sheets.Count)
       End If
0
turz Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
Merci de ta réponse !

Chaque fichier que je compile contient un onglet Resultats, donc il faut que la compilation aille chercher chaque feuille Resultats dans les fichiers.

De plus j'ai excel qui plante quand je lance la compilation. Peut être est-ce du aux types de fichier que je compile ?! Les fichiers que je compile possède les onglets Resultats cachés...
0
turz Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
Ah ! Chose très bizarre, quand je lance la macro pas à pas (F8), pas de plantage, j'arrive bien à tout compiler....

Peut-être est-ce un problème de mémoire.... Il faudrait donc que je compile tout les onglets Resultats (qui sont cachés) et que je les décache dans le fichier de synthèse pour pouvoir les exploiter.
0
turz Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
Bon, tout ça tourne assez bien maintenant, je récupère tout les onglets résultats.

Il faut maintenant que je récupère les infos en valeur de ces onglets et que je les colle dans l'onglet principale : 'Synthèse'. Voilà la macro pour l'instant :

Sub Synthèse()
Dim Sh As Worksheet
With Sheets("Synthèse")
.[A2:Y65536].Clear
Application.ScreenUpdating = 0
For Each Sh In Worksheets
  If Sh.Name <> .Name Then _
Sh.Range("A3:Y" & Sh.[A65536].End(xlUp).Row).Copy .[A65536].End(xlUp)(2)
Next
.[A2:Y65536].Sort Key1:=.[B3]
End With
End Sub


Je n'arrive pas à la modifier pour que au lieu d'effectuer un collage simple, celle-ci effectue un collage spécial par valeur.

Pourriez vous m'aider sur ce point ?!

Merci :) !!
0
turz Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
Bon j'ai trouvé une solution, à la suite du code précédent je fais :

With Worksheets("Synthèse")
    .Range("A:Y").Copy
    .Range("A:Y").PasteSpecial xlPasteValues
End With

0