Répéter un copier/coller spécial grâce à une macro ?[Excel 2007]

derek -  
eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Alors voilà mon problème maintes et maintes fois abordé mais les réponses que j'ai consultées ne m'aident pas à y voir plus clair...

J'ai:
-un fichier excel avec 31 onglets (plusieurs à vrai dire, beaucoup même)
-tous les onglets ont la même structure
-je cherche à"copier/coller transposer" la section B5:AB17 de chaque onglet dans un onglet récapitulatif , appelons le "total", les unes à la suite des autre, de haut en bas en commençant par la cellule G2 de l'onglet "total"

Je ne maîtrise pas du tout le VBA évidemment, même si j'ai très envie d'apprendre. Du coup j'ai tenté de créer une macro en enregistrant l'action pour le premier onglet. Mais biensur je ne parviens pas à comprendre comment on peut automatiser ça sur plusieurs onglets, donc elle ne me sert strictement à rien...

Je serait extrêmement reconnaissant à la personne qui m'offrirait ma première macro! et j'espère bien qu'elle me permettra de percer quelques secrets de cet outil magique!

Merci d'avance.

2 réponses

  1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonsoir,

    un exemple :
    Sub Total()
        Dim sh As Worksheet, shT As Worksheet
        Dim derlig As Long
        Set shT = Worksheets("Total")
        Application.ScreenUpdating = False
        For Each sh In Worksheets
            If sh.Name <> "Total" Then
                derlig = Application.Max(2, shT.Cells(Rows.Count, 7).End(xlUp).Row + 1)
                sh.[B5:AB17].Copy
                Sheets("Total").Cells(derlig, 7).PasteSpecial Paste:=xlPasteValues, Transpose:=True
            End If
        Next sh
        shT.[G2].Select
        Application.ScreenUpdating = True
    End Sub 

    Pour moi le code parle de lui-même, je ne l'ai pas commenté. N'hésite pas à utiliser F1 sur les fonctions qui ne te parlent pas.
    https://www.cjoint.com/?DBvxWqZOIj8

    eric
    0
  2. derek
     
    Merci!
    Bon même si j'arrive pas à comprendre 90% du code, j'ai trifouillé le "Row + 1)" en "Row + 5)" car sinon il me manquait à chaque fois les 4 dernières lignes (sans que je comprenne pour autant exactement ce que ça signifie malheureusement...)

    Mais merci beaucoup!
    0
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Bonjour,

      Le vba ne se fait pas au hasard.
      shT.Cells(Rows.Count, 7).End(xlUp).Row + 1 : dernière ligne utilisée de la colonne G (la 7) +1. C'est donc la 1ère ligne libre où écrire le bloc suivant.
      Si la colonne G peut ne pas être complète il fallait le dire. Dans ce cas utilise une colonne que tu sais toujours complète.

      eric
      0
    2. derek
       
      C'est pas la colonne G qui est incomplète, ce sont les tableaux qui une fois transposés se collent bien à la suite les uns des autres mais en omettant à chaque fois les 4 dernières lignes avec Row +1, problème réglé avec Row+5, même si la macro commence le collage sur G6 au lieu de G2.

      Et oui j'ai bien compris que le VBA ne se fait pas au hasard...
      0
    3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Extrêmement bizarre...
      B5:AB17, comme demandé, est bien copié et transposé. Le bloc suivant doit se coller à la 1ère ligne vide qui est shT.Cells(Rows.Count, 7).End(xlUp).Row + 1 et pas autre chose dans la mesure où cette colonne 7 est complète.
      Bref, je n'insiste pas plus.
      eric
      0