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 Function

Mytå

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 Function

Mytå

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

Rechercher des sujets similaires à "recherche liste mots dico"