Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Comparaison chaines de caracteres

19 réponses
Avatar
Grandola
Bonjour à tous,

Avant de me pendre je vous soumets un casse-tete que je n'arrive pas à
résoudre.

Plutôt que d'exposer le schmilblik ici, j'ai tout expliquer en
commentaire de la cellule B2 du fichier suivant :
http://www.cijoint.fr/cjlink.php?file=cj200904/cijDWAUy6O.zip

Si un super champion d'Excel/VBA pouvait y jeter un oeil ce serait sympa
à lui.

Euuuuh... pour les curieux... il s'agit de comparaison de chaînes de
caractères...

Merci à tous.

9 réponses

1 2
Avatar
Corto
Bonjour Grandola,
Quand on m'explique longtemps, je comprends vite. Vas voir sur
http://cjoint.com/?ereYwoEFB3.
Enfin.... je pense avoir compris.

Corto

Grandola a écrit :
Euuuuh, oui... la méthode de comparaison est bonne... sauf que tu
rajoutes des colonnes (pas très cool si on a un grand nombre de
chaines à comparer en colonne A...) et que tu compares une chaine de
caractères à elle même.

En fait, au final ce que je souhaiterais en cellule B2 c'est le nombre
maximum trouvé dans la plage B2:H2. Dans ton exemple, ce serait "1".
En B3, le nombre maximum trouvé dans la plage B3:H3, soit "5"... ét ant
entendu qu'on exclut la comparaison d'une chaîne à elle-même sino n B2,
B3, B4, B5, etc... contiendraient toutes "15". ;-)


--------------------------------------------------



Corto a écrit :
Bonjour Grandola,
Comme ca : http://cjoint.com/?erbCcqvwER ?

Corto

Grandola a écrit :
Merci Corto,

Je viens de regarder ta fonction mais en fait tu compares
"seulement" A2 à A3, puis A2 à A4, puis A2 à A5...

Le truc c'est que j'aimerais comparer :
A2 à A3, puis A2 à A4, puis, A2 à A5...
PUIS... A3 à A2, puis A3 à A5, puis A3 à A6....
PUIS A4 à A2, puis A4 à A3, puis A4 à A5.

En gros on dois comparer TOUTES les cellules de la colonne A à
toutes les autres cellules - toujours de la colonne A - et écrire e n
colonne B le nombre maximum d'occurrences communes trouvées.

Exemples :

....
A2 a 12 occurences communes avec A16
....
A2 a 3 occurrences communes avec A54
....
A2 a 14 occurrences communes avec A68
....
A2 a 0 occurrences communes avec A121

---> En B2, on aura la fonction COMPARAISONCHAINE(A2) qui renverra "1 4"


....
A33 a 7 occurences communes avec A4
....
A33 a 1 occurrence commune avec A10
....
A33 a 2 occurrences communes avec A162
....
A33 a 9 occurrences communes avec A540

---> En B33, on aura la fonction COMPARAISONCHAINE(A33) qui renverra
"9"



En espérant mettre mieux expliquer cette fois-ci. ;-)



--------------------------------------------------------------------- -------------------------------------



Corto a écrit :
Bonjour Grandola,
Jettes un coup d'oeil à l'adresse : http://cjoint.com/?eqgQXSu6F4

Corto

Grandola a écrit :
Bonjour à tous,

Avant de me pendre je vous soumets un casse-tete que je n'arrive
pas à résoudre.

Plutôt que d'exposer le schmilblik ici, j'ai tout expliquer en
commentaire de la cellule B2 du fichier suivant :
http://www.cijoint.fr/cjlink.php?file=cj200904/cijDWAUy6O.zip

Si un super champion d'Excel/VBA pouvait y jeter un oeil ce serait
sympa à lui.

Euuuuh... pour les curieux... il s'agit de comparaison de chaînes
de caractères...

Merci à tous.










Avatar
Grandola
Oui. Dans ton exemple, le résultat serait "1" puisque la chaine X et la
chaine Y ont uniquement la position 5 en commun.

En revanche, p'tit rappel avec un exemple :

ABCD-
FABC-

Là le résultat serait "0" bien qu'en position 5 le caractère "-"
apparaisse dans les deux chaînes de caractères... car on compare
uniquement si la position considérée contient une LETTRE ou UN CHIFFRE.


---------------------------------



isabelle a écrit :
à la même position dans les deux chaînes, c'est valable dans tout les cas ?

ABCDE
FABCE

le resultat serait 1 ?

isabelle

Grandola a écrit :
Non D sera compté une seule fois.

En fait, on regarde la position 1 dans les deux chaines, on regarde si
c'est la même LETTRE ou CHIFFRE. Si oui, on incrémente le compteur de
1. Puis on passe à la position 2, etc, etc,...

Une même LETTRE ou CHIFFRE peut être compté plusieurs fois MAIS
seulement si on retrouve plusieurs fois cette même LETTRE ou CHIFFRE à
la même position dans les deux chaînes.

Exemple :

A1 : OUNKOW
A2 : OFFFOP

----> "O" sera compté 2 fois.

Précisions :

- la fonction ne sera pas CASE SENSITIVE.
- les chaines présentes en colonne A sont TOUJOURS de longueur
invariable : 15 caractères.



-----------------------------------------------------------------------



isabelle a écrit :
par exemple :

A1 = ABCDE*GF
A2 = ABCDDdHMNP

est ce que la lettre D sera comptée 3 fois ?

isabelle



Grandola a écrit :
Voilà :
http://www.cijoint.fr/cjlink.php?file=cj200904/cij7BdD91C.xls


isabelle a écrit :
bonjour Grandola,

il faudrait que tu mettes en ligne un fichier enregistré en xl2003,

isabelle

Grandola a écrit :
Bonjour à tous,

Avant de me pendre je vous soumets un casse-tete que je n'arrive
pas à résoudre.

Plutôt que d'exposer le schmilblik ici, j'ai tout expliquer en
commentaire de la cellule B2 du fichier suivant :
http://www.cijoint.fr/cjlink.php?file=cj200904/cijDWAUy6O.zip

Si un super champion d'Excel/VBA pouvait y jeter un oeil ce serait
sympa à lui.

Euuuuh... pour les curieux... il s'agit de comparaison de chaînes
de caractères...

Merci à tous.












Avatar
Grandola
Hmmm... effectivement le principe est assimilé lol... mais y'a un
mais... enfin... deux, plus exactement.

En premier lieu, tu m'exclus pas de ton champ de comparaison les
caractères qui ne sont ni des LETTRES, ni des CHIFFRES. J'ai fait le
test en remplaçant par un "-" le 2ème "i" de la chaîne PMNEISOSNAAIU9E
(autrement dit, la chaine est devenue "PMNEISOSNAA-U9E")... et là... la
fonction a renvoyé "6" au lieu de "5" auparavant. Ce qui veut dire
qu'elle a comptabilisé le fait qu'un "-" se trouvait en position 12 de
la chaîne "PMNEISOSNAA-U9E" (A8) et de la chaîne "OMNEIUCENSU-NXP" (A3).

Donc, pour résumer, si un caractère autre qu'un CHIFFRE ou UNE LETTRE se
trouve en position 1 de la chaine A OU en position 1 de la chaine B, on
ne compare pas la position 1. On passe à la position 2...


Le second "mais" est le suivant : ta formule s'écrit sous la forme
CARACTERESCOMMUNS( celluleoùsetrouvelachaineàcomparerauxautres ; plage
de cellules ). J'ai essayé avec plage de cellules=A:A . Ca a "planté"
excel... enfin... non... mais le traitement semblait très interminable.
J'ai dû tuer le processus.

Aussi, j'aurais plutôt aimé que la formule réagisse de façon plus
dynamique : quand on lui indique A:A en plage de celulles, elle s'arrête
de chercher des chaines à comparer si elle trouve une cellule vide dans
la colonne A.


Quoi qu'il en soit, merci infiniment pour ta /votre (coucou Isabelle ;-)
) patience....



-----------------------------








Corto a écrit :
Bonjour Grandola,
Quand on m'explique longtemps, je comprends vite. Vas voir sur
http://cjoint.com/?ereYwoEFB3.
Enfin.... je pense avoir compris.

Corto

Grandola a écrit :
Euuuuh, oui... la méthode de comparaison est bonne... sauf que tu
rajoutes des colonnes (pas très cool si on a un grand nombre de
chaines à comparer en colonne A...) et que tu compares une chaine de
caractères à elle même.

En fait, au final ce que je souhaiterais en cellule B2 c'est le nombre
maximum trouvé dans la plage B2:H2. Dans ton exemple, ce serait "1".
En B3, le nombre maximum trouvé dans la plage B3:H3, soit "5"... étant
entendu qu'on exclut la comparaison d'une chaîne à elle-même sinon B2,
B3, B4, B5, etc... contiendraient toutes "15". ;-)


--------------------------------------------------



Corto a écrit :
Bonjour Grandola,
Comme ca : http://cjoint.com/?erbCcqvwER ?

Corto

Grandola a écrit :
Merci Corto,

Je viens de regarder ta fonction mais en fait tu compares
"seulement" A2 à A3, puis A2 à A4, puis A2 à A5...

Le truc c'est que j'aimerais comparer :
A2 à A3, puis A2 à A4, puis, A2 à A5...
PUIS... A3 à A2, puis A3 à A5, puis A3 à A6....
PUIS A4 à A2, puis A4 à A3, puis A4 à A5.

En gros on dois comparer TOUTES les cellules de la colonne A à
toutes les autres cellules - toujours de la colonne A - et écrire en
colonne B le nombre maximum d'occurrences communes trouvées.

Exemples :

....
A2 a 12 occurences communes avec A16
....
A2 a 3 occurrences communes avec A54
....
A2 a 14 occurrences communes avec A68
....
A2 a 0 occurrences communes avec A121

---> En B2, on aura la fonction COMPARAISONCHAINE(A2) qui renverra "14"


....
A33 a 7 occurences communes avec A4
....
A33 a 1 occurrence commune avec A10
....
A33 a 2 occurrences communes avec A162
....
A33 a 9 occurrences communes avec A540

---> En B33, on aura la fonction COMPARAISONCHAINE(A33) qui renverra
"9"



En espérant mettre mieux expliquer cette fois-ci. ;-)



----------------------------------------------------------------------------------------------------------



Corto a écrit :
Bonjour Grandola,
Jettes un coup d'oeil à l'adresse : http://cjoint.com/?eqgQXSu6F4

Corto

Grandola a écrit :
Bonjour à tous,

Avant de me pendre je vous soumets un casse-tete que je n'arrive
pas à résoudre.

Plutôt que d'exposer le schmilblik ici, j'ai tout expliquer en
commentaire de la cellule B2 du fichier suivant :
http://www.cijoint.fr/cjlink.php?file=cj200904/cijDWAUy6O.zip

Si un super champion d'Excel/VBA pouvait y jeter un oeil ce serait
sympa à lui.

Euuuuh... pour les curieux... il s'agit de comparaison de chaînes
de caractères...

Merci à tous.












Avatar
isabelle
bonjour Grandola,

voilà,

Sub Macro1()
Dim plg()
liste = Array("-", "*") 'à adapter
For Each p In Range("A1:A7")
For Each c In Range("A1:A7")
If p = c Then GoTo f
x = 1
For i = 1 To Len(p)
If Not IsError(Application.Match(Mid(p, i, 1), liste, 0)) Then
If Mid(p, i, 1) = Mid(c, i, 1) Then y = y + 1
End If
Next
If y = 0 Then GoTo f
ReDim Preserve plg(x)
plg(x) = y
f:
Next
On Error Resume Next
Range("B" & p.Row) = Application.Max(plg)
y = 0
x = 0
Next
End Sub

isabelle

Grandola a écrit :
Oui. Dans ton exemple, le résultat serait "1" puisque la chaine X et
la chaine Y ont uniquement la position 5 en commun.

En revanche, p'tit rappel avec un exemple :

ABCD-
FABC-

Là le résultat serait "0" bien qu'en position 5 le caractère "-"
apparaisse dans les deux chaînes de caractères... car on compare
uniquement si la position considérée contient une LETTRE ou UN CHIFFRE.


---------------------------------



isabelle a écrit :
à la même position dans les deux chaînes, c'est valable dans tout les
cas ?

ABCDE
FABCE

le resultat serait 1 ?

isabelle

Grandola a écrit :
Non D sera compté une seule fois.

En fait, on regarde la position 1 dans les deux chaines, on regarde
si c'est la même LETTRE ou CHIFFRE. Si oui, on incrémente le
compteur de 1. Puis on passe à la position 2, etc, etc,...

Une même LETTRE ou CHIFFRE peut être compté plusieurs fois MAIS
seulement si on retrouve plusieurs fois cette même LETTRE ou CHIFFRE
à la même position dans les deux chaînes.

Exemple :

A1 : OUNKOW
A2 : OFFFOP

----> "O" sera compté 2 fois.

Précisions :

- la fonction ne sera pas CASE SENSITIVE.
- les chaines présentes en colonne A sont TOUJOURS de longueur
invariable : 15 caractères.



-----------------------------------------------------------------------



isabelle a écrit :
par exemple :

A1 = ABCDE*GF
A2 = ABCDDdHMNP

est ce que la lettre D sera comptée 3 fois ?

isabelle



Grandola a écrit :
Voilà :
http://www.cijoint.fr/cjlink.php?file=cj200904/cij7BdD91C.xls


isabelle a écrit :
bonjour Grandola,

il faudrait que tu mettes en ligne un fichier enregistré en xl2003,

isabelle

Grandola a écrit :
Bonjour à tous,

Avant de me pendre je vous soumets un casse-tete que je n'arrive
pas à résoudre.

Plutôt que d'exposer le schmilblik ici, j'ai tout expliquer en
commentaire de la cellule B2 du fichier suivant :
http://www.cijoint.fr/cjlink.php?file=cj200904/cijDWAUy6O.zip

Si un super champion d'Excel/VBA pouvait y jeter un oeil ce
serait sympa à lui.

Euuuuh... pour les curieux... il s'agit de comparaison de
chaînes de caractères...

Merci à tous.














Avatar
Corto
Bonjour Grandola,
Moi qui croyais avoir fini par comprendre :-!
Cela correspond il enfin au cahier des charges :
http://cjoint.com/?erxp3YWJWu

Corto

Grandola a écrit :
Hmmm... effectivement le principe est assimilé lol... mais y'a un
mais... enfin... deux, plus exactement.

En premier lieu, tu m'exclus pas de ton champ de comparaison les
caractères qui ne sont ni des LETTRES, ni des CHIFFRES. J'ai fait le
test en remplaçant par un "-" le 2ème "i" de la chaîne PMNEISOSNA AIU9E
(autrement dit, la chaine est devenue "PMNEISOSNAA-U9E")... et là...
la fonction a renvoyé "6" au lieu de "5" auparavant. Ce qui veut dire
qu'elle a comptabilisé le fait qu'un "-" se trouvait en position 12 d e
la chaîne "PMNEISOSNAA-U9E" (A8) et de la chaîne "OMNEIUCENSU-NXP" (A3).

Donc, pour résumer, si un caractère autre qu'un CHIFFRE ou UNE LETT RE
se trouve en position 1 de la chaine A OU en position 1 de la chaine
B, on ne compare pas la position 1. On passe à la position 2...


Le second "mais" est le suivant : ta formule s'écrit sous la forme
CARACTERESCOMMUNS( celluleoùsetrouvelachaineàcomparerauxautres ; pl age
de cellules ). J'ai essayé avec plage de cellules=A:A . Ca a
"planté" excel... enfin... non... mais le traitement semblait très
interminable. J'ai dû tuer le processus.

Aussi, j'aurais plutôt aimé que la formule réagisse de façon pl us
dynamique : quand on lui indique A:A en plage de celulles, elle
s'arrête de chercher des chaines à comparer si elle trouve une cell ule
vide dans la colonne A.


Quoi qu'il en soit, merci infiniment pour ta /votre (coucou Isabelle
;-) ) patience....



-----------------------------








Corto a écrit :
Bonjour Grandola,
Quand on m'explique longtemps, je comprends vite. Vas voir sur
http://cjoint.com/?ereYwoEFB3.
Enfin.... je pense avoir compris.

Corto

Grandola a écrit :
Euuuuh, oui... la méthode de comparaison est bonne... sauf que tu
rajoutes des colonnes (pas très cool si on a un grand nombre de
chaines à comparer en colonne A...) et que tu compares une chaine d e
caractères à elle même.

En fait, au final ce que je souhaiterais en cellule B2 c'est le
nombre maximum trouvé dans la plage B2:H2. Dans ton exemple, ce
serait "1". En B3, le nombre maximum trouvé dans la plage B3:H3,
soit "5"... étant entendu qu'on exclut la comparaison d'une chaîn e à
elle-même sinon B2, B3, B4, B5, etc... contiendraient toutes "15". ;-)


--------------------------------------------------



Corto a écrit :
Bonjour Grandola,
Comme ca : http://cjoint.com/?erbCcqvwER ?

Corto

Grandola a écrit :
Merci Corto,

Je viens de regarder ta fonction mais en fait tu compares
"seulement" A2 à A3, puis A2 à A4, puis A2 à A5...

Le truc c'est que j'aimerais comparer :
A2 à A3, puis A2 à A4, puis, A2 à A5...
PUIS... A3 à A2, puis A3 à A5, puis A3 à A6....
PUIS A4 à A2, puis A4 à A3, puis A4 à A5.

En gros on dois comparer TOUTES les cellules de la colonne A à
toutes les autres cellules - toujours de la colonne A - et écrire
en colonne B le nombre maximum d'occurrences communes trouvées.

Exemples :

....
A2 a 12 occurences communes avec A16
....
A2 a 3 occurrences communes avec A54
....
A2 a 14 occurrences communes avec A68
....
A2 a 0 occurrences communes avec A121

---> En B2, on aura la fonction COMPARAISONCHAINE(A2) qui renverra
"14"


....
A33 a 7 occurences communes avec A4
....
A33 a 1 occurrence commune avec A10
....
A33 a 2 occurrences communes avec A162
....
A33 a 9 occurrences communes avec A540

---> En B33, on aura la fonction COMPARAISONCHAINE(A33) qui
renverra "9"



En espérant mettre mieux expliquer cette fois-ci. ;-)



------------------------------------------------------------------- ---------------------------------------



Corto a écrit :
Bonjour Grandola,
Jettes un coup d'oeil à l'adresse : http://cjoint.com/?eqgQXSu6F 4

Corto

Grandola a écrit :
Bonjour à tous,

Avant de me pendre je vous soumets un casse-tete que je n'arrive
pas à résoudre.

Plutôt que d'exposer le schmilblik ici, j'ai tout expliquer en
commentaire de la cellule B2 du fichier suivant :
http://www.cijoint.fr/cjlink.php?file=cj200904/cijDWAUy6O.zip

Si un super champion d'Excel/VBA pouvait y jeter un oeil ce
serait sympa à lui.

Euuuuh... pour les curieux... il s'agit de comparaison de
chaînes de caractères...

Merci à tous.














Avatar
Grandola
C'est tout simplement PARFAIT. Un grand merci à toi !

Un grand merci également à Isabelle qui elle aussi à plancher et réussi
à résoudre le smilblick.

Encore merci à vous deux. C'est génial !!!! :-))))))


----------------------------


Corto a écrit :
Bonjour Grandola,
Moi qui croyais avoir fini par comprendre :-!
Cela correspond il enfin au cahier des charges :
http://cjoint.com/?erxp3YWJWu

Corto

Grandola a écrit :
Hmmm... effectivement le principe est assimilé lol... mais y'a un
mais... enfin... deux, plus exactement.

En premier lieu, tu m'exclus pas de ton champ de comparaison les
caractères qui ne sont ni des LETTRES, ni des CHIFFRES. J'ai fait le
test en remplaçant par un "-" le 2ème "i" de la chaîne PMNEISOSNAAIU9E
(autrement dit, la chaine est devenue "PMNEISOSNAA-U9E")... et là...
la fonction a renvoyé "6" au lieu de "5" auparavant. Ce qui veut dire
qu'elle a comptabilisé le fait qu'un "-" se trouvait en position 12 de
la chaîne "PMNEISOSNAA-U9E" (A8) et de la chaîne "OMNEIUCENSU-NXP" (A3).

Donc, pour résumer, si un caractère autre qu'un CHIFFRE ou UNE LETTRE
se trouve en position 1 de la chaine A OU en position 1 de la chaine
B, on ne compare pas la position 1. On passe à la position 2...


Le second "mais" est le suivant : ta formule s'écrit sous la forme
CARACTERESCOMMUNS( celluleoùsetrouvelachaineàcomparerauxautres ; plage
de cellules ). J'ai essayé avec plage de cellules=A:A . Ca a
"planté" excel... enfin... non... mais le traitement semblait très
interminable. J'ai dû tuer le processus.

Aussi, j'aurais plutôt aimé que la formule réagisse de façon plus
dynamique : quand on lui indique A:A en plage de celulles, elle
s'arrête de chercher des chaines à comparer si elle trouve une cellule
vide dans la colonne A.


Quoi qu'il en soit, merci infiniment pour ta /votre (coucou Isabelle
;-) ) patience....



-----------------------------








Corto a écrit :
Bonjour Grandola,
Quand on m'explique longtemps, je comprends vite. Vas voir sur
http://cjoint.com/?ereYwoEFB3.
Enfin.... je pense avoir compris.

Corto

Grandola a écrit :
Euuuuh, oui... la méthode de comparaison est bonne... sauf que tu
rajoutes des colonnes (pas très cool si on a un grand nombre de
chaines à comparer en colonne A...) et que tu compares une chaine de
caractères à elle même.

En fait, au final ce que je souhaiterais en cellule B2 c'est le
nombre maximum trouvé dans la plage B2:H2. Dans ton exemple, ce
serait "1". En B3, le nombre maximum trouvé dans la plage B3:H3,
soit "5"... étant entendu qu'on exclut la comparaison d'une chaîne à
elle-même sinon B2, B3, B4, B5, etc... contiendraient toutes "15". ;-)


--------------------------------------------------



Corto a écrit :
Bonjour Grandola,
Comme ca : http://cjoint.com/?erbCcqvwER ?

Corto

Grandola a écrit :
Merci Corto,

Je viens de regarder ta fonction mais en fait tu compares
"seulement" A2 à A3, puis A2 à A4, puis A2 à A5...

Le truc c'est que j'aimerais comparer :
A2 à A3, puis A2 à A4, puis, A2 à A5...
PUIS... A3 à A2, puis A3 à A5, puis A3 à A6....
PUIS A4 à A2, puis A4 à A3, puis A4 à A5.

En gros on dois comparer TOUTES les cellules de la colonne A à
toutes les autres cellules - toujours de la colonne A - et écrire
en colonne B le nombre maximum d'occurrences communes trouvées.

Exemples :

....
A2 a 12 occurences communes avec A16
....
A2 a 3 occurrences communes avec A54
....
A2 a 14 occurrences communes avec A68
....
A2 a 0 occurrences communes avec A121

---> En B2, on aura la fonction COMPARAISONCHAINE(A2) qui renverra
"14"


....
A33 a 7 occurences communes avec A4
....
A33 a 1 occurrence commune avec A10
....
A33 a 2 occurrences communes avec A162
....
A33 a 9 occurrences communes avec A540

---> En B33, on aura la fonction COMPARAISONCHAINE(A33) qui
renverra "9"



En espérant mettre mieux expliquer cette fois-ci. ;-)



----------------------------------------------------------------------------------------------------------



Corto a écrit :
Bonjour Grandola,
Jettes un coup d'oeil à l'adresse : http://cjoint.com/?eqgQXSu6F4

Corto

Grandola a écrit :
Bonjour à tous,

Avant de me pendre je vous soumets un casse-tete que je n'arrive
pas à résoudre.

Plutôt que d'exposer le schmilblik ici, j'ai tout expliquer en
commentaire de la cellule B2 du fichier suivant :
http://www.cijoint.fr/cjlink.php?file=cj200904/cijDWAUy6O.zip

Si un super champion d'Excel/VBA pouvait y jeter un oeil ce
serait sympa à lui.

Euuuuh... pour les curieux... il s'agit de comparaison de
chaînes de caractères...

Merci à tous.
















Avatar
Grandola
Oupssss. Pardon, Corto. Finalement, j'me suis un peu avancé...

En fait, je viens de tester ta fonction et il y a des trucs bizarres....
cf. : http://cjoint.com/?esdGju3r8O

Pourquoi la fonction renvoie respectivement 0,0,0 en F5, F6, F7 alors
qu'elle devrait renvoyer respectivement 15,14,15 ?

En effet :

E5 a 14 caractères en commun avec E6 et 15 caractères en commun avec E7.
Donc, elle devrait renvoyer "15" en F5.

E6 a 14 caractères en commun avec E5 et 14 caractères en commun avec E7
Donc, elle devrait renvoyer "14" en F6.

E7 a 15 caractères en commun avec E5 et 14 caractères en commun avec E6.
Donc, elle devrait renvoyer "15" en F7.


Autre bizarrerie : pourquoi si j'écris "10" ou encore "J111111111111111"
en cellule A1, la cellule B3 passe de "2" à "4" ????



--------------------------------------------------------------------




Grandola a écrit :
C'est tout simplement PARFAIT. Un grand merci à toi !

Un grand merci également à Isabelle qui elle aussi à plancher et réussi
à résoudre le smilblick.

Encore merci à vous deux. C'est génial !!!! :-))))))


----------------------------


Corto a écrit :
Bonjour Grandola,
Moi qui croyais avoir fini par comprendre :-!
Cela correspond il enfin au cahier des charges :
http://cjoint.com/?erxp3YWJWu

Corto

Grandola a écrit :
Hmmm... effectivement le principe est assimilé lol... mais y'a un
mais... enfin... deux, plus exactement.

En premier lieu, tu m'exclus pas de ton champ de comparaison les
caractères qui ne sont ni des LETTRES, ni des CHIFFRES. J'ai fait le
test en remplaçant par un "-" le 2ème "i" de la chaîne
PMNEISOSNAAIU9E (autrement dit, la chaine est devenue
"PMNEISOSNAA-U9E")... et là... la fonction a renvoyé "6" au lieu de
"5" auparavant. Ce qui veut dire qu'elle a comptabilisé le fait qu'un
"-" se trouvait en position 12 de la chaîne "PMNEISOSNAA-U9E" (A8) et
de la chaîne "OMNEIUCENSU-NXP" (A3).

Donc, pour résumer, si un caractère autre qu'un CHIFFRE ou UNE LETTRE
se trouve en position 1 de la chaine A OU en position 1 de la chaine
B, on ne compare pas la position 1. On passe à la position 2...


Le second "mais" est le suivant : ta formule s'écrit sous la forme
CARACTERESCOMMUNS( celluleoùsetrouvelachaineàcomparerauxautres ;
plage de cellules ). J'ai essayé avec plage de cellules=A:A . Ca a
"planté" excel... enfin... non... mais le traitement semblait très
interminable. J'ai dû tuer le processus.

Aussi, j'aurais plutôt aimé que la formule réagisse de façon plus
dynamique : quand on lui indique A:A en plage de celulles, elle
s'arrête de chercher des chaines à comparer si elle trouve une
cellule vide dans la colonne A.


Quoi qu'il en soit, merci infiniment pour ta /votre (coucou Isabelle
;-) ) patience....



-----------------------------








Corto a écrit :
Bonjour Grandola,
Quand on m'explique longtemps, je comprends vite. Vas voir sur
http://cjoint.com/?ereYwoEFB3.
Enfin.... je pense avoir compris.

Corto

Grandola a écrit :
Euuuuh, oui... la méthode de comparaison est bonne... sauf que tu
rajoutes des colonnes (pas très cool si on a un grand nombre de
chaines à comparer en colonne A...) et que tu compares une chaine
de caractères à elle même.

En fait, au final ce que je souhaiterais en cellule B2 c'est le
nombre maximum trouvé dans la plage B2:H2. Dans ton exemple, ce
serait "1". En B3, le nombre maximum trouvé dans la plage B3:H3,
soit "5"... étant entendu qu'on exclut la comparaison d'une chaîne
à elle-même sinon B2, B3, B4, B5, etc... contiendraient toutes
"15". ;-)


--------------------------------------------------



Corto a écrit :
Bonjour Grandola,
Comme ca : http://cjoint.com/?erbCcqvwER ?

Corto

Grandola a écrit :
Merci Corto,

Je viens de regarder ta fonction mais en fait tu compares
"seulement" A2 à A3, puis A2 à A4, puis A2 à A5...

Le truc c'est que j'aimerais comparer :
A2 à A3, puis A2 à A4, puis, A2 à A5...
PUIS... A3 à A2, puis A3 à A5, puis A3 à A6....
PUIS A4 à A2, puis A4 à A3, puis A4 à A5.

En gros on dois comparer TOUTES les cellules de la colonne A à
toutes les autres cellules - toujours de la colonne A - et écrire
en colonne B le nombre maximum d'occurrences communes trouvées.

Exemples :

....
A2 a 12 occurences communes avec A16
....
A2 a 3 occurrences communes avec A54
....
A2 a 14 occurrences communes avec A68
....
A2 a 0 occurrences communes avec A121

---> En B2, on aura la fonction COMPARAISONCHAINE(A2) qui
renverra "14"


....
A33 a 7 occurences communes avec A4
....
A33 a 1 occurrence commune avec A10
....
A33 a 2 occurrences communes avec A162
....
A33 a 9 occurrences communes avec A540

---> En B33, on aura la fonction COMPARAISONCHAINE(A33) qui
renverra "9"



En espérant mettre mieux expliquer cette fois-ci. ;-)



----------------------------------------------------------------------------------------------------------



Corto a écrit :
Bonjour Grandola,
Jettes un coup d'oeil à l'adresse : http://cjoint.com/?eqgQXSu6F4

Corto

Grandola a écrit :
Bonjour à tous,

Avant de me pendre je vous soumets un casse-tete que je
n'arrive pas à résoudre.

Plutôt que d'exposer le schmilblik ici, j'ai tout expliquer en
commentaire de la cellule B2 du fichier suivant :
http://www.cijoint.fr/cjlink.php?file=cj200904/cijDWAUy6O.zip

Si un super champion d'Excel/VBA pouvait y jeter un oeil ce
serait sympa à lui.

Euuuuh... pour les curieux... il s'agit de comparaison de
chaînes de caractères...

Merci à tous.


















Avatar
Grandola
Snifff. Non ca ne fonctionne toujours pas. D'abord, le traitement est
devenu extrêmement long et les valeurs retournées sont parfois fausses.

Par exemple, avant j'avais :
F5=0 --> NOK
F6=0 --> NOK
F7=0 --> NOK

Désormais j'ai :
F5=0 --> NOK
F6 --> OK
F7 --> OK

Je pense que le traitement long vient du fait que l'on indique une
colonne entière en plage de traitement. Cependant on ne peut pas faire
autrement vu que par la suite j'ajouterais des chaines de caractères à
la suite des chaines existantes. Dans notre exemple, les chaines sont
dans la plage A2:A8 mais il est fort probable que par la suite j'en
rajoute en A9, A10, A11, etc, etc...






Corto a écrit :
Bonjour Grandola,
:-[ Effectivement, je considérait les cellules comme traitées un peu
trop tot.
il faut déplacer *XTRAITE = XTRAITE + 1* dans le If et ça remarche 8-)

For Each XXX In CHAINE2.Cells
XRESULT = 0: *XTRAITE = XTRAITE + 1*
If CHAINE1.Address <> XXX.Address And XXX <> Empty Then
XTAILLE = Application.Min(Len(CHAINE1), Len(XXX))
..........

Devient :
For Each XXX In CHAINE2.Cells
XRESULT = 0
If CHAINE1.Address <> XXX.Address And XXX <> Empty Then
*XTRAITE = XTRAITE + 1*
XTAILLE = Application.Min(Len(CHAINE1), Len(XXX))
..........

Corto

Grandola a écrit :
Oupssss. Pardon, Corto. Finalement, j'me suis un peu avancé...

En fait, je viens de tester ta fonction et il y a des trucs bizarres....
cf. : http://cjoint.com/?esdGju3r8O

Pourquoi la fonction renvoie respectivement 0,0,0 en F5, F6, F7 alors
qu'elle devrait renvoyer respectivement 15,14,15 ?

En effet :

E5 a 14 caractères en commun avec E6 et 15 caractères en commun avec
E7. Donc, elle devrait renvoyer "15" en F5.

E6 a 14 caractères en commun avec E5 et 14 caractères en commun avec E7
Donc, elle devrait renvoyer "14" en F6.

E7 a 15 caractères en commun avec E5 et 14 caractères en commun avec E6.
Donc, elle devrait renvoyer "15" en F7.


Autre bizarrerie : pourquoi si j'écris "10" ou encore
"J111111111111111" en cellule A1, la cellule B3 passe de "2" à "4" ????



--------------------------------------------------------------------




Grandola a écrit :
C'est tout simplement PARFAIT. Un grand merci à toi !

Un grand merci également à Isabelle qui elle aussi à plancher et
réussi à résoudre le smilblick.

Encore merci à vous deux. C'est génial !!!! :-))))))


----------------------------


Corto a écrit :
Bonjour Grandola,
Moi qui croyais avoir fini par comprendre :-!
Cela correspond il enfin au cahier des charges :
http://cjoint.com/?erxp3YWJWu

Corto

Grandola a écrit :
Hmmm... effectivement le principe est assimilé lol... mais y'a un
mais... enfin... deux, plus exactement.

En premier lieu, tu m'exclus pas de ton champ de comparaison les
caractères qui ne sont ni des LETTRES, ni des CHIFFRES. J'ai fait
le test en remplaçant par un "-" le 2ème "i" de la chaîne
PMNEISOSNAAIU9E (autrement dit, la chaine est devenue
"PMNEISOSNAA-U9E")... et là... la fonction a renvoyé "6" au lieu de
"5" auparavant. Ce qui veut dire qu'elle a comptabilisé le fait
qu'un "-" se trouvait en position 12 de la chaîne "PMNEISOSNAA-U9E"
(A8) et de la chaîne "OMNEIUCENSU-NXP" (A3).

Donc, pour résumer, si un caractère autre qu'un CHIFFRE ou UNE
LETTRE se trouve en position 1 de la chaine A OU en position 1 de
la chaine B, on ne compare pas la position 1. On passe à la
position 2...


Le second "mais" est le suivant : ta formule s'écrit sous la forme
CARACTERESCOMMUNS( celluleoùsetrouvelachaineàcomparerauxautres ;
plage de cellules ). J'ai essayé avec plage de cellules=A:A . Ca
a "planté" excel... enfin... non... mais le traitement semblait
très interminable. J'ai dû tuer le processus.

Aussi, j'aurais plutôt aimé que la formule réagisse de façon plus
dynamique : quand on lui indique A:A en plage de celulles, elle
s'arrête de chercher des chaines à comparer si elle trouve une
cellule vide dans la colonne A.


Quoi qu'il en soit, merci infiniment pour ta /votre (coucou
Isabelle ;-) ) patience....



-----------------------------








Corto a écrit :
Bonjour Grandola,
Quand on m'explique longtemps, je comprends vite. Vas voir sur
http://cjoint.com/?ereYwoEFB3.
Enfin.... je pense avoir compris.

Corto

Grandola a écrit :
Euuuuh, oui... la méthode de comparaison est bonne... sauf que tu
rajoutes des colonnes (pas très cool si on a un grand nombre de
chaines à comparer en colonne A...) et que tu compares une chaine
de caractères à elle même.

En fait, au final ce que je souhaiterais en cellule B2 c'est le
nombre maximum trouvé dans la plage B2:H2. Dans ton exemple, ce
serait "1". En B3, le nombre maximum trouvé dans la plage B3:H3,
soit "5"... étant entendu qu'on exclut la comparaison d'une
chaîne à elle-même sinon B2, B3, B4, B5, etc... contiendraient
toutes "15". ;-)


--------------------------------------------------



Corto a écrit :
Bonjour Grandola,
Comme ca : http://cjoint.com/?erbCcqvwER ?

Corto

Grandola a écrit :
Merci Corto,

Je viens de regarder ta fonction mais en fait tu compares
"seulement" A2 à A3, puis A2 à A4, puis A2 à A5...

Le truc c'est que j'aimerais comparer :
A2 à A3, puis A2 à A4, puis, A2 à A5...
PUIS... A3 à A2, puis A3 à A5, puis A3 à A6....
PUIS A4 à A2, puis A4 à A3, puis A4 à A5.

En gros on dois comparer TOUTES les cellules de la colonne A à
toutes les autres cellules - toujours de la colonne A - et
écrire en colonne B le nombre maximum d'occurrences communes
trouvées.

Exemples :

....
A2 a 12 occurences communes avec A16
....
A2 a 3 occurrences communes avec A54
....
A2 a 14 occurrences communes avec A68
....
A2 a 0 occurrences communes avec A121

---> En B2, on aura la fonction COMPARAISONCHAINE(A2) qui
renverra "14"


....
A33 a 7 occurences communes avec A4
....
A33 a 1 occurrence commune avec A10
....
A33 a 2 occurrences communes avec A162
....
A33 a 9 occurrences communes avec A540

---> En B33, on aura la fonction COMPARAISONCHAINE(A33) qui
renverra "9"



En espérant mettre mieux expliquer cette fois-ci. ;-)



----------------------------------------------------------------------------------------------------------



Corto a écrit :
Bonjour Grandola,
Jettes un coup d'oeil à l'adresse : http://cjoint.com/?eqgQXSu6F4

Corto

Grandola a écrit :
Bonjour à tous,

Avant de me pendre je vous soumets un casse-tete que je
n'arrive pas à résoudre.

Plutôt que d'exposer le schmilblik ici, j'ai tout expliquer
en commentaire de la cellule B2 du fichier suivant :
http://www.cijoint.fr/cjlink.php?file=cj200904/cijDWAUy6O.zip

Si un super champion d'Excel/VBA pouvait y jeter un oeil ce
serait sympa à lui.

Euuuuh... pour les curieux... il s'agit de comparaison de
chaînes de caractères...

Merci à tous.






















Avatar
Grandola
Oupsss. Effectivement. Moi aussi j'ai les bons résultats. Pardon.
Concernant la plage à traiter bah je l'inscrirais "en dur" c'est pas
grave. C'est déjà excellent d'avoir le bel outil que tu m'as forgé ;-)

Merci encore.

-------------------------------------------------------------

Corto a écrit :
Bonjour Grandola,
Moi j'ai bien les bons résultats mais il faut aller faire entrée dans
toutes les cellulles une à une après avoir modifié la fonction.
HBRT-ONPE1PNKUB 1



OMNE-UCENSU-NXP 4



NDIZEKOCEENOXPM 1



ONCMASNE2JJICNE 4

H11111111111111 15
C5ENQMEOCKEPN-A 2

H11111111111112 14
ONSI*NNOD8MPAXE 4

H11111111111111 15
PMNEISOSNAAIU9E 4




Le temps d'exécution sera toujours lié au nombre de cellules dans la
plage de manière exponentielle, La solution pour éviter de mettre les
colonnes entières dans la formule serait de nommer ta plage. Par exemple
en B2 Êracterescommuns(A2;MaPlage). mais si la plage devient
importante tu auras toujours des temps d'exécution élevés.
Peut-être faudrait il que tu revoies ce que tu cherches à faire
exactement. Est il vraiment nécessaire de comparer chaque cellule à
toutes les autres cellules de la plage.

Corto

Grandola a écrit :
Snifff. Non ca ne fonctionne toujours pas. D'abord, le traitement est
devenu extrêmement long et les valeurs retournées sont parfois fausses.

Par exemple, avant j'avais :
F5=0 --> NOK
F6=0 --> NOK
F7=0 --> NOK

Désormais j'ai :
F5=0 --> NOK
F6 --> OK
F7 --> OK

Je pense que le traitement long vient du fait que l'on indique une
colonne entière en plage de traitement. Cependant on ne peut pas faire
autrement vu que par la suite j'ajouterais des chaines de caractères à
la suite des chaines existantes. Dans notre exemple, les chaines sont
dans la plage A2:A8 mais il est fort probable que par la suite j'en
rajoute en A9, A10, A11, etc, etc...






Corto a écrit :
Bonjour Grandola,
:-[ Effectivement, je considérait les cellules comme traitées un peu
trop tot.
il faut déplacer *XTRAITE = XTRAITE + 1* dans le If et ça remarche 8-)

For Each XXX In CHAINE2.Cells
XRESULT = 0: *XTRAITE = XTRAITE + 1*
If CHAINE1.Address <> XXX.Address And XXX <> Empty Then
XTAILLE = Application.Min(Len(CHAINE1), Len(XXX))
..........

Devient :
For Each XXX In CHAINE2.Cells
XRESULT = 0
If CHAINE1.Address <> XXX.Address And XXX <> Empty Then
*XTRAITE = XTRAITE + 1*
XTAILLE = Application.Min(Len(CHAINE1), Len(XXX))
..........

Corto

Grandola a écrit :
Oupssss. Pardon, Corto. Finalement, j'me suis un peu avancé...

En fait, je viens de tester ta fonction et il y a des trucs
bizarres....
cf. : http://cjoint.com/?esdGju3r8O

Pourquoi la fonction renvoie respectivement 0,0,0 en F5, F6, F7
alors qu'elle devrait renvoyer respectivement 15,14,15 ?

En effet :

E5 a 14 caractères en commun avec E6 et 15 caractères en commun avec
E7. Donc, elle devrait renvoyer "15" en F5.

E6 a 14 caractères en commun avec E5 et 14 caractères en commun avec E7
Donc, elle devrait renvoyer "14" en F6.

E7 a 15 caractères en commun avec E5 et 14 caractères en commun avec
E6.
Donc, elle devrait renvoyer "15" en F7.


Autre bizarrerie : pourquoi si j'écris "10" ou encore
"J111111111111111" en cellule A1, la cellule B3 passe de "2" à "4" ????



--------------------------------------------------------------------




Grandola a écrit :
C'est tout simplement PARFAIT. Un grand merci à toi !

Un grand merci également à Isabelle qui elle aussi à plancher et
réussi à résoudre le smilblick.

Encore merci à vous deux. C'est génial !!!! :-))))))


----------------------------


Corto a écrit :
Bonjour Grandola,
Moi qui croyais avoir fini par comprendre :-!
Cela correspond il enfin au cahier des charges :
http://cjoint.com/?erxp3YWJWu

Corto

Grandola a écrit :
Hmmm... effectivement le principe est assimilé lol... mais y'a un
mais... enfin... deux, plus exactement.

En premier lieu, tu m'exclus pas de ton champ de comparaison les
caractères qui ne sont ni des LETTRES, ni des CHIFFRES. J'ai fait
le test en remplaçant par un "-" le 2ème "i" de la chaîne
PMNEISOSNAAIU9E (autrement dit, la chaine est devenue
"PMNEISOSNAA-U9E")... et là... la fonction a renvoyé "6" au lieu
de "5" auparavant. Ce qui veut dire qu'elle a comptabilisé le
fait qu'un "-" se trouvait en position 12 de la chaîne
"PMNEISOSNAA-U9E" (A8) et de la chaîne "OMNEIUCENSU-NXP" (A3).

Donc, pour résumer, si un caractère autre qu'un CHIFFRE ou UNE
LETTRE se trouve en position 1 de la chaine A OU en position 1 de
la chaine B, on ne compare pas la position 1. On passe à la
position 2...


Le second "mais" est le suivant : ta formule s'écrit sous la
forme CARACTERESCOMMUNS(
celluleoùsetrouvelachaineàcomparerauxautres ; plage de cellules
). J'ai essayé avec plage de cellules=A:A . Ca a "planté"
excel... enfin... non... mais le traitement semblait très
interminable. J'ai dû tuer le processus.

Aussi, j'aurais plutôt aimé que la formule réagisse de façon plus
dynamique : quand on lui indique A:A en plage de celulles, elle
s'arrête de chercher des chaines à comparer si elle trouve une
cellule vide dans la colonne A.


Quoi qu'il en soit, merci infiniment pour ta /votre (coucou
Isabelle ;-) ) patience....



-----------------------------








Corto a écrit :
Bonjour Grandola,
Quand on m'explique longtemps, je comprends vite. Vas voir sur
http://cjoint.com/?ereYwoEFB3.
Enfin.... je pense avoir compris.

Corto

Grandola a écrit :
Euuuuh, oui... la méthode de comparaison est bonne... sauf que
tu rajoutes des colonnes (pas très cool si on a un grand nombre
de chaines à comparer en colonne A...) et que tu compares une
chaine de caractères à elle même.

En fait, au final ce que je souhaiterais en cellule B2 c'est le
nombre maximum trouvé dans la plage B2:H2. Dans ton exemple, ce
serait "1". En B3, le nombre maximum trouvé dans la plage
B3:H3, soit "5"... étant entendu qu'on exclut la comparaison
d'une chaîne à elle-même sinon B2, B3, B4, B5, etc...
contiendraient toutes "15". ;-)


--------------------------------------------------



Corto a écrit :
Bonjour Grandola,
Comme ca : http://cjoint..com/?erbCcqvwER ?

Corto

Grandola a écrit :
Merci Corto,

Je viens de regarder ta fonction mais en fait tu compares
"seulement" A2 à A3, puis A2 à A4, puis A2 à A5...

Le truc c'est que j'aimerais comparer :
A2 à A3, puis A2 à A4, puis, A2 à A5...
PUIS... A3 à A2, puis A3 à A5, puis A3 à A6....
PUIS A4 à A2, puis A4 à A3, puis A4 à A5.

En gros on dois comparer TOUTES les cellules de la colonne A
à toutes les autres cellules - toujours de la colonne A - et
écrire en colonne B le nombre maximum d'occurrences communes
trouvées.

Exemples :

....
A2 a 12 occurences communes avec A16
....
A2 a 3 occurrences communes avec A54
....
A2 a 14 occurrences communes avec A68
....
A2 a 0 occurrences communes avec A121

---> En B2, on aura la fonction COMPARAISONCHAINE(A2) qui
renverra "14"


....
A33 a 7 occurences communes avec A4
....
A33 a 1 occurrence commune avec A10
....
A33 a 2 occurrences communes avec A162
....
A33 a 9 occurrences communes avec A540

---> En B33, on aura la fonction COMPARAISONCHAINE(A33) qui
renverra "9"



En espérant mettre mieux expliquer cette fois-ci. ;-)



----------------------------------------------------------------------------------------------------------



Corto a écrit :
Bonjour Grandola,
Jettes un coup d'oeil à l'adresse :
http://cjoint.com/?eqgQXSu6F4

Corto

Grandola a écrit :
Bonjour à tous,

Avant de me pendre je vous soumets un casse-tete que je
n'arrive pas à résoudre.

Plutôt que d'exposer le schmilblik ici, j'ai tout expliquer
en commentaire de la cellule B2 du fichier suivant :
http://www.cijoint.fr/cjlink.php?file=cj200904/cijDWAUy6O.zip

Si un super champion d'Excel/VBA pouvait y jeter un oeil ce
serait sympa à lui.

Euuuuh... pour les curieux... il s'agit de comparaison de
chaînes de caractères...

Merci à tous.


























1 2