Compiler plusieurs onglets de différents fichiers dans un seul

Résolu
turz Messages postés 7 Statut Membre -  
turz Messages postés 7 Statut Membre -
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.

4 réponses

  1. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    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
    1. turz Messages postés 7 Statut Membre
       
      J'ai une erreur de compilation :

      Membre de méthode ou de donnée introuvable
      0
    2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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
    3. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
       
      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
    4. turz Messages postés 7 Statut Membre
       
      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
  2. turz Messages postés 7 Statut Membre
     
    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
  3. turz Messages postés 7 Statut Membre
     
    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
  4. turz Messages postés 7 Statut Membre
     
    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
    1. turz Messages postés 7 Statut Membre
       
      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