Comparer 2 colonnes

famu

XLDnaute Occasionnel
Bonjour à tous,
J'aimerais pouvoir comparer 2 colonnes faisant parties de 2 feuils différentes.
Exemple :

A
Pierre
Paul
Jacques
Eric
Sabine

B
Pierre
Laurence
Eric
Marcel
Julien

Comparer la colonne B par rapport à la colonne A : Si "Sabine" manque dans la colonne B alors signaler par Msgbox que "Sabine" est manquant. Si "Julien" n'est pas présent dans la colonne A alors masquer la ligne contenant "Julien".
Bien sûr, c'est un exemple car mes colonnes comporte environ plus de 500 données chacunes, quantité de données variable suivant les mois.
Perso, au départ je pensais que c'était à ma porté....mais plus j'avance et plus ça se complique...
Merci d'avance pour votre aide,
Famu
 
Dernière édition:

pijaku

XLDnaute Occasionnel
Re : Comparer 2 colonnes

Comment souhaites tu que les "manquements" et les "communs" te soient signalés?
1- par MsgBox? ==> risque d'être fastidieux si beaucoup d'anomalies
2- par colorisation des cellules? ==> idéal si les cellules ne sont pas déjà colorées...
3- Autre moyen???
 

pijaku

XLDnaute Occasionnel
Re : Comparer 2 colonnes

Bon, partant de ta demande initiale :
Comparer la colonne B par rapport à la colonne A : Si "Sabine" manque dans la colonne B alors signaler par Msgbox que "Sabine" est manquant. Si "Julien" n'est pas présent dans la colonne A alors masquer la ligne contenant "Julien".
Voici le code VBA à adapter (cf les commentaires dudit code) :
Code:
Option Explicit

Sub famu()
Dim monDico1 As Object, a(), c, i As Long, Messg As String
Dim monDico2 As Object, b()

'Ici on entre les lettres des colonnes concernées dans des constantes
Const Col1 As String = "A" 'Col1 = "A" ==> on va travailler avec la colonne A
Const Col2 As String = "B" 'Col2 = "B" ==> on va travailler avec la colonne B

With Sheets("Feuil1") 'A ADAPTER ==> Nom de la 1ère feuille
    .Activate
    i = 1 ' Si votre colonne A comporte une ligne d'entête remplacer 1 par 2 :
    a = Range(Col1 & i & ":" & Col1 & Range(Col1 & Rows.Count).End(xlUp).Row)
    Set monDico1 = CreateObject("Scripting.Dictionary")
    For Each c In a
        monDico1(c) = i
        i = i + 1
    Next c
End With
With Sheets("Feuil2") 'A ADAPTER ==> Nom de la 2nde feuille
    .Activate
    i = 1 ' Si votre colonne A comporte une ligne d'entête remplacer 1 par 2 :
    b = Range(Col2 & i & ":" & Col2 & Range(Col2 & Rows.Count).End(xlUp).Row)
    Set monDico2 = CreateObject("Scripting.Dictionary")
    For Each c In b
        monDico2(c) = i
        i = i + 1
    Next c
End With
Sheets("Feuil1").Activate
Messg = "Il manque, dans la colonne " & Col2 & " : "
For Each c In a
    'création du message avec les "absents" en colonne B
    If Not monDico2.exists(c) Then Messg = Messg & Chr(10) & "- " & c
Next c
Sheets("Feuil2").Activate
MsgBox Messg
For Each c In b
    If Not monDico1.exists(c) Then
        'masquer les lignes colonnes B des données absentes colonne A
        Rows(monDico2(c)).Hidden = True
    End If
Next c
End Sub
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 392
Messages
2 087 990
Membres
103 691
dernier inscrit
christophe89