Ajouter automatiquement les lignes d'une feuille excel à la suite d'une autre

ROKMAT

XLDnaute Nouveau
Bonjour,

Enchanté d'arriver sur ce forum. Je travaille dans l'industrie (Qualité). Je souhaite "standardiser" deux fichiers excels en un seul. Ces fichiers excel n'ont pas exactement les mêmes formats (les noms de colonnes changent)

En gros, dans le fichier que je joins :

j'aimerais fusionner tab1 et tab2 pour donner tab3 automatiquement.

Par exemple, je suis sur tab3 et si des données ont été ajoutées par autrui dans tab1, je clique sur un bouton et les nouvelles valeurs viennent s'incrémenter en dessous de la dernière ligne de tab3...

C'est possible ça? J'ai parcouru les forums de ce site et d'autres, beaucoup proposent recherchev pour rajouter des colonnes, en l'occurence ici je cherche à rajouter des lignes, et mes intitulés de colonnes ne sont pas les mêmes sur mes deux fichiers...

Merci d'avance.
 

Pièces jointes

  • fusion lignes.xlsx
    9.8 KB · Affichages: 45

Boo2bafoot

XLDnaute Nouveau
Bonjour Rokmat,

Les noms de colonnes changent, mais il semblerait que vos données soient de même type...
Est-ce bien le cas ? c'est à dire que votre tab3 serait toujours composée de :
Colonne 1 : Données concernant l'âge
Colonne 2 : Données sur le poids / masse
Colonne 3 : Données concernant le sexe

Si oui, une petite macro suffira à régler le problème. Pas très académique j'en conviens, mais ce bout de code fait à l'enregistreur de macro et légèrement corrigé fait l'affaire.
Cf PJ

Bonne soirée
 

Pièces jointes

  • fusion lignes macro.xlsm
    18 KB · Affichages: 43

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir ROKMAT et bienvenue sur XLD :), Boo2bafoot,

Un essai avec une macro. Une colonne a été ajoutée (colonne D) pour indiquer l'origine des données dans Tab3 sans quoi on ne saurait pas conserver l'ordre des ajouts (vous désirez ajouter les nouvelles de Tab1 et Tab2 à la fin des données déjà présentes dans Tab3).

Code dans le module de code de la feuille Tab3:
VB:
Sub Actualiser()
Dim nbNew&, nbOld&

   '          nouveaux éléments de Tab1
   'nombre d'éléments de Tab1
   nbNew = Application.WorksheetFunction.CountA(Sheets("Tab1").Columns(1)) - 1
   'nombre d'éléments de Tab3 déjà issus de Tab1
   nbOld = Application.WorksheetFunction.CountIf(Sheets("Tab3").Range("D:D"), 1)
   If nbOld < nbNew Then
      With Sheets("Tab1")
         'copie nouveaux éléments de Tab1 vers Tab3
         .Cells(1, "a").Offset(nbOld + 1).Resize(nbNew - nbOld, 3).Copy
         Sheets("Tab3").Cells(Rows.Count, "a").End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues
         'placer le chiffre 1 dans la colonne D de Tab3 pour les éléments copiés
         Selection.Offset(, 3).Resize(, 1) = 1
      End With
   End If

   '          nouveaux éléments de Tab2
   'nombre d'éléments de Tab2
   nbNew = Application.WorksheetFunction.CountA(Sheets("Tab2").Columns(1)) - 1
   'nombre d'éléments de Tab3 déjà issus de Tab2
   nbOld = Application.WorksheetFunction.CountIf(Sheets("Tab3").Range("D:D"), 2)
   If nbOld < nbNew Then
      With Sheets("Tab2")
         'copie nouveaux éléments de Tab1 vers Tab3
         .Cells(1, "a").Offset(nbOld + 1).Resize(nbNew - nbOld, 3).Copy
         Sheets("Tab3").Cells(Rows.Count, "a").End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues
         'placer le chiffre 2 dans la colonne D de Tab3 pour les éléments copiés
         Selection.Offset(, 3).Resize(, 1) = 2
      End With
   End If
End Sub
 

Pièces jointes

  • ROKMAT- fusion lignes- v1.xlsm
    23.3 KB · Affichages: 29
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,

Une version avec un code plus concis:
VB:
Sub Actualiser()
Dim nbNew&, nbOld&, Feuil

   For Each Feuil In Array("Tab1", "Tab2")
      '          nouveaux éléments de Feuil
      'nombre d'éléments de Feuil
      nbNew = Application.WorksheetFunction.CountA(Sheets(Feuil).Columns(1)) - 1
      'nombre d'éléments de Tab3 déjà issus de Feuil
      nbOld = Application.WorksheetFunction.CountIf(Sheets("Tab3").Range("D:D"), Feuil)
      If nbOld < nbNew Then
         With Sheets(Feuil)
            'copie nouveaux éléments de Feuil vers Tab3
            .Cells(1, "a").Offset(nbOld + 1).Resize(nbNew - nbOld, 3).Copy
            Sheets("Tab3").Cells(Rows.Count, "a").End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues
            'placer le nom Feuil dans la colonne D de Tab3 pour les éléments copiés
            Selection.Offset(, 3).Resize(, 1) = Feuil
         End With
      End If
   Next Feuil
End Sub
 

Pièces jointes

  • ROKMAT- fusion lignes- v2.xlsm
    23.4 KB · Affichages: 27

ROKMAT

XLDnaute Nouveau
Zut. J'avais oublié une troisième contrainte, qui tord les cheveux : les colonnes ne sont pas dans le même ordre dans tab1 que dans tab2, il faut donc les réassigner pour obtenir tab3...

je joins le fichier exemple mis à jour
 

Pièces jointes

  • fusion lignes.xlsx
    9.8 KB · Affichages: 37

Discussions similaires