Comparer les données de 2 colonnes et ajouter les données manquantes

Bonjour à tous,

Mon sujet peut sembler (très très très) semblable à d'autres sujets (que j'ai déjà étudié en détail), je vous remercie d'avance de quand même y prêter attention.

Avant toute chose je vous joins le fichier sur lequel je travaille : "Croisement de données"

Contexte : J'ai deux colonnes avec le nom des l’entreprises en colonne A (renommé pour des raisons de confidentialité) qui sont associées à un numéro unique (colonne B). Ma première feuille " Liste complète_MAJ_Nov_2019 " me donne toutes les entreprises ayant un jour été en relation avec moi, mise à jour avec un ancien fichier " Nov_2019 " non présent ici car il ne nous intéresse pas. Ma seconde feuille " Dec_2019 " me donne les entreprises "nouvelles" ou ayant renouvelé leur ancien contrat. Les entreprises ayant résilié avant Décembre n'y figurent plus.

Objectif : Pouvoir ajouter au fichier " Liste complète_MAJ_Nov_2019 " uniquement les nouvelles entreprises qui sont arrivé en Décembre 2019. Si jamais une entreprise a souscris en Mai 2019 elle possède un numéro, donc même si elle arrête en Juillet 2019 et qu'elle re-souscrit dans le fichier de Décembre 2019, elle ne devrait pas s'envoyer à nouveau dans le fichier " Liste complète_Nov_2019 " étant donné qu'elle est censé déjà y figurer.

Mon problème : Après avoir fait beaucoup de recherches et après avoir trouvé des gens ayant le même que le miens, j'ai essayé tous les codes proposés mais je n'ai jamais réussi à les adapter. A chaque fois cela me renvoie des doublons, or j'ai vraiment besoin que seules les entreprises n'ayant jamais figuré sur " Liste complète_Nov_2019 " viennent s'ajouter.

Merci d'avance pour votre aide.

Etienne

Bonsoir eticoul,

Vois ceci, je n'ai pas testé, n'ayant pas vba sous la main

Option Explicit
Sub test()
Dim a, i As Long, dico As Object
    Set dico = CreateObject("Scripting.Dictionary")
    dico.CompareMode = 1
    a = Sheets("Dec_2019").Range("a1").CurrentRegion.Value
    For i = 2 To UBound(a, 1)
        dico(a(i, 1)) = Application.Index(a, i, 0)
    Next
    With Sheets("Liste complète_MAJ_Nov_2019")
        a = .Range("a1").CurrentRegion.Value
        For i = 2 To UBound(a, 1)
            If dico.exists(a(i, 1)) Then dico.Remove a(i, 1)
        Next
        If dico.Count > 0 Then
            With .Range("a" & .Rows.Count).End(xlUp)(2)
                If dico.Count = 1 Then
                    .Resize(1, UBound(Application.Index(dico.items, 0, 0))).Value = _
                    Application.Index(dico.items, 0, 0)
                Else
                    .Resize(dico.Count, UBound(Application.Index(dico.items, 0, 0), 2)).Value = _
                    Application.Index(dico.items, 0, 0)
                End If
            End With
        End If
    End With
    Set dico = Nothing
End Sub

klin89

Merci pour ta réponse Klin89,

Il est quasiment parfait, mais il me ressort malheureusement encore 1 doublon. Ce qui est étrange c'est que j'ai placé volontairement 2 "anciennes" entreprises pour lesquelles j'ai déjà leur numéro d'identification dans le fichier Déc_2019 mais seulement 1 doublon ressort sur les 2. Cela fonctionne avec le 2eme doublon, il n'est pas pris en compte. Pour le reste tout fonctionne niquel les "nouveaux" sont bien ajouté.

Re eticoul,

Tu n'aurais pas un espace parasite qui traînerait dans ton pseudo-doublon

Je m'appuie sur la colonne A pour détecter les doublons, c'est bien ça

klin89

Bonsoir à tous,

Une proposition avec power query.

Cordialement.

Re eticoul,

Tu n'aurais pas un espace parasite qui traînerait dans ton pseudo-doublon

Je m'appuie sur la colonne A pour détecter les doublons, c'est bien ça

klin89

Je viens d'aller vérifier minutieusement et je n'en vois aucun :/

Re eticoul,

Tu n'aurais pas un espace parasite qui traînerait dans ton pseudo-doublon

Je m'appuie sur la colonne A pour détecter les doublons, c'est bien ça

klin89

Je viens de voir qu'en fait les deux doublons réapparaissent. Tout à l'heure un seul des doublons réapparaissaient car ils s’appelaient tous les deux "Nouveau X", mais en changeant et en mettant des noms différents (avec un numéro déjà dans la liste principale), ils reviennent tous les deux, il y a donc deux doublons. Je suis donc toujours coincé :/

Bonsoir à tous,

Une proposition avec power query.

Cordialement.

Croisement de données.xlsx

Bonsoir Zebulon2,

Merci pour ton message. Malheureusement je vois que le doublon apparaît également sur ce fichier, et je ne sais pas comment l'appliquer de manière récurrente je ne connais pas trop Power Query :/

re,

Quel est le doublon ?

Cordialement.

Bonjour,

@Zebulon2,

Dans ton exemple, la suppression des doublons s'effectue uniquement sur l'entreprise.

Cdlt.

let
    Source = Table.Combine({#"Liste MAJ 11/2019", #"Decembre 2019"}),
    #"Lignes triées"= Table.Sort(Source,{{"Entreprise", Order.Ascending}, {"numéro", Order.Ascending}}),
    Personnalisé=Table.Buffer(#"Lignes triées"),
    #"Doublons supprimés"= Table.Distinct(Personnalisé)
in
    #"Doublons supprimés"

Bonjour à tous,

Je ne comprends pas ceci :

Tout à l'heure un seul des doublons réapparaissaient car ils s’appelaient tous les deux "Nouveau X", mais en changeant et en mettant des noms différents (avec un numéro déjà dans la liste principale), ils reviennent tous les deux, il y a donc deux doublons. Je suis donc toujours coincé

N'aurais pas une ligne blanche dans la feuille "Liste complète_MAJ_Nov_2019" empêchant la prise en compte de toutes tes données lors de l'exécution de la macro

Peux-tu nous renvoyer ton fichier avec le résultat obtenu et pointer ce qui cloche

Je n'ai peut-être pas compris ce que tu souhaites obtenir

klin89

Bonjour à tous, bonjour Jean-Eric,

Je suis parti du postulat qu'une entreprise gardait son numéro unique. Pour moi l'entreprise Nouveau X devrait apparaître au moins une fois.

Sinon on peut filtrer d'abord sur le nom et ensuite le numéro, dans ce cas l'entreprise Nouveau X ne parait plus. Est ce le résultat souhaité ?

Cordialement.

Bonjour à tous,

Je ne comprends pas ceci :

Tout à l'heure un seul des doublons réapparaissaient car ils s’appelaient tous les deux "Nouveau X", mais en changeant et en mettant des noms différents (avec un numéro déjà dans la liste principale), ils reviennent tous les deux, il y a donc deux doublons. Je suis donc toujours coincé

N'aurais pas une ligne blanche dans la feuille "Liste complète_MAJ_Nov_2019" empêchant la prise en compte de toutes tes données lors de l'exécution de la macro

Peux-tu nous renvoyer ton fichier avec le résultat obtenu et pointer ce qui cloche

Je n'ai peut-être pas compris ce que tu souhaites obtenir

klin89

Bonjour Klin89,

Voici le fichier lorsqu'on applique ta macro :

Les "intrus" du fichier Dec_2019 sont les suivants : Nouveau 1,2 et 3 sont des nouvelles entreprises qui doivent s'ajouter à Liste complète_MAJ_Nov_2019, ce qui est le cas avec ta macro donc c'est parfait. Cependant, Nouveau X et Nouveau Y sont des entreprises ayant souscris un jour, arrêté ensuite et souscris à nouveau en Décembre, donc leur numéro figurent déjà dans Liste complète_MAJ_Nov_2019, je ne souhaite donc pas qu'il s'y ajoute à nouveau, or ils s'ajoutent, c'est ces deux là que je considère comme des doublons.

Bonjour à tous,

Je ne comprends pas ceci :

Tout à l'heure un seul des doublons réapparaissaient car ils s’appelaient tous les deux "Nouveau X", mais en changeant et en mettant des noms différents (avec un numéro déjà dans la liste principale), ils reviennent tous les deux, il y a donc deux doublons. Je suis donc toujours coincé

N'aurais pas une ligne blanche dans la feuille "Liste complète_MAJ_Nov_2019" empêchant la prise en compte de toutes tes données lors de l'exécution de la macro

Peux-tu nous renvoyer ton fichier avec le résultat obtenu et pointer ce qui cloche

Je n'ai peut-être pas compris ce que tu souhaites obtenir

klin89

T'as macro est vraiment bien c'est juste que elle cherche l'intru au niveau des noms des entreprises alors que je voudrais qu'elle le fasse au niveau du numéro, mais je ne sais pas comment modifier ton dictionnaire pour faire cela

NB : Je fais ça car il y a beaucoup de chance que si une entreprise revient, son nom au changé un peu, minuscules, majuscules, etc.. alors que son numéro lui ne changera pas, ainsi si le numéro est déjà dans la liste je serai sur qu'elle ni figurera pas à nouveau

Re,

T'as macro est vraiment bien c'est juste que elle cherche l'intru au niveau des noms des entreprises alors que je voudrais qu'elle le fasse au niveau du numéro, mais je ne sais pas comment modifier ton dictionnaire pour faire cela

Dans ce cas, si le n° est vraiment unique et identifie bien la même entreprise, c'est sur lui qu'il faut filtrer. Aussi bien en VBA qu'avec PQ.

Cordialement.

Re,

T'as macro est vraiment bien c'est juste que elle cherche l'intru au niveau des noms des entreprises alors que je voudrais qu'elle le fasse au niveau du numéro, mais je ne sais pas comment modifier ton dictionnaire pour faire cela

Dans ce cas, si le n° est vraiment unique et identifie bien la même entreprise, c'est sur lui qu'il faut filtrer. Aussi bien en VBA qu'avec PQ.

Cordialement.

Croisement de données(1).xlsx

Bonjour Zebulon2,

Je ne connais vraiment pas bien PQ, comment faire pour pouvoir actualiser chaque mois un peu comme avec un bouton de macros ?

Re eticoul,

Dans le code, remplace a(i, 1) par a(i, 2), y'en a 3

klin89

re,

Je ne connais vraiment pas bien PQ, comment faire pour pouvoir actualiser chaque mois un peu comme avec un bouton de macros ?

Menu Données, Actualiser, Actualiser tout.

Ou on peut créer un bouton.

Cordialement.

Salut les copains,

Je suis sur un nouveau projet de tri de données.

J'ai un problème comparable à ce topic de forum que je reactive du coup, j'ai des données par pays et il y a des cellules manquantes.

4dossier-xls.zip (509.58 Ko)

On peut déduire de la cellule précédente ou sinon mettre 0.

J'ai fais un code vba que je montre et il tourne correctement mais s'arrete d'un coup parce que j'ai l'impression que s'il manque une cellule vide sur le chemin, cela casse la boucle. Je joins le xls et colle le code.

Merci beaucoup.

==

Sub Macro3()

Sheets("feuil1").Activate

Dim numero As Integer
Dim Ligne As Integer

Dim premierecellule As Integer
Dim dernierecellule As Integer
Dim MaPlage As Range
Dim index As Integer

For index = 1 To 260 ' nb de regions ou pays

i = ActiveCell.Row
'MsgBox ActiveCell.Address
'MsgBox ActiveCell.Row

premiereligne = i
derniereligne = i + 1


Do While Range("a" & derniereligne) = Range("a" & premiereligne)

derniereligne = derniereligne + 1

Loop

Range(Cells(premiereligne, 2), Cells(derniereligne - 1, 2)).Select
Set MaPlage = Selection

MaPlage.SpecialCells(xlCellTypeBlanks).Font.Color = RGB(255, 0, 0) ' la couleur permet de reperer ce qui est fait
MaPlage.SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C" ' recopie la valeur précédente pour une meme region ou pays
Cells(derniereligne, 2).Select

If Cells(derniereligne, 2).Value <> "" Then ' on arrive à une nouvelle region/pays pour voir si la premiere observation est manquante ou pas
Cells(derniereligne, 2).Value = Cells(derniereligne, 2).Value
Else
Cells(derniereligne, 2).Value = 0 ' si elle est manquant on met 0 d'office
Cells(derniereligne, 2).Font.Color = RGB(265, 0, 0) 'idem couleur pour visualiser
End If


Next ' on passe à une autre region ou pays



End Sub

==

Rechercher des sujets similaires à "comparer donnees colonnes ajouter manquantes"