Calculer un % identique du contenu d'une cellule avec une autre

Fermé
F60lebaladinverni Messages postés 126 Date d'inscription samedi 28 janvier 2017 Statut Membre Dernière intervention 7 avril 2023 - Modifié le 9 févr. 2021 à 17:11
F60lebaladinverni Messages postés 126 Date d'inscription samedi 28 janvier 2017 Statut Membre Dernière intervention 7 avril 2023 - 10 févr. 2021 à 16:54
Bonjour,

De la même manière qu'on peut dire que l'ADN d'une banane est à 50% identique à celui d'un humain, comment est-il possible de comparer le contenu de cellules Excel entre elles et de calculer le % du contenu identique ?
Pour chaque cellule, je calcule le % du contenu identique avec chacune des autres cellules de la liste, et j'inscris dans la colonne B, le % maximum trouvé.
Exemple
------------ A---------------------- B
1-------A-1010---------83% avec A2
2-------A1010----------100% avec A1
3-------A1011----------83% avec A2

Ci joint un fichier Excel, avec une petite liste de valeurs à tester.
Merci d'avance
https://www.cjoint.com/c/KBjqdyOOVa4

5 réponses

DjiDji59430 Messages postés 4035 Date d'inscription samedi 19 avril 2008 Statut Membre Dernière intervention 24 avril 2024 645
9 févr. 2021 à 17:19
Bonjour à tous,

T'explique comment tu trouves 83 % ?

Crdlmt
0
F60lebaladinverni Messages postés 126 Date d'inscription samedi 28 janvier 2017 Statut Membre Dernière intervention 7 avril 2023 2
Modifié le 9 févr. 2021 à 18:11
Bonjour,

En A1 : 5 caractères en commun avec A2 sur 6 (l'ordre étant respecté)
ça fait 83% :)

Cordialement
0
via55 Messages postés 14403 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 24 avril 2024 2 703
Modifié le 9 févr. 2021 à 18:46
Bonsoir

Comment peut il se faire que A1 a 83% de correspondance avec A2 et que A2 a lui100% avec A1 ??? il y a quelque chose qui m'échappe là !
Ensuite quel est l’intérêt à calculer ces % ?

0
F60lebaladinverni Messages postés 126 Date d'inscription samedi 28 janvier 2017 Statut Membre Dernière intervention 7 avril 2023 2
Modifié le 9 févr. 2021 à 18:47
Parce que dans A2 (A1010) , il y a 5 caractères et que ces 5 caractères sont tous retrouvés dans l'ordre dans A1, d'où le 100%.
Dans A1 (A-1010), il y a 6 caractères, et on en retrouve que 5 sur les 6 dans l'ordre dans A2, d'où le 83%.

Mon raisonnement est-il mauvais ?
0
DjiDji59430 Messages postés 4035 Date d'inscription samedi 19 avril 2008 Statut Membre Dernière intervention 24 avril 2024 645
9 févr. 2021 à 18:52
et comment tu trouves 83 % entre a1010 et a1011 ?
0
via55 Messages postés 14403 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 24 avril 2024 2 703
Modifié le 9 févr. 2021 à 19:09
Je ne sais pas si ton raisonnement est mauvais, tout dépend à quoi cela va te servir, mais justement tu ne réponds pas à ma 2eme question, c'est cette réponse qui conditionne tout à mon sens
Et je rejoins l'interrogation de DjiDji comment avec une correspondance de 4/5 tu trouve 83% eu lieu de 80% ?
Et à ce moment quelle est la raison de retenir plutôt les correspondances à 83 % que celles à 80% ?

Si tu veux une aide efficace et éviter qu'on tourne des heures autour du pot fournis ton fichier concret qui doit être plus étoffé et différent que celui donné en exemple et le pourquoi de ta recherche de calcul
0
F60lebaladinverni Messages postés 126 Date d'inscription samedi 28 janvier 2017 Statut Membre Dernière intervention 7 avril 2023 2 > via55 Messages postés 14403 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 24 avril 2024
9 févr. 2021 à 20:26
Pour répondre a DjiDji et via55, je suis confus, j’ai du avoir une hallucination, c’est bien 80% et pas 83%. Je sais pas comment j’ai fait mon compte pour arriver à 83%.... bref.

et comment tu trouves 83 % entre a1010 et a1011 ?
Donc c’est bien 80% : pour A1010 il y a 4 caractères sur 5 qui correspondent à A1011 donc 80%

mais justement tu ne réponds pas à ma 2eme question
Tout simplement, je ne l’avais pas vu.
Alors je n’ai pas encore de fichier concret à proposer parce que je viens d’avoir l’idée.
Pour expliquer l’objectif final :
Je récupère la comptabilité d’une société appelé Fichier des Ecritures Comptables que j’ouvre sur Excel.
L’objectif final étant, après avoir sélectionné tous les achats, de trouver des achats passés en doubles et payés en doubles.
L’exemple que je donne avec les A1010, A1011 etc... pourrait correspondre à un numéro de pièce. Le service comptable va enregistrer la facture sous le numéro A1010 une 1ère fois, puis A-1010 une 2eme fois (même si c’est involontaire).
Si donc, je trouve une correspondance de 80% sur un numéro de pièce, 80% sur le libellé de l’écriture etc..., je pourrais conclure avec x% de certitudes que la facture est doublée (et éventuellement le paiement).

Par contre je ne pourrai pas fournir de véritable FEC, j’espère que vous comprendrez...
Mais je pourrai essayer demain de créer un « faux » FEC se rapprochant de la réalité.
Merci de prendre le temps en tout cas de vous pencher sur ce problème.
0
via55 Messages postés 14403 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 24 avril 2024 2 703 > F60lebaladinverni Messages postés 126 Date d'inscription samedi 28 janvier 2017 Statut Membre Dernière intervention 7 avril 2023
Modifié le 10 févr. 2021 à 00:30
Je ne pense pas que le calcul de % seul, même en utilisant la méthode de Levenshtein indiquée par Eric, que je salue bien au passage ☺, te soit d'un grand secours :
en effet si A-1010 et A1010 donnent un % de 83% A-1010 et A51010 donnent aussi 83%

Si tu veux faire des essais avec la méthode de Levenshtein, voilà une fonction personnalisée trouvée sur Internet
Function Levenshtein(ByVal string1 As String, ByVal string2 As String) As Long

Dim i As Long, j As Long, string1_length As Long, string2_length As Long
Dim distance(0 To 60, 0 To 50) As Long, smStr1(1 To 60) As Long, smStr2(1 To 50) As Long
Dim min1 As Long, min2 As Long, min3 As Long, minmin As Long, MaxL As Long
 
string1_length = Len(string1):  string2_length = Len(string2)
 
distance(0, 0) = 0
For i = 1 To string1_length:    distance(i, 0) = i: smStr1(i) = Asc(LCase(Mid$(string1, i, 1))): Next
For j = 1 To string2_length:    distance(0, j) = j: smStr2(j) = Asc(LCase(Mid$(string2, j, 1))): Next
For i = 1 To string1_length
    For j = 1 To string2_length
        If smStr1(i) = smStr2(j) Then
            distance(i, j) = distance(i - 1, j - 1)
        Else
            min1 = distance(i - 1, j) + 1
            min2 = distance(i, j - 1) + 1
            min3 = distance(i - 1, j - 1) + 1
            If min2 < min1 Then
                If min2 < min3 Then minmin = min2 Else minmin = min3
            Else
                If min1 < min3 Then minmin = min1 Else minmin = min3
            End If
            distance(i, j) = minmin
        End If
    Next
Next
 
MaxL = string1_length: If string2_length > MaxL Then MaxL = string2_length
Levenshtein = 100 - CLng((distance(string1_length, string2_length) * 100) / MaxL)
 
End Function


A utiliser comme n'importe quelle fonction Excel avec la syntaxe :
=Levenshtein(première valeur ou cellule de la première valeur; seconde valeur ou cellule de la seconde valeur)

Cdlmnt
Via
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213 > via55 Messages postés 14403 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 24 avril 2024
Modifié le 10 févr. 2021 à 07:11
Salut via,

il y en avait une dans le fichier que j'ai joint ;-)
mais tu as bien fait comme le demandeur ne m'a pas vu non plus...
eric
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
Modifié le 9 févr. 2021 à 19:42
Bonjour à tous,

la distance de Levenshtein pourrait t'intéresser : https://fr.wikipedia.org/wiki/Distance_de_Levenshtein#:~:text=La%20distance%20de%20Levenshtein%20est,une%20cha%C3%AEne%20%C3%A0%20l'autre.
Elle est égale au nombre minimal de caractères qu'il faut supprimer, insérer ou remplacer pour passer d’une chaîne à l’autre.
Tu as aussi la distance de Damerau-Levenstein plus fine mais plus lourde, peut-être pas utile dans ton cas.

https://www.cjoint.com/c/KBjsNd6U7xX
eric

0