La modif est simple, j'ai ajouté la "sub" nomée doublon.
text$="ABCDEA"
debut$=""
global result$, debut$, glon, nb, blok
debut$=text$
glon=len(text$)
call doublon text$
if blok=1 then end
r$=combine$(text$)
print "il y a ";nb;" réponses."
input r$
end
function combine$(text$)
lon=len(text$)
for i=1 to lon
trace 2
text2$=mid$(text$,i+1)+left$(text$,i-1)
ch$=mid$(text$,i,1)
result$=result$+ch$
if text2$<>"" then
r$=combine$(text2$)
else
rlon=len(result$)
dlon=glon-rlon
result$=left$(debut$,dlon)+result$
debut$=result$
print result$
result$=""
nb=nb+1
end if
next i
combine$=""
end function
sub doublon txt$
lon=len(txt$)
for i=1 to lon
ch$=mid$(txt$, i, 1)
for j=1 to lon
if j=i then exit for
if ch$=mid$(txt$, j, 1) then blok=1: exit for
next j
if blok=1 then exit for
next i
if blok=1 then
notice "Doublon detecté !"+chr$(13)+"Le caractère '"+ch$+"' à été detecté en double."
end if
end sub
et maintenant, cela te convient t'il ?
voici le resultat pour la chaine "ABCD":
ABCD
ABDC
ACDB
ACBD
ADBC
ADCB
BCDA
BCAD
BDAC
BDCA
BACD
BADC
CDAB
CDBA
CABD
CADB
CBDA
CBAD
DABC
DACB
DBCA
DBAC
DCAB
DCBA
il y a 24 réponses.
?
Je dois être un peu neuneu, mais cette macro semble parfaitement répondre à mon besoin, mais je ne parviens pas à la faire fonctionner.
Quelle nom faut il lui donner ? Un Sub Macro2() la fait planter. Pour info, je suis Excel 2007
Une bonne âme peut elle peut me débloquer ?
Merci.
Sub genererCombinaison()
'On déclare des variables de types Integer qui stockent le code ASCII de la lettre
Dim char_number_1, char_number_2, char_number_3, char_number_4 As Integer
'Variable qui va stocker le résultat de notre combinaison
Dim macombinaison As String
'Integer qui compte le nombre de combinaisons
Dim cmb_id As Integer
'Initialisation du compteur
cmb_id = 1
'la lettre A a pour code ASCII 65
'la lettre B a pour code ASCII 66
'la lettre C a pour code ASCII 67
'la lettre D a pour code ASCII 68
'On parcourt les lettres de A à D
For char_number_1 = 65 To 68
'On parcourt les lettres de A à D
For char_number_2 = 65 To 68
'On élimine le cas où les 2 premières lettres sont identiques
If char_number_2 <> char_number_1 Then
'On parcourt les lettres de A à D
For char_number_3 = 65 To 68
'On élimine les cas suivants :
' 3ème lettre = 2ème lettre
' 3ème lettre = 1ère lettre
If char_number_3 <> char_number_2 And char_number_3 <> char_number_1 Then
'On parcourt les lettres de A à D
For char_number_4 = 65 To 68
'On élimine les cas suivants :
' 4ème lettre = 3ème lettre
' 4ème lettre = 2ème lettre
' 4ème lettre = 1ère lettre
If char_number_4 <> char_number_3 And _
char_number_4 <> char_number_2 And _
char_number_4 <> char_number_1 Then
'On concatène les caractères formés à partir des codes ASCII
macombinaison = Chr(char_number_1) & Chr(char_number_2) & Chr(char_number_3) & Chr(char_number_4)
'On affiche le numéro de la combinaison et la chaîne de caractères
Debug.Print ("Combinaison n°" & Trim(Str(cmb_id)) & " : " & macombinaison)
'On incrémente le compteur
cmb_id = cmb_id + 1
End If
Next
End If
Next
End If
Next
Next char_number_1
End Sub
Cette Sub affiche le résultat dans la console de Debug