Effectuer une boucle sur les onglets

Résolu
Nonnoo Messages postés 29 Statut Membre -  
Nonnoo Messages postés 29 Statut Membre -
Bonjour à tous,

Je suis en train de construire une macro qui me copie les valeurs d'un fichier et qui colle ses valeurs dans un onglet de mon fichier global.

Je m'explique, j'ai un dossier nommé Fichiers SX avec des classeurs excel nommés SX01,SX02,SX03... (jusqu'à 30).

J'ai un fichier global avec des onglet SX01,SX02... (qui sont identiques aux classeurs du fichier SX. Je souhaite avoir une macro qui m'efface les données de chaque onglet, et puis qui aille ouvrier mon dossier SX et qui copie les valeurs de chaque feuille et les colle dans mon fichier global en respectant l'onglet correspondant.
Je précise que ma macro se trouve dans l'onglet Macro de mon fichier global et que dans la colonne A2 de cette feuille il y a écrit "Fichiers SX" pour qu'il ouvre ce dossier là.

Dans mon code, je n'arrive pas à faire une boucle sur les onglets de mon fichier global pour qu'il efface toutes les données. De même je n'arrive pas à faire une boucle sur les onglets pour qu'il colle les données.

Savez-vous comment je dois m'y prendre svp ? Merci d'avance.

Voici mon code :

Sub Bouton1_Cliquer()

Dim FichierMacro As String
Dim Chemin As String
Dim DossierDB As String
Dim FichierDB As String

FichierMacro = ActiveWorkbook.Name
Chemin = ActiveWorkbook.Path

Application.ScreenUpdating = False
Application.DisplayAlerts = False

'Copie les données de SX01 et colle dans fichier global
Sheets("SX01").Select
Rows("7:7").Select
Range(Selection, Selection.End(xlDown)).Select
Application.CutCopyMode = False
Selection.ClearContents


Sheets("Macro").Select
Range("A2").Select
While ActiveCell.Value <> ""
DossierDB = ActiveCell.Value
FichierDB = Dir(Chemin & "\" & DossierDB & "\*.xls")
Do Until FichierDB = ""
Workbooks.Open (Chemin & "\" & DossierDB & "\" & FichierDB), UpdateLinks:=False

Rows("7:7").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy

Windows(FichierMacro).Activate

Sheets("SX01").Select
Rows("7:7").Select
ActiveSheet.Paste


Workbooks(FichierDB).Activate
ActiveWorkbook.Save
ActiveWorkbook.Close
FichierDB = Dir

Loop
Wend

Workbooks(FichierMacro).Activate
Sheets("Macro").Select
ActiveCell.Offset(1, 0).Select

Application.ScreenUpdating = True
Application.DisplayAlerts = True

MsgBox ("La compilation est terminée")

End Sub

1 réponse

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    a essayer, j'ai laisse les activate et select meme si ce n'est pas top

    Sub Bouton1_Cliquer()
        Dim FichierMacro As String
        Dim Chemin As String
        Dim DossierDB As String
        Dim FichierDB As String
    
        FichierMacro = ActiveWorkbook.Name
        Chemin = ActiveWorkbook.Path
    
        Application.ScreenUpdating = False
        Application.DisplayAlerts = False
        'dossier nommé Fichiers SX avec des classeurs excel nommés SX01,SX02,SX03... (jusqu'à 30).
        DossierDB = Sheets("Macro").Range("A2")
        If DossierDB <> "" Then
            FichierDB = Dir(Chemin & "\" & DossierDB & "\SX*.xls")
            Do Until FichierDB = ""
                Workbooks.Open (Chemin & "\" & DossierDB & "\" & FichierDB), UpdateLinks:=False
                Rows("7:7").Select
                Range(Selection, Selection.End(xlDown)).Copy
    
                Windows(FichierMacro).Activate
                Sheets(Left(FichierDB, Len(FichierDB) - 4)).Select
                Rows("7:7").Select
                Range(Selection, Selection.End(xlDown)).ClearContents
                ActiveSheet.Paste
    
                Workbooks(FichierDB).Activate
                ActiveWorkbook.Close True
                Application.Wait (Now + TimeValue("00:00:01"))
                FichierDB = Dir
            Loop
        End If
    
        Sheets("Macro").Select
        ActiveCell.Offset(1, 0).Select
    
        Application.ScreenUpdating = True
        Application.DisplayAlerts = True
    
        MsgBox ("La compilation est terminée")
    
    End Sub
    
    0
    1. Nonnoo Messages postés 29 Statut Membre
       
      Bonjour,

      Merci beaucoup pour votre réponse, cependant le code ne marche pas au moment du collage "Activesheet.paste", j'ai fait le mode pas à pas et c'est parce que le code copie dans un premier temps puis supprime les données du fichier global et enfin colle les nouvelles données.
      Au moment où il supprime les anciennes données, on perd le collage d'avant...

      Est-ce qu'on peut inverser la manip, d'abord effacer les données du fichier global puis ensuite copier coller les nouvelles données ?

      Merci par avance

      Nono
      0
      1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717 > Nonnoo Messages postés 29 Statut Membre
         
        Re,

        Oui, sans probleme

        Sub Bouton1_Cliquer()
            Dim FichierMacro As String
            Dim Chemin As String
            Dim DossierDB As String
            Dim FichierDB As String
        
            FichierMacro = ActiveWorkbook.Name
            Chemin = ActiveWorkbook.Path
        
            Application.ScreenUpdating = False
            Application.DisplayAlerts = False
            'dossier nommé Fichiers SX avec des classeurs excel nommés SX01,SX02,SX03... (jusqu'à 30).
            DossierDB = Sheets("Macro").Range("A2")
            If DossierDB <> "" Then
                FichierDB = Dir(Chemin & "\" & DossierDB & "\SX*.xls")
                Do Until FichierDB = ""
                    Windows(FichierMacro).Activate
                    Sheets(Left(FichierDB, Len(FichierDB) - 4)).Select
                    Rows("7:7").Select
                    Range(Selection, Selection.End(xlDown)).ClearContents
                    
                    Workbooks.Open (Chemin & "\" & DossierDB & "\" & FichierDB), UpdateLinks:=False
                    Rows("7:7").Select
                    Range(Selection, Selection.End(xlDown)).Copy
        
                    Windows(FichierMacro).Activate
                    Sheets(Left(FichierDB, Len(FichierDB) - 4)).Select
                    Rows("7:7").Select
                    ActiveSheet.Paste
        
                    Workbooks(FichierDB).Activate
                    ActiveWorkbook.Close True
                    Application.Wait (Now + TimeValue("00:00:01"))
                    FichierDB = Dir
                Loop
            End If
        
            Sheets("Macro").Select
            ActiveCell.Offset(1, 0).Select
        
            Application.ScreenUpdating = True
            Application.DisplayAlerts = True
        
            MsgBox ("La compilation est terminée")
        
        End Sub
        
        0
    2. Nonnoo Messages postés 29 Statut Membre
       
      MERCI BEAUCOUP C'est top !!!

      Nono
      0