XL 2016 Trouver nombre de combinaisons de lettres

Etoto

XLDnaute Barbatruc
Hello à tous,

Je demande de nouveau de l'aide sur le forum pour une question que je me pose. Est-ce possible de faire qu'Excel renvoie toutes les combinaisons possible d'anagrammes d'un mot ou nom ?

Exemple :

J'ai sur le fichier joint le prénom "Romain" et j'aimerai qu'Excel en colonne B renvoie tous les anagrammes possible de ce nom (sans doublons) comme j'avait déjà commencé en colonne B. J'avait utilisé la fonction Anagramme de @Magic_Doctor mais comme la fonction ALEA, elle renvoie des doublons.


Merci d'avance
 

Pièces jointes

  • Classeur1.xlsx
    8 KB · Affichages: 11

sylvanu

XLDnaute Barbatruc
Supporter XLD
20210826_113139.gif
 

patricktoulon

XLDnaute Barbatruc
ok j'ai testé le post 2 tout les fichiers celui avec la colonne "A" fonctionne
vérifier quand même de 120 à 30 je me demande si il ne manque pas des combi
mais j'avoue elle est pas mal la combi récursive
ça me rappelle un des algo que j'ai cité plus haut , il faudrait que je retrouve ça sur DVP
 

patricktoulon

XLDnaute Barbatruc
ok j'ai pas bien encore pigé comment la boucle s'arréte
mais je sais que ca se joue avec le if else et le la boucle len (chaine)
en debug je n'atteins jamais 0 et 1 je l’atteint plusieurs fois ,par contre 5 je l'atteins 1 fois en dernier 🤔

en attendant je vous l'ai transformé en fonction(toujours récursive)

VB:
Sub AppelCombi2()
    Dim TexteCombi As String, Tablo
    TexteCombi = Application.InputBox(prompt:="Texte combinaison")
    Cells.ClearContents
    Tablo = StringCombinaison("", TexteCombi, True)
    Cells(1).Resize(UBound(Tablo)) = Application.Transpose(Tablo)
End Sub


Function StringCombinaison(prefixe$, chaine$, Optional raz As Boolean = False)
    Static dic As Object
    Dim i As Long
    If dic Is Nothing Or raz = True Then Set dic = CreateObject("Scripting.Dictionary")
    If Len(chaine) <= 1 Then
        dic(prefixe & chaine) = prefixe & chaine
    Else
        For i = 1 To Len(chaine)
            StringCombinaison prefixe & Mid(chaine, i, 1), Left(chaine, i - 1) & Right(chaine, Len(chaine) - i)
        Next i
    End If
       StringCombinaison = dic.keys
End Function
 

patricktoulon

XLDnaute Barbatruc
après je le redis c'est pas le meilleur algo car des que l'on va vers entre 7 et 10 caractères voir plus
ben le moulin ne s’arrête plus
j'ai essayé le mot "identiquement" (soit 13 lettres ) et donc après 22 minutes d'attente , j'ai du avorter excel car il n'avait toujours pas fini , je suis pas sur qu'il se serait arrêté un jour 🤣🤣🤣

donc en ce qui me concerne c'est WRONG WAY!!! ;)
 

Etoto

XLDnaute Barbatruc
entre 7 et 10 caractères voir plus
ben le moulin ne s’arrête plus
Bas le positif est que mes strings les plus longs sont de 6 caractères, donc ça marche bien. Mais c'est sur qu'avec un "anticonstitutionnellement" ou un "patricktoulon", 😏 ça risque de mouliner 😁. Heureusement que je n'ai pas un prénom ni un pseudo trop long 🤣🤪. Et c'est normal Excel a 1'048'576 lignes, alors que le nombres de combinaisons de "patricktoulon" sans compter les lettres identiques est de 6'227'020'800 :eek: o_O .
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
et oui le temps de travail est exponentiel
*7 a peu prés (par étage de puissance)
et c'est bien ce que je pensais le chiffre phare de excel est fatal c'est le chiffre 9
9 caractères et c'est fini ça ne s’arrête plus
j'avais a l'époque (il y a pas mal d'année )fait cela en javascript et utilisé ça dans un scriptcontrol et ça allais vachement plus vite
il faudrait que je retrouve ce truc dans mes archives ou dans DVP
 

Discussions similaires

Réponses
9
Affichages
165
Réponses
15
Affichages
773
Compte Supprimé 979
C

Statistiques des forums

Discussions
312 228
Messages
2 086 421
Membres
103 205
dernier inscrit
zch