Pb macro objet graphique lors du passage à 2007
Bonjour
Afin d'étudier les probabilités avec mes 3emes, j'ai laborieusement bidouillé - le code doit être affreux - une macro pour simuler le jeu de franc carreau (qui consiste à lancer une pièce de monnaie sur un quadrillage, et on s'intéresse aux cas où la pièce "intersecte" les lignes du quadrillage).
Bref, ma macro affichait sous Excel 2003 une pièce qui changeait de position à chaque simulation de lancer, avec un compteur à côté pour sortir une fréquence.
Je suis passé l'an dernier à Excel 2007, gracieusement offert aux enseignants, et argl de chez argl, la macro ne fonctionne plus. Enfin presque. Les calculs, les boucles, tout va bien. Mais ma "pièce" ne bouge plus au cours de la simulation, mais uniquement lors du dernier lancer. J'ai quand même utilisé le fichier l'an dernier, avec très peu de succès, du moins beaucoup moins que l'année précédente où l'animation de la pièce avait permis de capter les élèves. Ce problème d'affichage me préoccupe donc, et mes compétences en Excel/VBA tendant vers 0, j'ai besoin d'un coup de pouce. Merci
Sub franccarreau()
Dim x, y, z, k, l, m, n
z = 0
n = InputBox("Entrez le nombre de tirages à simuler", "simulation", , 5300, 500)
If n = "" Then Exit Sub
For i = 1 To n
x = 10 * Rnd()
y = 10 * Rnd()
m = Int(5 * Rnd())
l = Int(5 * Rnd())
If x > 1 And x < 9 Then
If y > 1 And y < 9 Then
z = z + 1
End If
End If
ActiveSheet.Shapes("Oval 6").Select
With Selection
.Left = 10 * x + 100 * m - 10
.Top = 10 * y + 100 * l - 10
End With
Cells(12, 8).Value = z
Cells(i, 20).Value = z / i
pause (Cells(8, 8).Value)
Next
Cells(13, 8).Value = n
Cells(14, 8).Value = 100 * z / n
Cells(19, 8).Value = z + Cells(19, 8).Value
Cells(20, 8).Value = n + Cells(20, 8).Value
Cells(21, 8).Value = 100 * Cells(19, 8).Value / Cells(20, 8).Value
Cells(4 + Cells(23, 8).Value, 10).Value = 100 * z / n 'archivage des fréquences
Cells(23, 8).Value = Cells(23, 8).Value + 1 'compteur pour l'archive
End Sub
Bonsoir,
Dans ton code, à la ligne :
pause (Cells(8, 8).Value)Le programme doit attendre le temps déterminé dans la cellule (8, 8 ), soit la cellule G8
La cellule G8 est la cellule située à droite de la question :
Pause (en secondes) :Dans le fichier que tu as joint, le temps est de 0,1 seconde....
Passe à 5, tu verras la différence....(nota, ne mets pas trop de lancers, car le lancer s'effectuera toutes les 5 secondes.....Pour commencer, mets 2, et regarde.....)
Bonne soirée
Edit, et j'oubliais, ceci n'est vraiment pas du à la version d'Excel.....
Merci d'avoir jeté un oeil.
J'ai intégré la possibilité de changer la durée de la pause entre chaque lancer pour m'adapter au nombre de lancers que je simule. Lorsque je commence par des petites simulations, 10-20 lancers, je mets une pause de 1-2 secondes effectivement. Mais lorsque je passe à 1000 lancers, je descends à 0.1s par exemple.
Le problème, c'est que quelque soit la valeur de ma pause, la pièce ne bouge pas.
Et je certifie qu'avec la version 2003 d'Excel, la pièce changeait de position à chaque lancer, ce qui n'est plus le cas maintenant.
Je pensais donc qu'il y avait plutôt un problème dans la partie du code qui s'occupe de la pièce:
ActiveSheet.Shapes("Oval 6").Select
With Selection
.Left = 10 * x + 100 * m - 10
.Top = 10 * y + 100 * l - 10
End Withet que des commandes avaient pu changer lors du changement de version.
Maintenant, je n'ai peut-être pas bien compris ta réponse, et peut-être que chez toi tout fonctionne correctement... ce qui m'ennuierait fortement.
Merci encore en tout cas d'avoir répondu.
Amitiés
Hugh....
Et je certifie qu'avec la version 2003 d'Excel, la pièce changeait de position à chaque lancer, ce qui n'est plus le cas maintenant.
Tout est dit....
Si au moins, à la place d'affirmer :
j'ai laborieusement bidouillé
Tu avais reconnu que ce code t'était complétement étranger, mais qu'il te servait à l'occasion....
Pour ma part, sur MON pc, avec MA licence, ce code fonctionne parfaitement.....(Sous 2003, 2007....)
Je tombe des nues.
Moi qui était habitué à la cordialité des forums d'entraide pour d'autres logiciels, je vois que je me suis vraiment égaré en venant ici. Ou, j'ose espérer, je n'ai pas eu de chance en tombant sur toi.
Je pensais qu'on fréquentait ce genre d'endroits par solidarité et non pas pour flatter un ego, qui, blessé de n'avoir pu trouver une réponse à ma question, me sort une mesquinerie du type :
Si au moins, à la place d'affirmer :
j'ai laborieusement bidouillé
Tu avais reconnu que ce code t'était complétement étranger, mais qu'il te servait à l'occasion....
Si j'avoue volontiers ma médiocrité en langage VBA/Excel, car je n'en ai besoin qu'une fois tous les 5 ans, et que se replonger dans cette syntaxe est fastidieux, elle me paraît bien insignifiante comparée à la médiocrité intellectuelle.
Oui j'ai un problème de transfert de version d'Excel avec ce code que, oui, j'ai écrit il y a 18 mois, et si tu n'as pas de réponse, tant pis.
Mais comme le disait Einstein :"Il n'y a que deux choses d'infinies : l'univers et la bêtise humaine. Mais je ne suis pas sûr pour l'univers..." Il a du lire ce post.
- Messages
- 9'245
- Excel
- Vista Office 2007FR
- Inscrit
- 08/12/2007
- Emploi
- retraité Sce.Méthodes
Bonsoir,
Réactive la ligne en supprimant l'apostrophe devant "DoEvents"
Sub pause(durée)
Dim debut
debut = Timer
Do While Timer < debut + durée
DoEvents
Loop
End SubAmicalement
Claude
Immense MERCI.
ça tombe bien, je dois me servir de cette macro pour mon cours de demain matin.
Et désolé si je parus agressif lors de ma dernière réponse.
Encore merci Claude.
Amitiés