Bonjour,
Je cherche un code vba pour lister toute les combinaisons possibles en permuttant :
1 2 3 4 5 6 7 8 9 et 10.
Puis les mettre dans un tableau
Merci d'avance
Bonjour,
Je cherche un code vba pour lister toute les combinaisons possibles en permuttant :
1 2 3 4 5 6 7 8 9 et 10.
Puis les mettre dans un tableau
Merci d'avance
Bonjour,
Je pense que tu peux trouver la réponse par toit même
*exercice du prof ?*
faire tourner un exemple de résultat à la main, essaye avec:
- 1 et 2
- puis 1,2 et 3
- puis 1,2,3 et 4 *stop après sinon ça devient chiant *
Reviens nous voir *avec un minimum de résultats*
et on te dira si ça va.
PS: Fait tes liste de chiffres dans un ordre logique (ex: commence par les 1, puis les 2, ...)
Merci pour le tuyau, mais j'avais commencé à faire quelque chose du genre...
Et j'ai lu qu'il y a avait moyen de le faire avec une fonction récursive.
Ca serait plus "propre"...
Toutefois, merci pour le tuyau, je vais continuer à chercher
PS: Et non, j'ai 31 ans, c'est pas un exercice du prof. Je dev une macro excel qui doit tester un grand nombre de possibilités (3 628 800 dans le cas présent si mes calculs sont bons) pour donner un meilleur choix d'emplacement.
C'est un langage VBA du coup, et non vb.net
le soucis peut très bien être réglé sur ce fofo puisque c'est un algo dont tu a besoin,
le langage derrière est générique (Boucle For, test IF, ...)
PS: à titre d'info, tout ce qui est macro Excel c'est dans: Office->Excel->Macros VBA Excel
PPS: J'attends ta suite
Exact, c'est pour ca que j'ai posté ici.
Je me suis dit (peut-être à tord) qu'il y aurait plus de monde sur le fofo vb.net apte à me fournir une solution.
Je suis en train de regarder pour "faire propre" avec la fonction récursive,
mais j'ai un doute qu'on puisse le faire aussi facilement que pour la Factorielle *grand classique des fonctions récursives*
étant donné que tu veux sortir des tableaux, si on joue avec la récursivité, on va se galerer, il faut:
- gérer les tailles des tableaux
- et l'ordre des données *surtout ne pas les écraser*
je pense que ce que je te propose c'est de faire une fonction à la mano "pas propre",
et si tu veux on essayera de plancher sur une fonction un peut plus évoluer *dite récursive*
Salut, une simple recherche sur le site devrait être suffisante : http://www.google.fr/#sclient=psy-ab...w=1027&bih=719
Tes solutions fonctionnent pour des valeur à 2 chiffres,
mais je n'ai pas trouvé d'exemples qui nous montrent comment faire avec des valeurs à 10 chiffres
Merci kiki29, je suis tombé sur pas mal de lien que j'avais déjà consulté, toutefois, je pense avoir trouvé une bonne piste pour coder ma fonction récursive ici :
source : http://www.developpez.net/forums/d10...e/#post6047715
Reste maintenant à en tirer le code...
De retour tontonced
Je ne te serrai pas d'une grande aide, il y a une partie importante que je ne comprend pas ...
les Soient tete et soit resultat sont vraiment pas clair...Soient tete : item et queue : liste d'item telles que tete+queue=l
Soit resultat : liste de (liste d'item)
l' = arrangements(queue)
et qu'est-ce qu'il entend par "arrangement"
-------------------------------------------------------------------
Tu aura besoin de faire d'autre liste de chiffres comme ça?
ou c'est quelque chose d’exceptionnel?
J'osais pas dire que c'était pas clair... Mais j'ai le même problème pour comprendre que toi
humm c'est une autre approche qui consiste à ajouter un chiffre avant et après chaque chiffre qui est dans le nombre.
.............123
........../
.......12 - 132
....../....\
..../.......312
..1
....\.......213
......\.../
.......21 - 231
..........\
...........321
Je vois bien la partie récursive mais alors comment coder .... *j'en fait pas tous les jours...*
je peux te donner un code qui va le faire mais ce serra que pour ton cas à 10chiffres
Donne donne... en attendant mieux
désolé pour le retard, petit contre temps.
bon pour ton code,
Le code est encore à l'état de beta, il ne permet que de passer de la suite 123 -> aux 4 autres possibilités qui en découlent.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 Option Explicit Sub Beta() 'Déclaration des variables Dim Chaine, NextNumber, NewChaine As String Dim Longueur, i As Integer 'Initialisation des variables Chaine = "123" NextNumber = "4" NewChaine = "" 'Récupération de la longueur de la chaine Longueur = Len(Chaine) 'Dimensionnement du tableau ReDim NewChaine(Longueur - 1) 'Insertion du caratére For i = 0 To Longueur - 1 NewChaine(i) = Left(Chaine, i) & NextNumber & Right(Chaine, i) Next End Sub
je l'ai pas testé mais c'est pour te donner un aperçu de la méthode à laquelle je pense.
PS: attention pour cette routine tu a besoin de considérer tes chiffres comme des lettres
Bonjour,
Une autre méthode qui peut être te conviendra
Ici on boucle sur 3 niveaux, mais le principe reste le meme sur x niveaux (par contre, pour la restitution faire attention au nombre de lignes
Et comme cela si on ne veut pas de doublons
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 Dim i1 As Byte Dim i2 As Byte Dim i3 As Byte Dim iLigne As Long iLigne = 1 For i3 = 1 To 10 For i2 = 1 To 10 For i1 = 1 To 10 Range("A" & iLigne).Value = i1 & i2 & i3 iLigne = iLigne + 1 Next i1 Next i2 Next i3
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 Dim i1 As Byte Dim i2 As Byte Dim i3 As Byte Dim iLigne As Long iLigne = 1 For i3 = 1 To 10 For i2 = 1 To 10 If i2 <> i3 Then For i1 = 1 To 10 If i1 <> i2 And i1 <> i3 Then Range("A" & iLigne).Value = i1 & i2 & i3 iLigne = iLigne + 1 End If Next i1 End If Next i2 Next i3
Salut
Peut être quelque chose dans ce gout la
Il doit falloir retravailler un peu les boucles car je ne trouve que 19000 et quelques résultats... le calculs qui te donne 3M de possibilité tient compte des doublon? 6 2 3 6 5 ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 Sub Permute(ByRef StrTableau As String, ByVal PreSuFix As String) Dim TabSplit Dim i As Integer If StrTableau = "" Then StrTableau = PreSuFix Else TabSplit = Split(StrTableau, "¤") For i = 0 To UBound(TabSplit) StrTableau = StrTableau & "¤" & PreSuFix & TabSplit(i) & "¤" & TabSplit(i) & PreSuFix Next End If End Sub Sub Utilisation() Dim i As Integer Dim StrTab As String Dim TabResultat For i = 1 To 10 Permute StrTab, i Next TabResultat = Split(StrTab, "¤") With Feuil1.Range("A1").Resize(UBound(TabResultat)) 'On passe les cellule en format texte pour éviter qu'excel n'exploite les valeurs avec un format scientifique .NumberFormat = "@" .Value = WorksheetFunction.Transpose(TabResultat) End With End Sub
Autre problème posé par mon code: je viens de voir que le 1 sera toujours présent, puis le 2... puis le 3, il n'y a donc pas toutes les solutions... il faudrait refaire appelle au code 10 fois en réduisant la borne de départ a chaque fois. de 1à10 puis de 2à10...jusqu'à 9à10, il suffit de mettre une boucle de plus dans la sub utilisation, je te laisse tester, je n'ai pas trop le temps
++
Qwaz
Bonsoir à tous,
Vois l'algorithme de Jonhson-Trotter version VBA proposé par fred65200 dans ce lien.
http://www.developpez.net/forums/d42...ne-charactere/
Tu listeras les 3 628 800 permutations : factorielle de 10
Klin89
Beaucoup de réponse à étudier (j'étais parti en vacances quelques temps)...
Merci à tous
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager