Comparaison de 2 colonnes avec report des doublons dans une autre colonne

theaurel

XLDnaute Nouveau
Bonjour,
Je suis novice en VB j'ai trouver un bout de code que j'ai adapter mes besoins
simplement j'aimerai améliorer une fonction qui n'est pas pratique pour ce que je veux faire.

Je veux comparer ma colonne A avec la C et inscrire les doublons dans la colonne D

je parviens a comparer mes 2 colonnes mais je ne parviens pas a ecrire les doublons dans la 3 eme colonne

en gros je voudrais savoir par quoi remplacer "MsgBox ("référence présente dans les deux listes => ligne " & j) "

Merci d'avance pour vos réponse ( mes vacances de fin d'année en dépendent :) )

Code:
Sub comparaison() 
' 
' comparaison Macro 
' Macro enregistrée le 29/12/2010 par aurel
' 
Dim VALEURA As String, VALEURB As String 
' 
For i = 1 To 2108 
VALEURA = Range("A" & i).Value  
For j=1 to 4210 
VALEURB = Range("C" & j).Value 
If VALEURA = VALEURB Then 
MsgBox ("référence présente dans les deux listes => ligne " & j) 
End If 
Next j 
Next i 
End Sub
 

Modeste

XLDnaute Barbatruc
Re : Comparaison de 2 colonnes avec report des doublons dans une autre colonne

Bonjour theaurel, ninbihan,

Avec le début de code proposé, la comparaison est réalisable, mais dans le cas présent tu risques d'avoir une longue boucle, puisque tu vas explorer 2108 fois les 4210 cellules de la colonne C!

Une autre proposition, en utilisant un objet "Dictionary":
Code:
Sub comparaisonBis()
Dim c As Range
Dim i%
Set liste = CreateObject("scripting.dictionary")
Range("D:D").Clear
For Each c In Range("A1:A" & Range("A65000").End(xlUp).Row)
    If Not liste.exists(c.Value) Then liste(c.Value) = c.Value
Next c
For Each c In Range("C1:C" & Range("C65000").End(xlUp).Row)
    If liste.exists(c.Value) Then i = i + 1: Range("D" & i) = liste(c.Value)
Next c
End Sub
 

ninbihan

XLDnaute Impliqué
Re : Comparaison de 2 colonnes avec report des doublons dans une autre colonne

Rebonjour,

En plus de l'excellente suggestion de Modeste, tu trouveras ci-joint une solution sans code avec fonction sommeprod. Attention, certaines de tes valeurs comportent un espace en fin de chaine (CF cellule C7).

Bonne journée,

Ninbihan
 

Pièces jointes

  • exemple comparaison3.xlsx
    9.6 KB · Affichages: 226

Modeste

XLDnaute Barbatruc
Re : Comparaison de 2 colonnes avec report des doublons dans une autre colonne

re,

en colonne C, ton "R10101.mov" contient un espace en dernière position ... il faudrait peut-être ajouter la fonction 'Trim' au code, pour gérer les espaces superflus!

On attend les résultats de tes tests ...

Edit: ninbihan a raison de souligner qu'une formule aurait suffi: celle qu'il propose ou même
Code:
=SI(NB.SI($A$2:$A$13;C2)>0;C2;"")
 
Dernière édition:

theaurel

XLDnaute Nouveau
Re : Comparaison de 2 colonnes avec report des doublons dans une autre colonne

et voila 2 réponses pour le prix d'une :D

Merci ninbihan cette solution fonction aussi très bien il faut juste que je vire mes espaces enfin de chaine.

passez de bonnes fêtes
 

theaurel

XLDnaute Nouveau
Re : Comparaison de 2 colonnes avec report des doublons dans une autre colonne

Modeste ta macro fonctionne très bien c'est pile poils ce qu'il me fallais :)

J'ai ajouter un petit bout de code avec la fonction Trim et ca fonctionne parfaitement ( pas obliger de renommer tout mes imports )

Je met le code complet ca peux servir à d'autre

Code:
Sub comparaisonBis()
Dim c As Range
Dim i%

Set liste = CreateObject("scripting.dictionary")
Range("D:D").Clear
For Each c In ActiveSheet.UsedRange
c = Application.WorksheetFunction.Trim(c)
Next
For Each c In Range("A1:A" & Range("A65000").End(xlUp).Row)
    If Not liste.exists(c.Value) Then liste(c.Value) = c.Value
Next c
For Each c In Range("C1:C" & Range("C65000").End(xlUp).Row)
    If liste.exists(c.Value) Then i = i + 1: Range("D" & i) = liste(c.Value)
Next c
End Sub

Encore Merci à vous 2 d'avoir éclairé ma lanterne ;)
 

Discussions similaires

Statistiques des forums

Discussions
312 393
Messages
2 088 006
Membres
103 698
dernier inscrit
Guillaume MPOYI