Macro: copier coller des lignes d'un tableau

Bonjour,

je débute en macro et je me heurte à un problème!

j'ai 5 Tableau Excel dont les colonnes sont identiques, mais le remplissage des lignes est différent.
Je souhaiterais faire un 6ème tableau "tableau compilé" allant chercher les lignes des 5 autres tableaux. Sachant que:
- dans les 5 tableaux le nombre de lignes peut être différents,
- je voudrais pouvoir "réactionner" cette macro autant de fois que je le souhaite, elle pourrait donc écraser les données précédentes.

Quelqu'un peut m'aider??

Merci d'avance!

4 réponses

Résumé de la discussion

Plusieurs participants confrontent une macro Excel visant à compiler un sixième tableau à partir de cinq classeurs dont les colonnes sont identiques mais dont le nombre de lignes varie. Plusieurs corrections et approches ont été proposées: ajuster l'extension des fichiers (xlsx vs xlsm), corriger les noms des classeurs, et utiliser la méthode Find pour déterminer la position de données. Des pistes plus robustes ont émergé, notamment une macro adaptable au nombre de colonnes et ciblant les trois onglets essentiels, sans conclure sur l'état final du fil.

Bobot (l’IA à votre service)
  1. Bonjour

    Pour pouvoir t'aider il faut connaitre plus précisément la structure de ton fichier

    Tes 5 tableaux sont ils sur la même feuille ? et si oui les uns sur les autres ou côte à côte ? ou sont ils sur 5 feuilles différentes ?

    Tu veux dans le 6eme tableau recopier les lignes des 5 autres les unes à la suite des autres ? etc

    Le mieux est de joindre déjà un exemple de ton fichier (Pas besoin que les 5 tableaux aient beaucoup de lignes) avec un exemple du 6eme tableau que tu souhaite obtenir
    Poster cet exemple sur cjoint.com, faire créer un lien , le copier et revenir l'indiquer ici

    Cdlmnt
    Via

    0
    1. Bonjour,

      merci pour votre réponse.

      voici le lien où se trouve le tableau:
      https://www.cjoint.com/c/EJsn7LkY2gj

      En fait à ce jour le document est vierge.Il y aura 1 tableau par processus. Le but est qu'un fois par mois je puisse compiler ce que les pilotes auront renseignés dans leur processus.
      j'espère que c'est clair?

      Merci
      0
    2. @sousour1987Il y aura un tableau par processus donc 5 tableaux (d'après ta demande initiale) sur 5 feuilles différentes
      Merci de le confirmer
      0
    3. oui sur 5 fichiers Excel différents!
      0
    4. Je veux bien faire une macro mais dans ton fichier que tu nous as donné, y'a seulement 2 tableaux et ce ne sont pas les mêmes.

      Les tableaux 1,2,3,4 et 5, sont ils identiques aux 6e (où toutes les données seront jointes) ?
      0
    5. oui oui tous identiques! enfin ils ont tous les mêmes colonnes par contre les lignes sont remplies différemment d'un processus à l'autre.
      La ligne 6 (titres des colonnes) est la même dans tous les tableaux.

      Les lignes 7,8,9,10,11,12,....sont différentes. c'est ces lignes là que je souhaite compiler dans le 6è tableau.

      Désolée, j'avais pas vu dans le fichier le 2ème onglet, en fait il compte pas c'est pour les listes déroulantes!
      0
  2. Re

    Les feuilles suivi étant obligatoirement les 5 premières du classeur et la feuille Recap la 6eme, le bouton sur la feuille Recap efface Recap sur 2000 lignes et y transfère les données des 5 feuilles (ALT + F11 pour voir le code)
    http://www.cjoint.com/c/EJssxJjaC1l

    Cdlmnt
    Via

    "L'imagination est plus importante que le savoir." A. Einstein
    0
    1. ok, c'est exactement ce que je voulais, sauf que les tableaux ne sont pas sur le même fichier, ce sont en fait 6 fichiers différents (1 par tableau).
      0
    2. @sousour1987Re

      Rien ne t'empêche de copier-coller les 5 feuilles de tes 5 fichiers dans les 5 premières feuilles du fichier Recap (Clic droit sur l'onglet de la feuille du 1er classeur - Déplacer ou Copier - Dans le classeur : choisir le classeur Récap Avant la feuille : la feuille avec le tableau récapitilatif - Ne pas oublier de cocher la case Créer une copie)

      Sinon
      il faut que tous les classeurs soient ouverts (c'est plus complexe de lire dans des classeurs fermés) et modifier la macro ainsi :

      En début de macro :
      Dimensionner un tableau de 5 puis attribuer à chaque item du tableau le nom du classeur correspondant suivi de son extension :
      Dim classeur(5)
      classeur(1) = "AAA.xslx" ' Remplacer AAA par le nom du classeur
      classeur(2) = "BBB.xslx"
      'etc...

      Dans le corps de la macro modifier les lignes pour indiquer le bon classeur avant le choix de feuille
      ligneS = Workbooks(classeur(n)).Sheets(n).Columns(2).Find("*", , , , xlByColumns, xlPrevious).Row

      'dernière ligne remplie en colonne 2 de la 1ere feuille du classeur n
      ligneS = Workbooks(classeur(n)).Sheets(1).Columns(2).Find("*", , , , xlByColumns, xlPrevious).Row '
      'MODIFIER LE 1 SI CE N'EST PAS LA 1° FEUILLE DU CLASSEUR SOURCE
      ' si derniere ligne remplie est sup à ligne 6
          If ligneS > 6 Then
              'Boucle sur les lignes de la feuille suivi de la 7° à la dernière
              For lg = 7 To ligneS
              ' incremente de 1 la ligne de Récap
              ld = ld + 1
              'copie les données de A à X
              Workbooks(classeur(n)).activate
              Sheets(1).Select
              Range("A" & lg & ":X" & lg).Select
              Selection.Copy
              ' colle les données valeurs uniquement
              Workbooks("mettre ici entre "" ""le nom du classeur récap avec son extension").Activate
              Sheets(1).Select 'MODIFIER LE 1 SI CE N'EST PAS LA 1° FEUILLE DU CLASSEUR RECAP
              Range("A" & ld).Select
              Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
              :=False, Transpose:=False
              ' copie les données de la colonne AA
              Workbooks("mettre ici entre "" ""le nom du classeur récap avec son extension").Sheets(1).Range("AA" & ld) = Workbooks(classeur(n)).Sheets(1).Range("AA" & lg) ''MODIFIER LES 1 SI NECESSAIRE
              Next lg
          End If


      Cdlmnt
      Via
      0
    3. Merci,

      j'ai fait les modifs et ça ne fonctionne toujours pas....

      je ne trouve pas l'erreur:
      https://www.cjoint.com/c/EJthBXwNjIG

      En tout cas merci, sans vous 2 je n'en serais encore pas là!
      0
    4. @sousour1987Bonjour

      Plusieurs erreurs :
      - le tableau n'était pas dimensionné et les items mis avant la macro au lieu d'être en début de macro
      - les noms des classeurs dans les items ne correspondaient pas au réels (un espace après les --- alors qu'il n'y en pas pour les classeurs sources, extension xlsx au lieu de xlsm)
      - le nom du classeur manquait pour la copie de la colonne AA

      Version rectifiée qui fonctionne :
      http://www.cjoint.com/c/EJtmp2kp0ml

      Cdlmnt
      Via
      0
    5. Ouaou ça y'est elle fonctionne!
      Au début il y a avait un message d'erreur mais j'ai rectifié le tir!

      merci beaucoup!!!
      0
  3. Ah ok je vois mon erreur, dans le doc que j'ai envoyé hier j'ai bien totu renommé, remplacé n to 9 par n to 7, mais Pliotage SMQ je l'ai appelé classeur (8).

    Merci
    0
    1. http://www.cjoint.com/c/EKDnJVmyaqj

      je suis désolé mais j'ai tout changé et cela ne fonctionne toujours pas...
      0
      1. Re,

        Ligne de la macro : classeur(1) = "Pilotage Processus ACH - MAI - MTH.xlsx"

        Nom du classeur : Pilotage Processus ACH - MTH - MAI.xlsx

        Ca ne peut évidemment pas fonctionner !
        0