Calculer un % identique du contenu d'une cellule avec une autre
F60lebaladinverni
Messages postés
128
Statut
Membre
-
F60lebaladinverni Messages postés 128 Statut Membre -
F60lebaladinverni Messages postés 128 Statut Membre -
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
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
A voir également:
- Levenshtein excel
- Comment calculer la moyenne sur excel - Guide
- Bloquer une cellule excel - Guide
- Aller à la ligne dans une cellule excel - Guide
- Fusionner deux cellules excel en gardant le contenu - Guide
- Excel remplir automatiquement une cellule en fonction d'une autre ✓ - Forum Excel
5 réponses
Bonjour,
En A1 : 5 caractères en commun avec A2 sur 6 (l'ordre étant respecté)
ça fait 83% :)
Cordialement
En A1 : 5 caractères en commun avec A2 sur 6 (l'ordre étant respecté)
ça fait 83% :)
Cordialement
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 % ?
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 % ?
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 ?
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 ?
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
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
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.
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.
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
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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