Comparaisons de données en mode relatif

ANJE ADETILE

XLDnaute Nouveau
Dans le cadre d'une fusion de base de données article, se pose le problème des articles communs en terme de codification. Certains n'ont rien à voir entre eux, d'autres sont identiques pour un même code article.

La première approche consiste à tester les descriptions identiques quand les articles sont communs à deux Stés ou plus.

Comment faire ce test d'égalité des descriptions sur différentes colonnes en ne prenant que les colonnes où il y a une information à comparer ?

Je souhaite avoir "Match" en bout de ligne quand toutes les descriptions existantes sont égales, s'il y en a au moins une de différente alors "No Match".

Le summum serait d'avoir un pourcentage correspondant au nombre d'égalités (i.e. si 3 données identiques 3, blancs Match = 100% ; 2 données identiques 1 non id 3 blancs, match = 66% (2/3))

Merci de me donner des pistes, c'est un problème interressant conceptuellement mais qui me dépasse pour excel

cf. exemple de table à comparer

ANJE
 

Pièces jointes

  • check list.xls
    27.5 KB · Affichages: 55

kjin

XLDnaute Barbatruc
Re : Comparaisons de données en mode relatif

Bonsoir,
Pour la première question, en O2, formule matricielle à valider par Ctl+Maj+Entrée
Code:
=SI(SOMME(SI(NON(ESTVIDE($B2:$G2));1/NB.SI($B2:$G2;$B2:$G2)))=1;"Match";"Not Match")
Pour la seconde, comprends pas le raisonnent dans la mesure où tu peux avoir plusieurs série identiques sur une même ligne.
A+
kjin
 

ANJE ADETILE

XLDnaute Nouveau
Re : Comparaisons de données en mode relatif

Merci Beaucoup Kjin

Mon autre point concerne la mesure du "Match à peu près" en comparant le nombre de cellules Matchant par rapport au nombre de cellules pleines (pas sûr que je sois plus clair ;))

Ta première réponse est simplissime en terme de process et me va à 99,99% ;)

ANJE
 

jp14

XLDnaute Barbatruc
Re : Comparaisons de données en mode relatif

Bonsoir à tous


Ci dessous une macro à tester
Code:
Option Explicit

Sub travdem()
Dim cellule As Range, plage As Range
Dim nomfeuille1 As String
Dim i As Long, k As Byte, nb1 As Byte, nb As Byte
' pour boucler sur la colonne 1

nomfeuille1 = "Feuil1"

With Sheets(ActiveSheet.Name)
'Je souhaite avoir "Match" en bout de ligne quand
'toutes les descriptions existantes sont égales,
's'il y en a au moins une de différente alors "No Match".
'Le summum serait d'avoir un pourcentage correspondant au nombre d'égalités
'(i.e. si 3 données identiques 3, blancs Match = 100% ;
'2 données identiques 1 non id 3 blancs, match = 66% (2/3)

For Each cellule In .Range("a2:a" & .Cells(Rows.Count, 1).End(xlUp).Row)
    k = 0
    For i = 1 To 6
        If cellule.Offset(0, i).Value <> "" Then k = k + 1
    Next i
' k cellule occupé
    Set plage = .Range("A" & cellule.Row & ":g" & cellule.Row)
    
    nb = Application.WorksheetFunction.CountIf(plage, cellule.Offset(0, 1).Value)
        nb1 = 0
        For i = 1 To 6
            nb = Application.WorksheetFunction.CountIf(plage, cellule.Offset(0, i).Value)
            If nb > nb1 Then nb1 = nb
        Next i
        If nb1 = k Then
                cellule.Offset(0, 8) = "Match"
                cellule.Offset(0, 9) = "100%"
        Else
                If k <> 0 Then
                cellule.Offset(0, 8) = "NoMatch"
                cellule.Offset(0, 9) = nb1 / k
                cellule.Offset(0, 9).Style = "Percent"
                End If
        End If

    
Next cellule
End With
End Sub
La macro recherche d'abord le nombre de données.
Puis recherche le nombre de donnée égale.
Ci dessous une partie du résultat obtenu

Match 100%
NoMatch 67%
NoMatch 83%
Match 100%

JP
 

Discussions similaires

Réponses
13
Affichages
658

Statistiques des forums

Discussions
312 211
Messages
2 086 299
Membres
103 173
dernier inscrit
Cerba95