Imaginez un gâteau découpé en huit part égale ce qui me donne np=8.
Il ya 8 façons de manger ces 8 parts : en partant de la première du haut et en mangeant par la suite la n°2 puis la n°3 … Nous aurrons donc fait tourner le plateau du gateau de 1 part a chaque fois soit m =1. Mon problème, c'est que je dois pas retomber sur une part de gâteau vide avant d'avoir tout manger !
Les solutions testé sont donc :
m=1 : 1-2-3-4-5-6-7-8-1 ça marche
m=2 : 1-3-5-7-1 PERDU
m=3 : 1-4-7-2-5-8-3-6-1 ça marche
m=4 : 1-5-1 PERDU
m=5 : 1-6-3-8-5-2-7-4-1 ça marche
m=6 : 1-7-5-3-1 PERDU
m=7 : 1-8-7-6-5-4-3-2-1 ça marche
Maintenant ce que je voudrais c'est automatisé ça car pour np=8 ça va, je peux faire les solutions à la main, mais pour np=71 par exemple ça devient beuacoup plus fastidieux de calculer les 70 possiblité (np-1)
J'ai donc essayer un petit code mais je me retrouve bloqué
Sub Macro1()
For k = 1 To 7
np = Cells(3, 1 + k).Value
m = Cells(4, 1 + k).Value
valeur = 1
d = 0
g = 0
For i = m To 8 * m Step m
g = g + 1
truc = valeur + i - d
If truc > np Then
truc = -(np - truc)
d = i '- (g - 1) * m
End If
Cells(5, 1 + k).Value = truc
Next
Next
End Sub
Le truc c'est que j'ai écris la ligne truc = -(np - truc) pour que je retombe sur une part de gateau réelle et c'est à partir de la que je voudrais que le calcul me dise si je retombe sur une part vide. dans ce cas ci, le calcul s'arrete et passe à la colonne suivante avec un autre m...
Est-ce que quelqu'un pourrait m'apporter ses lumières ? En plus, J'aimerais en fait que ma feuille de calcul m'écrive OK dans la cellule en dessous du m testé lorsque cela est possible et NON lorsque cela n'est pas possible.
J'espère que j'ai été assez clair avec mon histoire de gateau
Je ne comprend pas trop ce que tu veux dire par aléatoire mais ce que je veux c'est que l'on commence toujours par "manger la part n°1" et qu'après on étudie toutes les possibilité de décalage et voir si on tombe sur une part vide avant que tout ne soit mangé.
maintenant pour que le tirage commence toujours par 1
remplacer le code par celui-ci
Sub tirer()
Dim chiffre(0 To 100)
y = Range("A100").End(xlUp).Row
Range("B1:B65536").ClearContents
[B1] = "Tirage Aléa"
[B2] = 1
For i = 0 To y - 2
Randomize
boucle:
For x = 0 To y - 1
chiffre(x) = Cells(2 + x, 1).Value
Next
monrnd = Int(Rnd * y)
For Change = 2 To y
If chiffre(monrnd) = Cells(Change, 2).Value Then GoTo boucle
Next
Range("B100").End(xlUp).Offset(1, 0).Value = (chiffre(monrnd))
Next
End Sub
__________________________
PS: VBA pour EXCEL est maintenant dans Bureautique
merci de poser vos questions VBA à cet endroit
salutations
RGI
Un MERCI en retour c'est sympa
et ne pas oublier le tag :après résolution.
Je ne vois pas trop l'intérêt de ton code pour mon problème...
En fait ce n'est pas un tirage aléatoire.
Je veux juste savoir pour une valeur de m donnée si je vais repasser sur une zone (part) déja prise ou non.
Si ce n'est le cas alors le m testé est une séquence possible. Sinon, le m testé n'est pas une solution car il reste des zones pleines (part de gateau non mangées)
Pour mieux visualiser mon problème, il faut dessiner un cercle et numéroter chaque portion dans le sens horaire.
en b2 j'ai 1
en b3 je fais un tirage si je tire de nouveau 1 je retire
ex : le tirage est 3
en b4 je fais un tirage si je tire de nouveau 1 ou 3 alors je retire
etc etc ....
mais n'est-ce pas ça le désire ????
__________________________
PS: VBA pour EXCEL est maintenant dans Bureautique
merci de poser vos questions VBA à cet endroit
salutations
RGI
Un MERCI en retour c'est sympa
et ne pas oublier le tag :après résolution.
J'ai trouvé la solution à mon probleme et je met en pices jointe le fichier si cela intéresse quelqu'un (a tout hasard)
http://www.cijoint.fr/cjlink.php?file=cj200806/cijE40kK6s.xls.
Le fichier est serte rudimentaire mais il me permet de trouver ce que je veux.
je l'explique vite :
1- renseigner la première valeur de np
2 - lancer le calcul (cliquer sur séquençage)
3 - en rouge s'affiche les solutions possibles (en fait je fait une comparaison avec le résultat de la première solution qui lui est toujours bon. donc si le résultat est le même, la solution est réalisable)
Je ne sais pas si j'ai été clair avec tout ceci
En tout cas merci d'avoir essayer de m'aider, ça fait plaisir.
bonne continuation à tous