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
34franc-carreau.zip (15.36 Ko)

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 With

et 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.

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 Sub

Amicalement

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

Rechercher des sujets similaires à "macro objet graphique lors passage 2007"