Recherche dans une liste de mots (dico)
Bonjour,
Je recherche une formule ou une macro qui me permettrait de rechercher dans une colonne tous les mots d'un dico formables en y ajoutant une autre lettre.
Exemples :
Niche+a donne comme résultat chaine, echina
Miner+u donne comme résultat mineur ou rumine et murine
chanter+e donnerait comme résultat : étancher, rechante, entacher et trachéen.
etc....
Merci pour votre aide
Bernard
Salut le forum
Bienvenue comme nouveau membre Bernard,
Pour commencer, il faudrait savoir ou est la base de données du dictionnaire.
Le plus simple une base classée par ordre alphabétique (Niche+a)
acehin ensuite les mots dans les autres colonnes Chaine, Echina ...
Sinon pour des mots de six lettres (720 possibilités) à rechercher.
A te relire
Mytå
Salut le forum
Une macro à installer dans un module standard. (Auteur MichelXLD, je crois..)
Sub Anagramme()
Dim s As String
s = InputBox("Mot de base ?" & vbCrLf & "(Maximum 8 caractères.)", "Anagramme", "EXCEL")
Cells.Clear
Permutation s, 0, 0
End Sub
Sub Permutation(s As String, c As Integer, ByRef l As Integer)
Dim i As Integer
For i = 1 To Len(s) - c
s = Left(s, c) & PermutCirc(Right(s, Len(s) - c))
If c = Len(s) - 1 Then
l = l + 1
Cells(l, 1).Value = s
Else
Permutation s, c + 1, l
End If
Next
End Sub
Function PermutCirc(s)
PermutCirc = Right(s, Len(s) - 1) & Left(s, 1)
End FunctionMytå
Bonjour,
Super !!
Un tout grand merci pour votre réponse très rapide.
En effet, je peux reproduire une liste de tous les tirages possible par ordre alphabétique.
Je vais essayer votre cod'e et je vous tiendrai au courant.
Bien à vous,
Bernard
Rebonjour,
J'ai testé la macro mais ce n'est pas le résultat que j'escomptais.
Je me suis certainement mal exprimé.
Je reprends le problème :
La collone A1 comprend l'ensemble des mots du dictionnaire soit environ +/- 60000 mots
aa, abacost, abacule.... dans l'ordre alphabétique.
Je souhaiterai que dans les colonnes A2 et suivantes qu'une macro donne
comme résultat tous les mots que l'on peut former (uniquement les mots valables du dictionnaire) + une lettre supplémenaire.
Exemple : dans la case A1 se trouve le mot AA, dans la case A2 la macro devrait donner comme résultat "ADA", dans la case A3 "AGA", dans la case A4 "ANA", dans la case A5 "ARA", dans la case A6 les mots "AAS ET ASA" et dans la case A7 "AXA".
Dans la case B1, le deuxième du dictionnaire est "ABACA" la macro devrait donner comme résultat dans la case B2 "CACABA" soit ABACA+C, dans la case B3 le résultat sera "CABALA" .... etc
J'espère avoir été assez précis dans mes explications. Je suppose que c'est difficilement réalisable ?
BIen à vous et encore merci
Bernard
Bonjour,
Le problème est peut-être pas si difficile que ça :
Il "suffit" pour chaque mot du dictionnaire d'avoir son équivalent avec les lettres classées dans l'ordre alphabétique.
En colonne A, on aurait ABACULE, en colonne B, on aurait AABCELU et ainsi de suite pour chacun des 60.000 mots de ton dictionnaire.
Ce faisant, ça double la taille du fichier
Et enfin, en VBA, je ne sais pas faire.
@+
Merci à tous pour vos réponses.
Malheureusement, je n'y connaît pas grand chose dans la programmation VBA.
C'est pour cette raison que je m'adresse à des spécialistes comme vous sur ce forum
dans l'espoir de résoudre mon problème.
C'est super sympa !!
Cordialement
Bernard
Salut le forum
Bernard, Excel peut tout faire mais faut nous aider un peu.
Deux fonctions pour éliminer caractères indésirables et classer alphabétiquement les lettres.
Option Explicit
Option Compare Text
Function TriCroissant(ByVal irange)
Dim i%, j%, sTemp$
irange = LCase(irange)
For j = 1 To Len(irange) - 1
For i = 1 To Len(irange) - 1
If Mid(irange, i, 1) > Mid(irange, i + 1, 1) Then
sTemp = Mid(irange, i, 1)
Mid(irange, i, 1) = Mid(irange, i + 1, 1)
Mid(irange, i + 1, 1) = sTemp
End If
Next i
Next j
TriCroissant = irange
End Function
Function EspaceAccent(ByVal irange)
Dim Longueur%, Cmpt%, Caractere$, Sortie$
irange = LCase(irange)
If irange = "" Then Exit Function
Longueur = Len(irange)
For Cmpt = 1 To Longueur
Caractere = Mid(irange, Cmpt, 1)
Select Case Caractere
Case "à", "â", "ä": Sortie = Sortie & "a"
Case "é", "è", "ê", "ë": Sortie = Sortie & "e"
Case "î", "ï": Sortie = Sortie & "i"
Case "ô": Sortie = Sortie & "o"
Case "û": Sortie = Sortie & "u"
Case " ": Sortie = Sortie & ""
Case "-": Sortie = Sortie & ""
Case "a" To "z": Sortie = Sortie & Caractere
End Select
Next Cmpt
EspaceAccent = Sortie
End FunctionMytå
Re-bonjour,
D'abord, merci à tous pour votre participation à ce sujet.
Un aimable "excelliste" s'est penché sur mon problème et à pu trouver la solution à celui-ci. Vous trouverez le fichier contenant les macros à l'adresse suivante :
https://www.excel-pratique.com/~files/doc/KXjN5Test_Anagramme.zip
N'utilisez que la feuille "test" car le traitement de la macro est assez long.
Je souhaiterais à présent (si je n'abuse pas trop de votre temps et de vos talents), obtenir avec une macro complémentaire, la liste des mots qui peuvent être rallongés par l'avant (UNIQUEMENT) par une, deux ou trois lettres.
Exemple : le mot "CE" aura comme résultat en 3 lettres le mot "ACE" et en 4 lettres les mots "DACE,DUCE,FACE,LACE,LICE,NOCE,ONCE,PUCE,RACE, SUCE et VICE".
D'avance, je vous remercie pour votre aide précieuse.
Bernard
Salut le forum
Bernard regarde la pièce jointe pour les anagrammes, la vitesse est
grandement améliorée. Je regarde pour ta deuxième question.
https://www.excel-pratique.com/~files/doc/AnagrammeBernard.zip
Mytå
Bonsoir Mita,
D'abord, mille merci pour votre aide.
En effet, je viens de tester votre code, c'est impressionnant.
La vitesse est grandement améliorée. C'est super !!
Au plaisir de vous re(lire),
Bernard
Bonsoir ou bonjour le forum,
Cher Mytå, je viens de m'apercevoir que j'ai écorché votre prénom dans mon message précédent, j'en suis désolé.
Je vous propose ci-après le dernier fichier qui m'a été aimablement transmis par un programmateur sur un autre forum.
Voulez-vous bien l'examiner et éventuellement améliorer la vitesse d'éxécution des macros (si cela est possible) comme vous l'avez fait pour le fichier "test anagrammes" ?
https://www.excel-pratique.com/~files/doc/Test_Anagramme3.zip
D'avance, je vous remercie,
Cordialement,
Bernard
Salut le forum
Bernard, je suis déjà à faire mon propre algorithme.
Je n'avais pas besoin du code de Sergio. (Oups tu voulais pas le nommer)
Voulais-tu garder la lettre, peu importe la position au-travers d'un mot ?
Et si tes mots ne contiennet pas de caractères accentués, ni d'espaces les
fonctions peuvent être modifiées.
Mytå
Re-salut Mytå,
Je suis scrabbleur et à partir de 2008, je vais devoir intégrer +/- 2500 nouveaux mots dans mon dictionnaire.
Je ne possède pas encore cette liste de mots. Normalement, elle ne comporte pas les accents mais il vaut mieux prévoir. C'est préférable de garder l'option de suppression des accents dans la macro. Je n'avais pas pensé à cette éventualité.
Concernant la lettre supplémentaire, je souhaite la maintenir car cela me permet d'établir des listes de mots personnalisables.
La macro de Sergio fonctionne bien pour la recherche d'un mot + une lettre supplémentaire mais son exécution est très lente. Je l'ai testée au bureau et il m'a fallu pratiquement une heure pour obtenir le résultat.
Voilà, j'espère avoir répondu précisément aux questions que vous vous posez.
Cordialement, Bernard
Salut le forum
Bernard a écrit :La macro de Sergio fonctionne bien pour la recherche d'un mot + une lettre supplémentaire mais son exécution est très lente. Je l'ai testée au bureau et il m'a fallu pratiquement une heure pour obtenir le résultat.
Normal, boucle dans boucle et aucune déclaration de variable, imagine sur une feuiile
de 60 000 lignes, Bonne nuit et revenez demain
Ancien utilisateur de l'autre forum (Autres temps, Autres moeurs)
Ta liste risque de dépasser les 65535 lignes d'excel un jour, alors la tu risques d'avoir
des problèmes avec les macros (Sinon faut passer en EXCEL 2007)
Mytå
EDITION : P.S. Je vais avoir le temps de finaliser tes macros (Voyage annulé)
Bonjour le forum,
Bonjour Mytå,
Vous avez parfaitement cerné le problème. Le dictionnaire complet (avec conjugaisons et pluriels...) comporte approximativement 370000 mots. Si je veux faire des recherches sur des listes plus longues, je vais devoir passer à Excel 2007.
En attendant de vous lire, je vous remercie infiniment pour votre aide car vous m'ôtez une fameuse épine du pied.
A bientôt
Bernard
Bonjour le forum
Bernard, regarde si la version Lettres + Mots + Lettres
(Environ 15 sec de traitement pour 3000 mots) pourrait convenir.
https://www.excel-pratique.com/~files/doc/AnagrammeBernardv2.zip
A te relire
Mytå
P.S. Ta base de mots, tu la reçois dans quel format ?
Bonsoir Myta,
C'est une base de données que j'ai trouvée sur Internet au format TXT.
Un niveau du temps du traitement de la macro, c'est parfait.
Par contre, il y a un petit bug avec le résultat de la macro.
Normale pour le mot "THE" , le résultat doit être "HATE" et "HOTE"
Bien à toi,
Bernard
Re Bernard
Je n'ai pas traiter les mots avec les lettres mélangées.
J'ai traiter Lettres + Mots + Lettres dans le dernier fichier
Il va rester, celui-la à faire.
Si tu peux envois moi ta base texte de ton dictionnaire complete.
Je travaillerais directement avec la base pour que tu n'ai pas à modifier
les macros si plus de 65000 mots.
Mytå
Bonjour,
Transmets-moi ton adresse e-mail dans un message privé pour que je puisse t'envoyer le fichier complet car celui-ci est assez lourd en taille.
Bien à toi,
Bernard