1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| '----------------------------------------------------------------------------------------
' Sources : https://recursivite.developpez.com/?page=page_3#LII-F
' Permet d'afficher les combinaisons d'une chaîne de caractères. par exemple
' les anagrammes des lettres de "abc" sont "abc, acb, bac, bca, cab, cba".
' Dans ce cas dans la fonction TraitementAnagram mettre Ch = "abc".
'----------------------------------------------------------------------------------------
Option Explicit
Dim Ch As String
Dim l As Byte
Dim Cpt As Long
Dim Mémorise() As String
'----------------------------------------------------------------------------------------
Sub TraitementAnagram()
'----------------------------------------------------------------------------------------
Ch = "ABCDFG" ' chaîne dont il faut trouver les combinaisons.
l = Len(Ch)
' Lance le traitement:
Cpt = 0
Call Anagram(Ch, 1)
' Affiche les mémoires pour information:
Dim i As Long
For i = 1 To UBound(Mémorise)
Debug.Print i & ":" & Mémorise(i)
Next i
End Sub
'----------------------------------------------------------------------------------------
Private Sub EchangeCar(ByRef Ch As String, ByVal i As Byte, ByVal j As Byte)
'----------------------------------------------------------------------------------------
Dim Car As String
If i <> j Then
Car = Mid(Ch, i, 1)
Mid(Ch, i, 1) = Mid(Ch, j, 1)
Mid(Ch, j, 1) = Car
End If
End Sub
'----------------------------------------------------------------------------------------
Private Sub Anagram(Ch As String, i As Byte)
'----------------------------------------------------------------------------------------
Dim j As Byte
If i = l Then
Cpt = Cpt + 1
ReDim Preserve Mémorise(0 To Cpt)
Mémorise(Cpt) = Ch
Else
For j = i To l
Call EchangeCar(Ch, i, j)
Call Anagram(Ch, i + 1)
Call EchangeCar(Ch, i, j)
Next j
End If
End Sub
'---------------------------------------------------------------------------------------- |
Partager