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
Pierre Fauconnier
Bonjour
Je propose la démarche suivante, qui utilise un peu de VBA. Le principe est de donner un poids à chaque lettre, en utilisant les puissances de 2.
Ainsi, A vaut 2^1 ( soit le code Ascii de A - 64) B vaut 2^2 ( soit le code Ascci de B - 64) C vaut 2^3 ... Z vaut 2^26
pour cela, je propose la fonction perso suivante
Function Poids_Mot(Mot As String) As Long Dim Compteur As Integer
Mot = UCase(Mot) For Compteur = 1 To Len(Mot) Poids_Mot = Poids_Mot + (2 ^ (Asc(Mid(Mot, Compteur, 1)) - 64)) Next Compteur End Function
Après, on travaille dans Excel.
Dans la feuille contenant les mots à utiliser, créer la liste en A. En B, attribuer le poids de chaque mot en utilisant la fonction perso.
Pour retrouver les anagrammes d'un mot dans la liste, il suffit de connaître le poids de ce mot et d'utiliser un filtre automatique sur la colonne des poids.
Voir http://cjoint.com/?lvnwRlCxHZ pour un exemple
Cela convient-t'il?
-- Pierre Fauconnier () "Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin ( proverbe zen ) Remplacez nospam.nospam par pfi.be pour répondre. Merci
"Dangaut" a écrit dans le message de news:
Bonjour,
J'ai une série de lettres dans une cellule A1
Comment trouver tous les mots composables à partir de cette série? (en liaison avec le dictionnaire). En bref: comment trouver les anagrammes?
Merci aux experts!
Bonjour
Je propose la démarche suivante, qui utilise un peu de VBA. Le principe est
de donner un poids à chaque lettre, en utilisant les puissances de 2.
Ainsi,
A vaut 2^1 ( soit le code Ascii de A - 64)
B vaut 2^2 ( soit le code Ascci de B - 64)
C vaut 2^3
...
Z vaut 2^26
pour cela, je propose la fonction perso suivante
Function Poids_Mot(Mot As String) As Long
Dim Compteur As Integer
Mot = UCase(Mot)
For Compteur = 1 To Len(Mot)
Poids_Mot = Poids_Mot + (2 ^ (Asc(Mid(Mot, Compteur, 1)) - 64))
Next Compteur
End Function
Après, on travaille dans Excel.
Dans la feuille contenant les mots à utiliser, créer la liste en A. En B,
attribuer le poids de chaque mot en utilisant la fonction perso.
Pour retrouver les anagrammes d'un mot dans la liste, il suffit de connaître
le poids de ce mot et d'utiliser un filtre automatique sur la colonne des
poids.
Voir http://cjoint.com/?lvnwRlCxHZ pour un exemple
Cela convient-t'il?
--
Pierre Fauconnier (pierre.fauconnier@nospam.nospam)
"Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin ( proverbe
zen )
Remplacez nospam.nospam par pfi.be pour répondre. Merci
"Dangaut" <dangaut@supprimertele2.fr> a écrit dans le message de news:
mn.a2987d5b6ee228b4.32457@supprimertele2.fr...
Bonjour,
J'ai une série de lettres dans une cellule A1
Comment trouver tous les mots composables à partir de cette série? (en
liaison avec le dictionnaire).
En bref: comment trouver les anagrammes?
Je propose la démarche suivante, qui utilise un peu de VBA. Le principe est de donner un poids à chaque lettre, en utilisant les puissances de 2.
Ainsi, A vaut 2^1 ( soit le code Ascii de A - 64) B vaut 2^2 ( soit le code Ascci de B - 64) C vaut 2^3 ... Z vaut 2^26
pour cela, je propose la fonction perso suivante
Function Poids_Mot(Mot As String) As Long Dim Compteur As Integer
Mot = UCase(Mot) For Compteur = 1 To Len(Mot) Poids_Mot = Poids_Mot + (2 ^ (Asc(Mid(Mot, Compteur, 1)) - 64)) Next Compteur End Function
Après, on travaille dans Excel.
Dans la feuille contenant les mots à utiliser, créer la liste en A. En B, attribuer le poids de chaque mot en utilisant la fonction perso.
Pour retrouver les anagrammes d'un mot dans la liste, il suffit de connaître le poids de ce mot et d'utiliser un filtre automatique sur la colonne des poids.
Voir http://cjoint.com/?lvnwRlCxHZ pour un exemple
Cela convient-t'il?
-- Pierre Fauconnier () "Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin ( proverbe zen ) Remplacez nospam.nospam par pfi.be pour répondre. Merci
"Dangaut" a écrit dans le message de news:
Bonjour,
J'ai une série de lettres dans une cellule A1
Comment trouver tous les mots composables à partir de cette série? (en liaison avec le dictionnaire). En bref: comment trouver les anagrammes?
Merci aux experts!
Modeste
Bonsour® Dangaut wrote:
J'ai une série de lettres dans une cellule A1 Comment trouver tous les mots composables à partir de cette série? (en liaison avec le dictionnaire). En bref: comment trouver les anagrammes?
DANGAUT ==> 5040 anagrammes par contre je ne sais évoquer le dictionnaire depuis EXCEL une pseudo récursivité en utilisant la notion de pile :
Public pile() As Integer, partiel() As String Sub anagramme() On Error Resume Next mot = [A1] orig = mot debut = "" ligne = 1: colonne = 2 n = Len(mot) ReDim pile(n), partiel(n) etape1: If Len(mot) = 1 Then GoTo etape2 debut = debut + Left(mot, 1) p = p + 1 partiel(p) = mot mot = Right(mot, Len(mot) - 1) GoTo etape1 etape2: ligne = ligne + 1 ecrire = debut & mot If ligne > 30000 Then ligne = 1: colonne = colonne + 1 Cells(ligne + 1, colonne + 1).Value = ecrire Application.StatusBar = colonne - 2 & "x30000 + " & ligne i = 2 etape3: mot = partiel(p) p = p - 1 If Len(debut) = 1 Then GoTo etape4 debut = Left(debut, Len(debut) - 1) GoTo etape5 etape4: debut = "" etape5: pile(i) = pile(i) + 1 If pile(i) < i Then GoTo etape6 pile(i) = 0 i = i + 1 If i > n Then Exit Sub GoTo etape3 etape6: mot = Right(mot, Len(mot) - 1) + Left(mot, 1) GoTo etape1 End Sub
@+
-- les news pas à jour ?? ne passez plus par votre FAI, les news à la source !!! placez ce raccourci dans la ligne de commande news://news.microsoft.com/microsoft.public.fr.excel et répondez OUI
n'oubliez pas les FAQ : http://www.excelabo.net http://dj.joss.free.fr/faq.htm http://www.faqoe.com http://faqword.free.fr
Bonsour®
Dangaut wrote:
J'ai une série de lettres dans une cellule A1
Comment trouver tous les mots composables à partir de cette série? (en
liaison avec le dictionnaire).
En bref: comment trouver les anagrammes?
DANGAUT ==> 5040 anagrammes
par contre je ne sais évoquer le dictionnaire depuis EXCEL
une pseudo récursivité en utilisant la notion de pile :
Public pile() As Integer, partiel() As String
Sub anagramme()
On Error Resume Next
mot = [A1]
orig = mot
debut = ""
ligne = 1: colonne = 2
n = Len(mot)
ReDim pile(n), partiel(n)
etape1:
If Len(mot) = 1 Then GoTo etape2
debut = debut + Left(mot, 1)
p = p + 1
partiel(p) = mot
mot = Right(mot, Len(mot) - 1)
GoTo etape1
etape2:
ligne = ligne + 1
ecrire = debut & mot
If ligne > 30000 Then ligne = 1: colonne = colonne + 1
Cells(ligne + 1, colonne + 1).Value = ecrire
Application.StatusBar = colonne - 2 & "x30000 + " & ligne
i = 2
etape3:
mot = partiel(p)
p = p - 1
If Len(debut) = 1 Then GoTo etape4
debut = Left(debut, Len(debut) - 1)
GoTo etape5
etape4:
debut = ""
etape5:
pile(i) = pile(i) + 1
If pile(i) < i Then GoTo etape6
pile(i) = 0
i = i + 1
If i > n Then Exit Sub
GoTo etape3
etape6:
mot = Right(mot, Len(mot) - 1) + Left(mot, 1)
GoTo etape1
End Sub
@+
--
les news pas à jour ?? ne passez plus par votre FAI, les news à la source
!!!
placez ce raccourci dans la ligne de commande
news://news.microsoft.com/microsoft.public.fr.excel
et répondez OUI
n'oubliez pas les FAQ :
http://www.excelabo.net http://dj.joss.free.fr/faq.htm
http://www.faqoe.com http://faqword.free.fr
J'ai une série de lettres dans une cellule A1 Comment trouver tous les mots composables à partir de cette série? (en liaison avec le dictionnaire). En bref: comment trouver les anagrammes?
DANGAUT ==> 5040 anagrammes par contre je ne sais évoquer le dictionnaire depuis EXCEL une pseudo récursivité en utilisant la notion de pile :
Public pile() As Integer, partiel() As String Sub anagramme() On Error Resume Next mot = [A1] orig = mot debut = "" ligne = 1: colonne = 2 n = Len(mot) ReDim pile(n), partiel(n) etape1: If Len(mot) = 1 Then GoTo etape2 debut = debut + Left(mot, 1) p = p + 1 partiel(p) = mot mot = Right(mot, Len(mot) - 1) GoTo etape1 etape2: ligne = ligne + 1 ecrire = debut & mot If ligne > 30000 Then ligne = 1: colonne = colonne + 1 Cells(ligne + 1, colonne + 1).Value = ecrire Application.StatusBar = colonne - 2 & "x30000 + " & ligne i = 2 etape3: mot = partiel(p) p = p - 1 If Len(debut) = 1 Then GoTo etape4 debut = Left(debut, Len(debut) - 1) GoTo etape5 etape4: debut = "" etape5: pile(i) = pile(i) + 1 If pile(i) < i Then GoTo etape6 pile(i) = 0 i = i + 1 If i > n Then Exit Sub GoTo etape3 etape6: mot = Right(mot, Len(mot) - 1) + Left(mot, 1) GoTo etape1 End Sub
@+
-- les news pas à jour ?? ne passez plus par votre FAI, les news à la source !!! placez ce raccourci dans la ligne de commande news://news.microsoft.com/microsoft.public.fr.excel et répondez OUI
n'oubliez pas les FAQ : http://www.excelabo.net http://dj.joss.free.fr/faq.htm http://www.faqoe.com http://faqword.free.fr