Comparer deux plages

Bonsoir tout le Forum,

je suis nouveau chez vous et j'aimerais réaliser une macro si c'est possible.

J'ai deux plages que je veux comparer en se basant sur la colonne ID car l'ID est unique:

1- si ID existe dans les deux plages ==> dans Colonne E (bleu) il me note "actif" (en updatant Prénom, Nom et Mail s'il y a changement)

2- si ID n'existe que dans la premiere plage ==> dans Colonne E (bleu) il me note "quitté" en concervant les données

3- si ID n'existe que dans la deuxième plage ==> dans Colonne E (bleu) il me note "nouveau" en copiant les dnnées correspondantes.

15test-forum.xlsx (8.73 Ko)

J'éspère que c'est clair et faisable.

Merci pour votre aide

Bonsoir, il est difficile de le faire en une seule formule sans prioriser la colonne A ou D.

Et je ne vois pas l'intérêt d'une macro dans ce cas parce que le problème est biaisé.

Je m'explique.

En A4, existe un ID présent non pas sur la même ligne en G mais une en dessous.

Si G4 était vide, il faudrait écrire Actif puisque la valeur est bien présente en A et G mais que faire dans ce cas de la valeur présente en G4?

Il me semble qu'il faut éviter de trouver en G une valeur différente à celles présente en A sur la même ligne…

La solution est simple. Remplir le tableau avec les mêmes ID toujours présents en A et D en ne pas utiliser le N° ID comme Test mais au contraire une autre cellule remplie ou non.

Exemple

Si l'ID "7" est présent en A et G avec des données liées à A en B et à G en H, alors on notera Actif

Si l'ID "7" est présent en A et G mais qu'il n'y a pas de données liées à G soit H vide, alors on notera Quitté

Enfin, si ID "7" est présent en A et G mais qu'il n'y a pas de données liées à A soit B vide, alors on notera nouveau.

Et ce quelles que soient les données des colonnes B et H, identiques ou non. Ce qui revient à gérer l'ID.

De plus, l'ID doit automatiquement se noter en G dès sa saisie en A.

Ainsi, il sera bien plus facile de gérer ce classeur.

J'ai réalisé cette action et voici le tableau corrigé.

Merci de

Cordialement.

5test-forum.xlsx (10.55 Ko)

Merci Soleusterm pour ta réponse,

j'ai 43 feuilles avec chaqu'une de 18000 à 27000 lignes! donc je veux bien régler mon problème avec une macro.

Merci

bonjour,

solution via une macro

11test-forum.xlsm (17.19 Ko)

Merci beaucoup h2so4!

ca fonctionne trés bien, j'ai juste ajouté une branche "suivant" si la première plage est vide, sinon ca cause une erreur 400

Sub aargh()
    With Sheets("feuil1")
        dl1 = .Cells(Rows.Count, 1).End(xlUp).Row
        If dl1 = 1 Then GoTo suivant:
        .Cells(2, 1).Resize(dl1 - 1, 5).Sort key1:=.Cells(2, 1), order1:=xlAscending, Header:=xlNo

suivant:
        dl2 = .Cells(Rows.Count, 7).End(xlUp).Row
        .Cells(3, 7).Resize(dl2 - 2, 4).Sort key1:=.Cells(3, 7), order1:=xlAscending, Header:=xlNo
        ptr1 = 2
        cle1 = .Cells(ptr1, 1)
        ptr2 = 3
        cle2 = .Cells(ptr2, 7)
        nl = dl1
        Do Until cle1 = Chr(255) And cle2 = Chr(255)
            If cle1 = cle2 Then
                .Cells(ptr1, 2).Resize(, 3).Value = .Cells(ptr2, 8).Resize(, 3).Value
                .Cells(ptr1, 5) = "actif"
                If ptr1 < dl1 Then ptr1 = ptr1 + 1: cle1 = .Cells(ptr1, 1) Else cle1 = Chr(255)
                If ptr2 < dl2 Then ptr2 = ptr2 + 1: cle2 = .Cells(ptr2, 7) Else cle2 = Chr(255)
            ElseIf cle1 < cle2 Then
                .Cells(ptr1, 5) = "quitté"
                If ptr1 < dl1 Then ptr1 = ptr1 + 1: cle1 = .Cells(ptr1, 1) Else cle1 = Chr(255)
            Else
                nl = nl + 1
                .Cells(nl, 1).Resize(, 4).Value = .Cells(ptr2, 7).Resize(, 4).Value
                .Cells(nl, 5) = "nouveau"
                If ptr2 < dl2 Then ptr2 = ptr2 + 1: cle2 = .Cells(ptr2, 7) Else cle2 = Chr(255)
            End If
            DoEvents
        Loop
        .Cells(2, 1).Resize(nl - 1, 5).Sort key1:=.Cells(2, 1), order1:=xlAscending, Header:=xlNo
    End With
End Sub
Rechercher des sujets similaires à "comparer deux plages"