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 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.
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
==