Comparer deux listes et ajouter la ligne manquante

Bonjour,

je suis à la recherche d'une macro ou d'un code VBA qui me permettrait de comparer deux listes de deux feuilles différentes. Et d'ajouter les lignes manquantes de la première liste dans l'autre liste.

ex suivant le fichier joint

ajouter la ligne 6 et 8 de l'onglet Donnée a la suite des valeurs de l 'onglet ordonnancer (ligne 7 et 8)

Merci pour votre aide

796test.xlsx (8.84 Ko)

Bonsoir et bienvenue,

Sub Complète()
Dim lg&, f1 As Worksheet, f2 As Worksheet
    Application.ScreenUpdating = False
    Set f1 = Sheets("Données")
    Set f2 = Sheets("Ordonnancer")
    f1.Activate
    lg = Application.Max( _
        f1.Cells.Find("*", , , , xlByRows, xlPrevious).Row, _
        f2.Cells.Find("*", , , , xlByRows, xlPrevious).Row)
    '--- filtre les manquants en feuille "Ordonnancer" ---
    Range("o2") = "=COUNTIF(Ordonnancer!a2:a" & lg & ",a2)=0"     'critère
    Range("a1:d" & lg).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
    Range("o1:o2"), CopyToRange:=Range("g1:j1"), Unique:=False
    '--- Complète ---
    Range("g2:j" & [g65000].End(xlUp).Row + 1) _
    .Copy Destination:=f2.Range("a" & Rows.Count).End(xlUp)(2)
    Columns("g:o").Clear
    f2.Activate
End Sub

Amicalement

Claude

1'412gar01-2listes.xlsm (21.91 Ko)

Bonsoir Dubois,

mille fois merci c'est juste PARFAIT

re,

à noter qu'ici, on compare les colonnes "A" (lot) ,

mais on aurait pu comparer les colonnes "B" (article) ou les 2 concaténées.

N'oublie pas la petite formalité

a resolu3

Claude

Bonjour claude,

je validerai ton retour pas de probleme.

juste pour mon info, j'aimerai comprendre ton code. je segmente:

Range("o2") = "=COUNTIF(Ordonnancer!a2:a" & lg & ",a2)=0" 'critère

Range("a1:d" & lg).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _

Range("o1:o2"), CopyToRange:=Range("g1:j1"), Unique:=False

Range("O2") < pourquoi "O2"

Range("a1:d" & lg)...........

Range("o1:o2") < pourquoi "O" CopyToRange:=Range("g1:j1") < pourquoi "g1 et J1"

Range("g2:j" & [g65000].End(xlUp).Row + 1) _ < pourquoi "g"

.Copy Destination:=f2.Range("a" & Rows.Count).End(xlUp)(2)

Columns("g:o").Clear < pourquoi "g:o"

f2.Activate

encore merci

Bonjour,

pourquoi "G"

G1:J1 est un emplacement temporaire d'extraction

il pourrait être n'importe où, en dehors des données.

On copie ensuite cette extraction à la suite de la feuille "Ordonnancer"

pourquoi "O2" (critère)

même commentaire, c'est juste un emplacement temporaire,

la formule reste la même

pourquoi "G:O"

à la fin de la macro, on efface les colonnes temporaires

Claude

ok,

j'ai suprimé : Columns("g:o").Clear afin de pouvoir voir l'action !

par-contre j'ai voulu adapté ton code a mon veritable fichier. et la dur dur ca ne marche pas .

j'ai besoin d'une colonne de plus j'ai donc modifier le code comme cela: ( j'ai egalement renvoyer la formule un peux plus loin)

Sub Complète()

Dim lg&, f1 As Worksheet, f2 As Worksheet

Application.ScreenUpdating = False

Set f1 = Sheets("Données")

Set f2 = Sheets("Ordonnancer")

f1.Activate

lg = Application.Max( _

f1.Cells.Find("*", , , , xlByRows, xlPrevious).Row, _

f2.Cells.Find("*", , , , xlByRows, xlPrevious).Row)

'--- filtre les manquants en feuille "Ordonnancer" ---

Range("w2") = "=COUNTIF(Ordonnancer!a2:a" & lg & ",a2)=0" 'critère

Range("a1:e" & lg).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _

Range("w1:w2"), CopyToRange:=Range("g1:k1"), Unique:=False

'--- Complète ---

Range("g2:k" & [g65000].End(xlUp).Row + 1) _

.Copy Destination:=f2.Range("a" & Rows.Count).End(xlUp)(2)

f2.Activate

End Sub

re,

à 1ère vue, tu as bien adapter, çà devrait marcher.

Vérifie que les en-têtes sont bien identiques dans les 2 feuilles

j'ai suprimé : Columns("g:o").Clear afin de pouvoir voir l'action !

dans ce cas, mets le nouvel en-tête en K1, sinon efface G1:K1

Si problème, envoie la structure des feuilles

Claude

re,

il y avait bien un probleme d'en-tete, par contre ça ne renvoi pas dans la feuille 2.

je pense que le problème vient de la feuille 2 qui ne commence pas a la ligne 1.

ci joint le fichier

et encore merci

129ordonnancer-01.xlsm (56.33 Ko)

re,

Dans la feuille "Ordonnancer", tu avais des données vers la ligne 300 (colonnes A:F),

donc les ajouts venaient se mettre dessous.

La formule critère devient

    '--- filtre les manquants en feuille "Ordonnancer" ---
    Range("o2") = "=COUNTIF(Ordonnancer!a4:a" & lg & ",a2)=0"     'critère

Amicalement

Claude

parfait,

et merci pour les explications

si tu veux supprimer momentanément une ligne de code,

tu mets une apostrophe en tête de cette ligne.

Claude

Bonjour,

J'ai la même problématique que gar01 et plutôt que d'ouvrir un autre topic un peu redondant je poste ici.

Par contre contrairement à gar01, au lieu d'avoir deux feuilles, j'ai à la place deux fichiers excel (présents dans le même dossier) contenant chacun plusieurs feuilles (allant jusqu'à 15 feuilles, du même nom, d'environ 7000 lignes) et je voudrais comme gar01 ajouter les lignes manquantes dans mon fichier de destination (ancien.xlsx) (ces lignes sont ajoutées au hasard dans mon fichier source nouveau.xlsx et présentent un identifiant unique présent en colonne A). Ce qui serait génial c'est que ces lignes ajoutées soient colorisées pour me permettre ensuite de travailler dessus.

Je n'ai pas beaucoup de compétences en excel et m'excuse d'avance si cette question a déjà était posée sur le forum (j'ai malheureusement cherché sans succès).

Merci d'avance pour votre aide.

37nouveau.xlsx (8.70 Ko)
14ancien.xlsx (8.38 Ko)
Rechercher des sujets similaires à "comparer deux listes ajouter ligne manquante"