OVH Cloud OVH Cloud

Anagramme

3 réponses
Avatar
Vince
Bonjour à toutes et tous

J'ai dans une cellule A1 un mot ex : bon
je souhaite qu'en A2 j'ai automatiquement "nob" puis en A3 "onb" ect.
En fait, il s'agit de saisir un mot en A1, puis avoir dans les cellules
suivantes en A toutes les combinaisons possibles du mot.

Merci beaucoup
Vince

3 réponses

Avatar
Michel Gaboly
Bonjour,

Voici un code permettant de gérer jusqu'à 5 lettres.

Méfie-toi, certaines lignes risquent d'être coupées.


Private Sub Permutations()
Dim NbCar As Integer, i As Integer, j As Integer, k As Integer, l As Integer, m As Integer
Dim Mot As String, Ref1 As Range, Ref2 As String, Ref3 As String, Ref4 As String
Dim Ref5 As String, Decal As Integer
Set Ref1 = Range("A1")
NbCar = Len(Ref1)
For i = 1 To NbCar
'Ref1 = Range("A1")
For j = 1 To NbCar - 1
Ref2 = Application.WorksheetFunction.Substitute(Ref1, Mid(Ref1, i, 1), "")
If NbCar = 2 Then
Ref1.Offset(0, Decal) = Mid(Ref1, i, 1) & Mid(Ref2, j, 1)
Decal = Decal + 1
End If
For k = 1 To NbCar - 2
Ref3 = Application.WorksheetFunction.Substitute(Ref2, Mid(Ref2, j, 1), "")
If NbCar = 3 Then
Ref1.Offset(0, Decal) = Mid(Ref1, i, 1) & Mid(Ref2, j, 1) & Mid(Ref3, k, 1)
Decal = Decal + 1
End If
For l = 1 To NbCar - 3
Ref4 = Application.WorksheetFunction.Substitute(Ref3, Mid(Ref3, k, 1), "")
If NbCar = 4 Then
Ref1.Offset(0, Decal) = Mid(Ref1, i, 1) & Mid(Ref2, j, 1) & Mid(Ref3, k, 1) & Mid(Ref4,
l, 1)
Decal = Decal + 1
End If
For m = 1 To NbCar - 4
Ref5 = Application.WorksheetFunction.Substitute(Ref4, Mid(Ref4, l, 1), "")
If NbCar = 5 Then
Ref1.Offset(0, Decal) = Mid(Ref1, i, 1) & Mid(Ref2, j, 1) & Mid(Ref3, k, 1) &
Mid(Ref4, l, 1) & Mid(Ref5, m, 1)
Decal = Decal + 1
End If
Next m
Next l
Next k
Next j
Next i
End Sub

Attention, le nombre de mots possibles augmente très vite : le nombre
de permutations de n éléments pris dans un ensemble de n correspond
à Factorielle(n), soit 24 pour 4 lettres, 120 pour 5 lettres, ...
40 320 pour 8 lettres, 3 628 800 pour 10 lettres, ...

Je me suis arrêté à 5 car au-delà, Excel n'offre pas assez de coloones
toutes les variantes.

NB - Dans l'exemple, les mots apparaissent sur la ligne A. Pour les avoir
en colonne 1, il faut remplacer les occurrences de

Ref1.Offset(0, Decal)
par

Ref1.Offset(Decal)
Moyennant adaptation, cela permettrait d'aller jusqu'à 8 lettres.

En pratique le nombre de permutations est + faible, car dès qu'1 lettre
(ou +) apparaît plus d'1 fois dans le mot, cela entraîne des doublons.

Ce n'est pas géré ici.



Bonjour à toutes et tous

J'ai dans une cellule A1 un mot ex : bon
je souhaite qu'en A2 j'ai automatiquement "nob" puis en A3 "onb" ect.
En fait, il s'agit de saisir un mot en A1, puis avoir dans les cellules
suivantes en A toutes les combinaisons possibles du mot.

Merci beaucoup
Vince


--
Cordialement,

Michel Gaboly
http://www.gaboly.com

Avatar
Vince
Merci Michel,
Cela me convient très bien.
Vince

"Michel Gaboly" a écrit dans le message de
news:
Bonjour,

Voici un code permettant de gérer jusqu'à 5 lettres.

Méfie-toi, certaines lignes risquent d'être coupées.


Private Sub Permutations()
Dim NbCar As Integer, i As Integer, j As Integer, k As Integer, l As
Integer, m As Integer

Dim Mot As String, Ref1 As Range, Ref2 As String, Ref3 As String, Ref4 As
String

Dim Ref5 As String, Decal As Integer
Set Ref1 = Range("A1")
NbCar = Len(Ref1)
For i = 1 To NbCar
'Ref1 = Range("A1")
For j = 1 To NbCar - 1
Ref2 = Application.WorksheetFunction.Substitute(Ref1,
Mid(Ref1, i, 1), "")

If NbCar = 2 Then
Ref1.Offset(0, Decal) = Mid(Ref1, i, 1) &
Mid(Ref2, j, 1)

Decal = Decal + 1
End If
For k = 1 To NbCar - 2
Ref3 Application.WorksheetFunction.Substitute(Ref2, Mid(Ref2, j, 1), "")
If NbCar = 3 Then
Ref1.Offset(0, Decal) = Mid(Ref1, i,
1) & Mid(Ref2, j, 1) & Mid(Ref3, k, 1)

Decal = Decal + 1
End If
For l = 1 To NbCar - 3
Ref4 Application.WorksheetFunction.Substitute(Ref3, Mid(Ref3, k, 1), "")
If NbCar = 4 Then
Ref1.Offset(0, Decal) Mid(Ref1, i, 1) & Mid(Ref2, j, 1) & Mid(Ref3, k, 1) & Mid(Ref4,
l, 1)
Decal = Decal + 1
End If
For m = 1 To NbCar - 4
Ref5 Application.WorksheetFunction.Substitute(Ref4, Mid(Ref4, l, 1), "")
If NbCar = 5 Then
Ref1.Offset(0, Decal)
= Mid(Ref1, i, 1) & Mid(Ref2, j, 1) & Mid(Ref3, k, 1) &

Mid(Ref4, l, 1) & Mid(Ref5, m, 1)
Decal = Decal + 1
End If
Next m
Next l
Next k
Next j
Next i
End Sub

Attention, le nombre de mots possibles augmente très vite : le nombre
de permutations de n éléments pris dans un ensemble de n correspond
à Factorielle(n), soit 24 pour 4 lettres, 120 pour 5 lettres, ...
40 320 pour 8 lettres, 3 628 800 pour 10 lettres, ...

Je me suis arrêté à 5 car au-delà, Excel n'offre pas assez de coloones
toutes les variantes.

NB - Dans l'exemple, les mots apparaissent sur la ligne A. Pour les avoir
en colonne 1, il faut remplacer les occurrences de

Ref1.Offset(0, Decal) >
par

Ref1.Offset(Decal) >
Moyennant adaptation, cela permettrait d'aller jusqu'à 8 lettres.

En pratique le nombre de permutations est + faible, car dès qu'1 lettre
(ou +) apparaît plus d'1 fois dans le mot, cela entraîne des doublons.

Ce n'est pas géré ici.



Bonjour à toutes et tous

J'ai dans une cellule A1 un mot ex : bon
je souhaite qu'en A2 j'ai automatiquement "nob" puis en A3 "onb" ect.
En fait, il s'agit de saisir un mot en A1, puis avoir dans les cellules
suivantes en A toutes les combinaisons possibles du mot.

Merci beaucoup
Vince


--
Cordialement,

Michel Gaboly
http://www.gaboly.com





Avatar
Michel Gaboly
De rien, :-)))


Merci Michel,
Cela me convient très bien.
Vince

"Michel Gaboly" a écrit dans le message de
news:
Bonjour,

Voici un code permettant de gérer jusqu'à 5 lettres.

Méfie-toi, certaines lignes risquent d'être coupées.


Private Sub Permutations()
Dim NbCar As Integer, i As Integer, j As Integer, k As Integer, l As
Integer, m As Integer

Dim Mot As String, Ref1 As Range, Ref2 As String, Ref3 As String, Ref4 As
String

Dim Ref5 As String, Decal As Integer
Set Ref1 = Range("A1")
NbCar = Len(Ref1)
For i = 1 To NbCar
'Ref1 = Range("A1")
For j = 1 To NbCar - 1
Ref2 = Application.WorksheetFunction.Substitute(Ref1,
Mid(Ref1, i, 1), "")

If NbCar = 2 Then
Ref1.Offset(0, Decal) = Mid(Ref1, i, 1) &
Mid(Ref2, j, 1)

Decal = Decal + 1
End If
For k = 1 To NbCar - 2
Ref3 > Application.WorksheetFunction.Substitute(Ref2, Mid(Ref2, j, 1), "")
If NbCar = 3 Then
Ref1.Offset(0, Decal) = Mid(Ref1, i,
1) & Mid(Ref2, j, 1) & Mid(Ref3, k, 1)

Decal = Decal + 1
End If
For l = 1 To NbCar - 3
Ref4 > Application.WorksheetFunction.Substitute(Ref3, Mid(Ref3, k, 1), "")
If NbCar = 4 Then
Ref1.Offset(0, Decal) > Mid(Ref1, i, 1) & Mid(Ref2, j, 1) & Mid(Ref3, k, 1) & Mid(Ref4,
l, 1)
Decal = Decal + 1
End If
For m = 1 To NbCar - 4
Ref5 > Application.WorksheetFunction.Substitute(Ref4, Mid(Ref4, l, 1), "")
If NbCar = 5 Then
Ref1.Offset(0, Decal)
= Mid(Ref1, i, 1) & Mid(Ref2, j, 1) & Mid(Ref3, k, 1) &

Mid(Ref4, l, 1) & Mid(Ref5, m, 1)
Decal = Decal + 1
End If
Next m
Next l
Next k
Next j
Next i
End Sub

Attention, le nombre de mots possibles augmente très vite : le nombre
de permutations de n éléments pris dans un ensemble de n correspond
à Factorielle(n), soit 24 pour 4 lettres, 120 pour 5 lettres, ...
40 320 pour 8 lettres, 3 628 800 pour 10 lettres, ...

Je me suis arrêté à 5 car au-delà, Excel n'offre pas assez de coloones
toutes les variantes.

NB - Dans l'exemple, les mots apparaissent sur la ligne A. Pour les avoir
en colonne 1, il faut remplacer les occurrences de

Ref1.Offset(0, Decal) > >
par

Ref1.Offset(Decal) > >
Moyennant adaptation, cela permettrait d'aller jusqu'à 8 lettres.

En pratique le nombre de permutations est + faible, car dès qu'1 lettre
(ou +) apparaît plus d'1 fois dans le mot, cela entraîne des doublons.

Ce n'est pas géré ici.



Bonjour à toutes et tous

J'ai dans une cellule A1 un mot ex : bon
je souhaite qu'en A2 j'ai automatiquement "nob" puis en A3 "onb" ect.
En fait, il s'agit de saisir un mot en A1, puis avoir dans les cellules
suivantes en A toutes les combinaisons possibles du mot.

Merci beaucoup
Vince


--
Cordialement,

Michel Gaboly
http://www.gaboly.com





--
Cordialement,

Michel Gaboly
http://www.gaboly.com