Coller différentes onglets dans un onglet unique

Carole- Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   -  
Carole- Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous,

Je souhaiterais coller différents onglets dans un seul onglet "synthèse" par une macro.
J'ai enregistré une macro toute simple (je ne sais pas coder) en l'état (cf mon lien ci dessous).

http://www.cjoint.com/c/GCwlbLtv56m

Or, mes onglets n'auront jamais le même nombre de lignes puisqu'ils seront alimentés, je sais qu'il faut utiliser le code "derlig" pour que la macro me copie colle toutes les lignes jusqu'à la dernière remplie mais je n'y arrive pas :((

Pourriez vous m'aider :) ?

Merci

3 réponses

  1. ThauTheme Messages postés 1564 Statut Membre 160
     
    Bonjour Carole, bonjour le forum,

    Essaie comme ça :
    Sub TESTCOLLERBASE()
    Dim B As Worksheet 'déclare la variable B (onglets base)
    Dim O As Worksheet 'déclare la variable O (Onglet)
    Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
    
    Set B = Worksheets("Base") 'définit l'onglet B
    For Each O In Sheets 'boucle sur tous les onglets O du classeur
        If O.Name <> B.Name Then 'condition : si le nom de l'onglet est différent du nom de l'onglet B
            'définit la cellule de destination DEST (A2 si A2 est vide, sinon, la premiere cellule vide de la colonne A de l'onglet B)
            Set DEST = IIf(B.Range("A2").Value = "", B.Range("A2"), B.Range("A1").End(xlDown).Offset(1, 0))
            O.UsedRange.Copy 'copie les cellules éditées de l'onglet O
            DEST.PasteSpecial (xlPasteValues) 'colle les valeurs dans DEST
        End If 'fin de la condition
    Next O 'prochain onglet de la boucle
    End Sub
    

    0
    1. Carole- Messages postés 14 Date d'inscription   Statut Membre Dernière intervention  
       
      Bonjour,

      Merci pour cette réponse rapide et les explications de cette macro.

      Dans ce cas , la macro me récupère du 1er au dernier onglet pour copier coller dans la base.

      Comment dois-je faire pour qu'il me prenne l'onglet qui se nomme "xxx", puis l'onglet "yyy", puis l'onglet "zzz" etc ?
      Dans mon fichier de travail j'ai 4 onglets précis que je dois coller dans ma base.

      Merci :)
      0
  2. ThauTheme Messages postés 1564 Statut Membre 160
     
    Re,

    Dans ce cas il ne faut pas boucler...

    Sub TESTCOLLERBASE()
    Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
            
    Application.ScreenUpdating = False
    Worksheets("xxx").Select
    'définit la cellule de destination DEST (A2 si A2 est vide, sinon, la premiere cellule vide de la colonne A de l'onglet B)
    Set DEST = IIf(B.Range("A2").Value = "", B.Range("A2"), B.Range("A1").End(xlDown).Offset(1, 0))
    ActiveSheet.UsedRange.Copy 'copie les cellules éditées de l'onglet O
    DEST.PasteSpecial (xlPasteValues) 'colle les valeurs dans DEST
    
    Worksheets("yyy").Select
    'définit la cellule de destination DEST (A2 si A2 est vide, sinon, la premiere cellule vide de la colonne A de l'onglet B)
    Set DEST = IIf(B.Range("A2").Value = "", B.Range("A2"), B.Range("A1").End(xlDown).Offset(1, 0))
    ActiveSheet.UsedRange.Copy 'copie les cellules éditées de l'onglet O
    DEST.PasteSpecial (xlPasteValues) 'colle les valeurs dans DEST
    
    Worksheets("zzz").Select
    'définit la cellule de destination DEST (A2 si A2 est vide, sinon, la premiere cellule vide de la colonne A de l'onglet B)
    Set DEST = IIf(B.Range("A2").Value = "", B.Range("A2"), B.Range("A1").End(xlDown).Offset(1, 0))
    ActiveSheet.UsedRange.Copy 'copie les cellules éditées de l'onglet O
    DEST.PasteSpecial (xlPasteValues) 'colle les valeurs dans DEST
    
    End Sub
    
    0
    1. Carole- Messages postés 14 Date d'inscription   Statut Membre Dernière intervention  
       
      Bonjour ThauTheme,

      Merci, par contre j'ai une erreur d'exécution à ce niveau : ??

      ==> Set DEST = IIf(B.Range("A2").Value = "", B.Range("A2"), B.Range("A1").End(xlDown).Offset(1, 0))
      0
      1. ThauTheme Messages postés 1564 Statut Membre 160 > Carole- Messages postés 14 Date d'inscription   Statut Membre Dernière intervention  
         
        Re,

        Bien sûr, je suis un âne !...

        Set DEST = IIf(ActiveSheet.Range("A2").Value = "", ActiveSheet.Range("A2"), ActiveSheet.Range("A1").End(xlDown).Offset(1, 0))
        0
    2. Carole- Messages postés 14 Date d'inscription   Statut Membre Dernière intervention  
       
      Bonjour,

      Mais non, par contre moi j'ai du mal avec les macro.
      Maintenant la macro fonctionne mais va me récupérer les données du dernier onglet (exemple le "zzz") et me les recolle à la suite de cet onglet "zzz" :(
      0
  3. ThauTheme Messages postés 1564 Statut Membre 160
     
    Re,

    Je confirme. Je suis vraiment un âne !...

    Set DEST = IIf(Sheets("synthèse").Range("A2").Value = "", Sheets("synthèse").Range("A2"), Sheets("synthèse").Range("A1").End(xlDown).Offset(1, 0))

    Remplacer la ligne pour les trois onglets donc 3 fois dans le code...

    Ou, le code complet :

    Sub TESTCOLLERBASE()
    Dim OS as Worksheet 'déclare la variable OS (Onglet Synthèse)
    Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
            
    Application.ScreenUpdating = False
    Set OS = Worksheets("synthèse") 'définit l'onglet OS
    Worksheets("xxx").Select
    'définit la cellule de destination DEST (A2 si A2 est vide, sinon, la première cellule vide de la colonne A de l'onglet OS)
    Set DEST = IIf(OS.Range("A2").Value = "", OS.Range("A2"), OS.Range("A1").End(xlDown).Offset(1, 0))
    ActiveSheet.UsedRange.Copy 'copie les cellules éditées de l'onglet O
    DEST.PasteSpecial (xlPasteValues) 'colle les valeurs dans DEST
    
    Worksheets("yyy").Select
    'définit la cellule de destination DEST (A2 si A2 est vide, sinon, la première cellule vide de la colonne A de l'onglet OS)
    Set DEST = IIf(OS.Range("A2").Value = "", OS.Range("A2"), OS.Range("A1").End(xlDown).Offset(1, 0))
    ActiveSheet.UsedRange.Copy 'copie les cellules éditées de l'onglet O
    DEST.PasteSpecial (xlPasteValues) 'colle les valeurs dans DEST
    
    Worksheets("zzz").Select
    'définit la cellule de destination DEST (A2 si A2 est vide, sinon, la première cellule vide de la colonne A de l'onglet OS)
    Set DEST = IIf(OS.Range("A2").Value = "", OS.Range("A2"), OS.Range("A1").End(xlDown).Offset(1, 0))
    ActiveSheet.UsedRange.Copy 'copie les cellules éditées de l'onglet O
    DEST.PasteSpecial (xlPasteValues) 'colle les valeurs dans DEST
    
    End Sub

    0
    1. Carole- Messages postés 14 Date d'inscription   Statut Membre Dernière intervention  
       
      Génial !! Ça fonctionne

      Merci beaucoup pour ton aide !

      A une prochaine fois
      0