En faite j'ai deux tableaux identique (mise en forme), le premier qui
contient des éléments saisi par un opérateur,
Le tableau :
sur deux colonne (colonne A : Libelle qui varie colonne B: Montant)
Je voudrai Excel me souligne par exemple ou m'extrait des donnés identique,
ou des donnés qui contienne un certain nombre caractère identique entre les
deux tableau, sachant que sur le tableau 2 différent mode de saisi (ex.
Dupont Jean Francois peux être écrit : Jean Francois Dupont ou Francous Jean
Dupond mais le montant permettrai de distingue...,
Cela me permet de comparer les deux tableaux (la concordance).
Est ce que c'est possible ?
Pour plus de renseignement je suis prêt a vous envoie un model.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Daniel.M
Bonjour,
La branche d'étude qui traite de cela s'appelle "approximate string matching" et son concept clé est l'"edit-distance", à savoir combien de 'manipulations' (ajouter, enlever, substituer) ai-je besoin de faire sur une chaîne pour la transformer en une autre.
Ton cas me semble assez simple, i.e. comparer les lettres (peu importe leur position) d'une chaîne avec une autre et retourner un INDICE de concordance.
Cependant, ce genre de manipulation s'implante beaucoup plus facilement par VBA que par formule Excel.
La stratégie est: 1.Trouver une petite fonction, TL(), qui traduit une chaîne en tableau est un tableau du nombre d'occurences de chaque lettre (caractère ascii de 0 à 255).
2.Utiliser cette fonction sur S1 et S2 (les 2 chaines à comparer) pour donner les tableaux V1 et V2 et comparer les différences de fréquences des lettres en additionnant les différences de façon à construire un petit indice, cmpTab() qui s'échelonne de 0% (faible concordance) à 100% (forte concordance).
3.Bâtir une fonction, IndiceCmpPlg(), qui cherche dans une Plage la chaîne (S2) qui correspond (+ haut indice de concordance) avec S1 et retourner sa position.
4.Utiliser cette position pour retourner S2. =INDEX(Plage;IndiceCmpPlg(Plage,S1))
'1.
Public Function TL(ByVal S As String) As Variant Dim V(0 To 255), i%, j%, C%
j = Len(S) For i = 1 To j C = Asc(Mid(S, i, 1)) V(C) = V(C) + 1 Next i TL = V End Function
'2. Public Function IndiceCmp(s1 As String, s2 As String) As Double IndiceCmp = cmpTab(TL(s1), Len(s1), TL(s2), Len(s2)) End Function
Public Function cmpTab(ByRef V1 As Variant, ByRef len1 As Integer, _ ByRef V2 As Variant, ByRef len2 As Integer) As Double Dim i As Integer, cDiff As Integer, nbLet As Integer
nbLet = IIf(len1 < len2, len1, len2) If nbLet = 0 Then Exit Function
cDiff = 0 For i = 0 To 255 cDiff = cDiff + Abs(V1(i) - V2(i)) Next i
cmpTab = 1 - (cDiff / (2 * nbLet)) End Function
3. ' Trouve dans la Plage, la cellule qui est la plus rapprochée de Chaine ' et retourne son indice dans la plage Public Function IndiceCmpPlg(Plage As Range, Chaine As String) As Long
Dim C As Range, i As Long, j As Long, temp As Double, LeMax As Double Dim V1 As Variant, len1 As Integer LeMax = 0: i = 0 V1 = TL(Chaine): len1 = Len(Chaine)
For Each C In Plage i = i + 1 temp = cmpTab(V1, len1, TL(C), Len(C)) If temp > LeMax Then LeMax = temp: IndiceCmpPlg = i Next C End Function
Salutations,
Daniel M.
"TALL Yaya" wrote in message news:%
Bonjours,
Je souhaite faire un travail de rapprochement :
En faite j'ai deux tableaux identique (mise en forme), le premier qui contient des éléments saisi par un opérateur, Le tableau : sur deux colonne (colonne A : Libelle qui varie colonne B: Montant)
Je voudrai Excel me souligne par exemple ou m'extrait des donnés identique, ou des donnés qui contienne un certain nombre caractère identique entre les deux tableau, sachant que sur le tableau 2 différent mode de saisi (ex. Dupont Jean Francois peux être écrit : Jean Francois Dupont ou Francous Jean Dupond mais le montant permettrai de distingue...,
Cela me permet de comparer les deux tableaux (la concordance).
Est ce que c'est possible ?
Pour plus de renseignement je suis prêt a vous envoie un model.
Merci pour votre aide & bonne réception.
Bonjour,
La branche d'étude qui traite de cela s'appelle "approximate string matching" et
son concept clé est l'"edit-distance", à savoir combien de 'manipulations'
(ajouter, enlever, substituer) ai-je besoin de faire sur une chaîne pour la
transformer en une autre.
Ton cas me semble assez simple, i.e. comparer les lettres (peu importe leur
position) d'une chaîne avec une autre et retourner un INDICE de concordance.
Cependant, ce genre de manipulation s'implante beaucoup plus facilement par VBA
que par formule Excel.
La stratégie est:
1.Trouver une petite fonction, TL(), qui traduit une chaîne en tableau est un
tableau du nombre d'occurences de chaque lettre (caractère ascii de 0 à 255).
2.Utiliser cette fonction sur S1 et S2 (les 2 chaines à comparer) pour donner
les tableaux V1 et V2 et comparer les différences de fréquences des lettres en
additionnant les différences de façon à construire un petit indice, cmpTab() qui
s'échelonne de 0% (faible concordance) à 100% (forte concordance).
3.Bâtir une fonction, IndiceCmpPlg(), qui cherche dans une Plage la chaîne (S2)
qui correspond (+ haut indice de concordance) avec S1 et retourner sa position.
4.Utiliser cette position pour retourner S2.
=INDEX(Plage;IndiceCmpPlg(Plage,S1))
'1.
Public Function TL(ByVal S As String) As Variant
Dim V(0 To 255), i%, j%, C%
j = Len(S)
For i = 1 To j
C = Asc(Mid(S, i, 1))
V(C) = V(C) + 1
Next i
TL = V
End Function
'2.
Public Function IndiceCmp(s1 As String, s2 As String) As Double
IndiceCmp = cmpTab(TL(s1), Len(s1), TL(s2), Len(s2))
End Function
Public Function cmpTab(ByRef V1 As Variant, ByRef len1 As Integer, _
ByRef V2 As Variant, ByRef len2 As Integer) As Double
Dim i As Integer, cDiff As Integer, nbLet As Integer
nbLet = IIf(len1 < len2, len1, len2)
If nbLet = 0 Then Exit Function
cDiff = 0
For i = 0 To 255
cDiff = cDiff + Abs(V1(i) - V2(i))
Next i
cmpTab = 1 - (cDiff / (2 * nbLet))
End Function
3.
' Trouve dans la Plage, la cellule qui est la plus rapprochée de Chaine
' et retourne son indice dans la plage
Public Function IndiceCmpPlg(Plage As Range, Chaine As String) As Long
Dim C As Range, i As Long, j As Long, temp As Double, LeMax As Double
Dim V1 As Variant, len1 As Integer
LeMax = 0: i = 0
V1 = TL(Chaine): len1 = Len(Chaine)
For Each C In Plage
i = i + 1
temp = cmpTab(V1, len1, TL(C), Len(C))
If temp > LeMax Then LeMax = temp: IndiceCmpPlg = i
Next C
End Function
Salutations,
Daniel M.
"TALL Yaya" <tall.yaya@wanadoo.fr> wrote in message
news:%23VpKFfGiDHA.884@TK2MSFTNGP10.phx.gbl...
Bonjours,
Je souhaite faire un travail de rapprochement :
En faite j'ai deux tableaux identique (mise en forme), le premier qui
contient des éléments saisi par un opérateur,
Le tableau :
sur deux colonne (colonne A : Libelle qui varie colonne B: Montant)
Je voudrai Excel me souligne par exemple ou m'extrait des donnés identique,
ou des donnés qui contienne un certain nombre caractère identique entre les
deux tableau, sachant que sur le tableau 2 différent mode de saisi (ex.
Dupont Jean Francois peux être écrit : Jean Francois Dupont ou Francous Jean
Dupond mais le montant permettrai de distingue...,
Cela me permet de comparer les deux tableaux (la concordance).
Est ce que c'est possible ?
Pour plus de renseignement je suis prêt a vous envoie un model.
La branche d'étude qui traite de cela s'appelle "approximate string matching" et son concept clé est l'"edit-distance", à savoir combien de 'manipulations' (ajouter, enlever, substituer) ai-je besoin de faire sur une chaîne pour la transformer en une autre.
Ton cas me semble assez simple, i.e. comparer les lettres (peu importe leur position) d'une chaîne avec une autre et retourner un INDICE de concordance.
Cependant, ce genre de manipulation s'implante beaucoup plus facilement par VBA que par formule Excel.
La stratégie est: 1.Trouver une petite fonction, TL(), qui traduit une chaîne en tableau est un tableau du nombre d'occurences de chaque lettre (caractère ascii de 0 à 255).
2.Utiliser cette fonction sur S1 et S2 (les 2 chaines à comparer) pour donner les tableaux V1 et V2 et comparer les différences de fréquences des lettres en additionnant les différences de façon à construire un petit indice, cmpTab() qui s'échelonne de 0% (faible concordance) à 100% (forte concordance).
3.Bâtir une fonction, IndiceCmpPlg(), qui cherche dans une Plage la chaîne (S2) qui correspond (+ haut indice de concordance) avec S1 et retourner sa position.
4.Utiliser cette position pour retourner S2. =INDEX(Plage;IndiceCmpPlg(Plage,S1))
'1.
Public Function TL(ByVal S As String) As Variant Dim V(0 To 255), i%, j%, C%
j = Len(S) For i = 1 To j C = Asc(Mid(S, i, 1)) V(C) = V(C) + 1 Next i TL = V End Function
'2. Public Function IndiceCmp(s1 As String, s2 As String) As Double IndiceCmp = cmpTab(TL(s1), Len(s1), TL(s2), Len(s2)) End Function
Public Function cmpTab(ByRef V1 As Variant, ByRef len1 As Integer, _ ByRef V2 As Variant, ByRef len2 As Integer) As Double Dim i As Integer, cDiff As Integer, nbLet As Integer
nbLet = IIf(len1 < len2, len1, len2) If nbLet = 0 Then Exit Function
cDiff = 0 For i = 0 To 255 cDiff = cDiff + Abs(V1(i) - V2(i)) Next i
cmpTab = 1 - (cDiff / (2 * nbLet)) End Function
3. ' Trouve dans la Plage, la cellule qui est la plus rapprochée de Chaine ' et retourne son indice dans la plage Public Function IndiceCmpPlg(Plage As Range, Chaine As String) As Long
Dim C As Range, i As Long, j As Long, temp As Double, LeMax As Double Dim V1 As Variant, len1 As Integer LeMax = 0: i = 0 V1 = TL(Chaine): len1 = Len(Chaine)
For Each C In Plage i = i + 1 temp = cmpTab(V1, len1, TL(C), Len(C)) If temp > LeMax Then LeMax = temp: IndiceCmpPlg = i Next C End Function
Salutations,
Daniel M.
"TALL Yaya" wrote in message news:%
Bonjours,
Je souhaite faire un travail de rapprochement :
En faite j'ai deux tableaux identique (mise en forme), le premier qui contient des éléments saisi par un opérateur, Le tableau : sur deux colonne (colonne A : Libelle qui varie colonne B: Montant)
Je voudrai Excel me souligne par exemple ou m'extrait des donnés identique, ou des donnés qui contienne un certain nombre caractère identique entre les deux tableau, sachant que sur le tableau 2 différent mode de saisi (ex. Dupont Jean Francois peux être écrit : Jean Francois Dupont ou Francous Jean Dupond mais le montant permettrai de distingue...,
Cela me permet de comparer les deux tableaux (la concordance).
Est ce que c'est possible ?
Pour plus de renseignement je suis prêt a vous envoie un model.
Merci pour votre aide & bonne réception.
TALL Yaya
Merci pour ton aide je suis en train d'essayer de comprendre ton message...
Bonne reception, "Daniel.M" a écrit dans le message de news: PPKeb.81064$
Bonjour,
La branche d'étude qui traite de cela s'appelle "approximate string matching" et
son concept clé est l'"edit-distance", à savoir combien de 'manipulations' (ajouter, enlever, substituer) ai-je besoin de faire sur une chaîne pour la
transformer en une autre.
Ton cas me semble assez simple, i.e. comparer les lettres (peu importe leur
position) d'une chaîne avec une autre et retourner un INDICE de concordance.
Cependant, ce genre de manipulation s'implante beaucoup plus facilement par VBA
que par formule Excel.
La stratégie est: 1.Trouver une petite fonction, TL(), qui traduit une chaîne en tableau est un
tableau du nombre d'occurences de chaque lettre (caractère ascii de 0 à 255).
2.Utiliser cette fonction sur S1 et S2 (les 2 chaines à comparer) pour donner
les tableaux V1 et V2 et comparer les différences de fréquences des lettres en
additionnant les différences de façon à construire un petit indice, cmpTab() qui
s'échelonne de 0% (faible concordance) à 100% (forte concordance).
3.Bâtir une fonction, IndiceCmpPlg(), qui cherche dans une Plage la chaîne (S2)
qui correspond (+ haut indice de concordance) avec S1 et retourner sa position.
4.Utiliser cette position pour retourner S2. =INDEX(Plage;IndiceCmpPlg(Plage,S1))
'1.
Public Function TL(ByVal S As String) As Variant Dim V(0 To 255), i%, j%, C%
j = Len(S) For i = 1 To j C = Asc(Mid(S, i, 1)) V(C) = V(C) + 1 Next i TL = V End Function
'2. Public Function IndiceCmp(s1 As String, s2 As String) As Double IndiceCmp = cmpTab(TL(s1), Len(s1), TL(s2), Len(s2)) End Function
Public Function cmpTab(ByRef V1 As Variant, ByRef len1 As Integer, _ ByRef V2 As Variant, ByRef len2 As Integer) As Double Dim i As Integer, cDiff As Integer, nbLet As Integer
nbLet = IIf(len1 < len2, len1, len2) If nbLet = 0 Then Exit Function
cDiff = 0 For i = 0 To 255 cDiff = cDiff + Abs(V1(i) - V2(i)) Next i
cmpTab = 1 - (cDiff / (2 * nbLet)) End Function
3. ' Trouve dans la Plage, la cellule qui est la plus rapprochée de Chaine ' et retourne son indice dans la plage Public Function IndiceCmpPlg(Plage As Range, Chaine As String) As Long
Dim C As Range, i As Long, j As Long, temp As Double, LeMax As Double Dim V1 As Variant, len1 As Integer LeMax = 0: i = 0 V1 = TL(Chaine): len1 = Len(Chaine)
For Each C In Plage i = i + 1 temp = cmpTab(V1, len1, TL(C), Len(C)) If temp > LeMax Then LeMax = temp: IndiceCmpPlg = i Next C End Function
Salutations,
Daniel M.
"TALL Yaya" wrote in message news:%
Bonjours,
Je souhaite faire un travail de rapprochement :
En faite j'ai deux tableaux identique (mise en forme), le premier qui contient des éléments saisi par un opérateur, Le tableau : sur deux colonne (colonne A : Libelle qui varie colonne B: Montant)
Je voudrai Excel me souligne par exemple ou m'extrait des donnés identique,
ou des donnés qui contienne un certain nombre caractère identique entre les
deux tableau, sachant que sur le tableau 2 différent mode de saisi (ex. Dupont Jean Francois peux être écrit : Jean Francois Dupont ou Francous Jean
Dupond mais le montant permettrai de distingue...,
Cela me permet de comparer les deux tableaux (la concordance).
Est ce que c'est possible ?
Pour plus de renseignement je suis prêt a vous envoie un model.
Merci pour votre aide & bonne réception.
Merci pour ton aide je suis en train d'essayer de comprendre ton message...
Bonne reception,
"Daniel.M" <prenom.maher@bigfoot.inutil.com> a écrit dans le message de
news: PPKeb.81064$tJ6.2063478@wagner.videotron.net...
Bonjour,
La branche d'étude qui traite de cela s'appelle "approximate string
matching" et
son concept clé est l'"edit-distance", à savoir combien de 'manipulations'
(ajouter, enlever, substituer) ai-je besoin de faire sur une chaîne pour
la
transformer en une autre.
Ton cas me semble assez simple, i.e. comparer les lettres (peu importe
leur
position) d'une chaîne avec une autre et retourner un INDICE de
concordance.
Cependant, ce genre de manipulation s'implante beaucoup plus facilement
par VBA
que par formule Excel.
La stratégie est:
1.Trouver une petite fonction, TL(), qui traduit une chaîne en tableau est
un
tableau du nombre d'occurences de chaque lettre (caractère ascii de 0 à
255).
2.Utiliser cette fonction sur S1 et S2 (les 2 chaines à comparer) pour
donner
les tableaux V1 et V2 et comparer les différences de fréquences des
lettres en
additionnant les différences de façon à construire un petit indice,
cmpTab() qui
s'échelonne de 0% (faible concordance) à 100% (forte concordance).
3.Bâtir une fonction, IndiceCmpPlg(), qui cherche dans une Plage la chaîne
(S2)
qui correspond (+ haut indice de concordance) avec S1 et retourner sa
position.
4.Utiliser cette position pour retourner S2.
=INDEX(Plage;IndiceCmpPlg(Plage,S1))
'1.
Public Function TL(ByVal S As String) As Variant
Dim V(0 To 255), i%, j%, C%
j = Len(S)
For i = 1 To j
C = Asc(Mid(S, i, 1))
V(C) = V(C) + 1
Next i
TL = V
End Function
'2.
Public Function IndiceCmp(s1 As String, s2 As String) As Double
IndiceCmp = cmpTab(TL(s1), Len(s1), TL(s2), Len(s2))
End Function
Public Function cmpTab(ByRef V1 As Variant, ByRef len1 As Integer, _
ByRef V2 As Variant, ByRef len2 As Integer) As Double
Dim i As Integer, cDiff As Integer, nbLet As Integer
nbLet = IIf(len1 < len2, len1, len2)
If nbLet = 0 Then Exit Function
cDiff = 0
For i = 0 To 255
cDiff = cDiff + Abs(V1(i) - V2(i))
Next i
cmpTab = 1 - (cDiff / (2 * nbLet))
End Function
3.
' Trouve dans la Plage, la cellule qui est la plus rapprochée de Chaine
' et retourne son indice dans la plage
Public Function IndiceCmpPlg(Plage As Range, Chaine As String) As Long
Dim C As Range, i As Long, j As Long, temp As Double, LeMax As Double
Dim V1 As Variant, len1 As Integer
LeMax = 0: i = 0
V1 = TL(Chaine): len1 = Len(Chaine)
For Each C In Plage
i = i + 1
temp = cmpTab(V1, len1, TL(C), Len(C))
If temp > LeMax Then LeMax = temp: IndiceCmpPlg = i
Next C
End Function
Salutations,
Daniel M.
"TALL Yaya" <tall.yaya@wanadoo.fr> wrote in message
news:%23VpKFfGiDHA.884@TK2MSFTNGP10.phx.gbl...
Bonjours,
Je souhaite faire un travail de rapprochement :
En faite j'ai deux tableaux identique (mise en forme), le premier qui
contient des éléments saisi par un opérateur,
Le tableau :
sur deux colonne (colonne A : Libelle qui varie colonne B: Montant)
Je voudrai Excel me souligne par exemple ou m'extrait des donnés
identique,
ou des donnés qui contienne un certain nombre caractère identique entre
les
deux tableau, sachant que sur le tableau 2 différent mode de saisi (ex.
Dupont Jean Francois peux être écrit : Jean Francois Dupont ou Francous
Jean
Dupond mais le montant permettrai de distingue...,
Cela me permet de comparer les deux tableaux (la concordance).
Est ce que c'est possible ?
Pour plus de renseignement je suis prêt a vous envoie un model.
Merci pour ton aide je suis en train d'essayer de comprendre ton message...
Bonne reception, "Daniel.M" a écrit dans le message de news: PPKeb.81064$
Bonjour,
La branche d'étude qui traite de cela s'appelle "approximate string matching" et
son concept clé est l'"edit-distance", à savoir combien de 'manipulations' (ajouter, enlever, substituer) ai-je besoin de faire sur une chaîne pour la
transformer en une autre.
Ton cas me semble assez simple, i.e. comparer les lettres (peu importe leur
position) d'une chaîne avec une autre et retourner un INDICE de concordance.
Cependant, ce genre de manipulation s'implante beaucoup plus facilement par VBA
que par formule Excel.
La stratégie est: 1.Trouver une petite fonction, TL(), qui traduit une chaîne en tableau est un
tableau du nombre d'occurences de chaque lettre (caractère ascii de 0 à 255).
2.Utiliser cette fonction sur S1 et S2 (les 2 chaines à comparer) pour donner
les tableaux V1 et V2 et comparer les différences de fréquences des lettres en
additionnant les différences de façon à construire un petit indice, cmpTab() qui
s'échelonne de 0% (faible concordance) à 100% (forte concordance).
3.Bâtir une fonction, IndiceCmpPlg(), qui cherche dans une Plage la chaîne (S2)
qui correspond (+ haut indice de concordance) avec S1 et retourner sa position.
4.Utiliser cette position pour retourner S2. =INDEX(Plage;IndiceCmpPlg(Plage,S1))
'1.
Public Function TL(ByVal S As String) As Variant Dim V(0 To 255), i%, j%, C%
j = Len(S) For i = 1 To j C = Asc(Mid(S, i, 1)) V(C) = V(C) + 1 Next i TL = V End Function
'2. Public Function IndiceCmp(s1 As String, s2 As String) As Double IndiceCmp = cmpTab(TL(s1), Len(s1), TL(s2), Len(s2)) End Function
Public Function cmpTab(ByRef V1 As Variant, ByRef len1 As Integer, _ ByRef V2 As Variant, ByRef len2 As Integer) As Double Dim i As Integer, cDiff As Integer, nbLet As Integer
nbLet = IIf(len1 < len2, len1, len2) If nbLet = 0 Then Exit Function
cDiff = 0 For i = 0 To 255 cDiff = cDiff + Abs(V1(i) - V2(i)) Next i
cmpTab = 1 - (cDiff / (2 * nbLet)) End Function
3. ' Trouve dans la Plage, la cellule qui est la plus rapprochée de Chaine ' et retourne son indice dans la plage Public Function IndiceCmpPlg(Plage As Range, Chaine As String) As Long
Dim C As Range, i As Long, j As Long, temp As Double, LeMax As Double Dim V1 As Variant, len1 As Integer LeMax = 0: i = 0 V1 = TL(Chaine): len1 = Len(Chaine)
For Each C In Plage i = i + 1 temp = cmpTab(V1, len1, TL(C), Len(C)) If temp > LeMax Then LeMax = temp: IndiceCmpPlg = i Next C End Function
Salutations,
Daniel M.
"TALL Yaya" wrote in message news:%
Bonjours,
Je souhaite faire un travail de rapprochement :
En faite j'ai deux tableaux identique (mise en forme), le premier qui contient des éléments saisi par un opérateur, Le tableau : sur deux colonne (colonne A : Libelle qui varie colonne B: Montant)
Je voudrai Excel me souligne par exemple ou m'extrait des donnés identique,
ou des donnés qui contienne un certain nombre caractère identique entre les
deux tableau, sachant que sur le tableau 2 différent mode de saisi (ex. Dupont Jean Francois peux être écrit : Jean Francois Dupont ou Francous Jean
Dupond mais le montant permettrai de distingue...,
Cela me permet de comparer les deux tableaux (la concordance).
Est ce que c'est possible ?
Pour plus de renseignement je suis prêt a vous envoie un model.
Merci pour votre aide & bonne réception.
Daniel.M
Salut,
Si tu as besoin de précisions, rapplique avec ce qui fait problème pour toi.
Salutations,
Daniel M.
"TALL Yaya" wrote in message news:%
Merci pour ton aide je suis en train d'essayer de comprendre ton message...
Bonne reception,
Salut,
Si tu as besoin de précisions, rapplique avec ce qui fait problème pour toi.
Salutations,
Daniel M.
"TALL Yaya" <tall.yaya@wanadoo.fr> wrote in message
news:%23ie8uXpiDHA.1688@TK2MSFTNGP10.phx.gbl...
Merci pour ton aide je suis en train d'essayer de comprendre ton message...