Exécution d'une macro au hasard

Résolu/Fermé
Baldurr Messages postés 7 Date d'inscription vendredi 15 octobre 2010 Statut Membre Dernière intervention 27 janvier 2011 - 15 oct. 2010 à 10:33
Baldurr Messages postés 7 Date d'inscription vendredi 15 octobre 2010 Statut Membre Dernière intervention 27 janvier 2011 - 15 oct. 2010 à 12:42
Bonjour,

Je ne vois pas de topic là-dessus :
Je cherche une macro (toute simple) pour exécuter, AU HASARD, un macro parmi un choix.

Disons que mes macros sont 3 : "mac1", "mac2" et "mac3".

Sub macro_au_hasard()
???
End Sub


Je ne vois pas quoi mettre comme commande (alea? rnd ? autre ?). Rien de ce que j'ai essayé ne marche, je suis pourtant sur que ça ne doit pas être compliqué, grrr
A voir également:

5 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
15 oct. 2010 à 11:23
Bonjour
Sub macro_zazaz()
N = 3
choix = Int(Rnd * N) + 1

Select Case choix
    Case 1
        macro1
    Case 2
        macro2
    '.... ect jusquà N
    End Select
End Sub
0
Baldurr Messages postés 7 Date d'inscription vendredi 15 octobre 2010 Statut Membre Dernière intervention 27 janvier 2011
15 oct. 2010 à 11:54
Bonjour,

Hélas, ce que vous proposez ne marche pas. Il sélectionne 1 case, puis une autre, etc. à toute vitesse, sans que j'ai la main et en choisissant "Case 1" à chaque fois, jusqu'à rencontrer un problème de pile. Voici ce que cela donne avec mon appli :

Sub suitazar()
N = 3
choix = Int(rnd * N) + 1

Select Case choix
    Case 1
        suite_mac_ace 'nom de la 1è macro
    Case 2
        suite_mac_ier 'nom de la 2è
    Case 3
        suite_mac_ard 'nom de la 3è
    End Select
End Sub


Sinon, l'idée est bonne. Il y a 3 macros, on appelle "choix" le ... choix aléatoire entre le "Case1", "Case2" ou "Case3". Mais :

- Il choisit toujours le 1
- La macro "suitazar" devrait exécuter la macro choisie "suite_mac_ace" ou "...ier" ou "...ard" puis s'arrêter puisque la macro en question sélectionne une cellule prédéfinie et attend une réponse avant de continuer son exécution (ça, j'ai réussi :-) ).

Une autre idée ?

Merci néanmoins Michel ;-)

Baldur
0
Baldurr Messages postés 7 Date d'inscription vendredi 15 octobre 2010 Statut Membre Dernière intervention 27 janvier 2011
15 oct. 2010 à 12:27
Re-,

J'ai essayé ton code dans un classeur vierge :

Sub suitazar2()
N = 3
choix = Int(Rnd * N) + 1

Select Case choix
    Case 1
        ActiveCell.FormulaR1C1 = "un"
        ActiveCell.Offset(1, 0).Select
    Case 2
        ActiveCell.FormulaR1C1 = "deux"
        ActiveCell.Offset(1, 0).Select
    Case 3
        ActiveCell.FormulaR1C1 = "trois"
        ActiveCell.Offset(1, 0).Select
    End Select
End Sub


Il marche parfaitement. Du coup, je me demande bien pourquoi, dans l'autre cas, il choisit toujours "suite_mac_ace ". Sinon, j'ai de nouveau la main (j'ai déplacé l'emplacement de l'exécution de "suitazar"). Il ne reste plus qu'à voir
cet histoire de choix ... grmpf ...

Baldur
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
15 oct. 2010 à 12:28
Désolé je viens d'essayer en remplaçant les appels macro par des msgbox et ca marche! j'ai ajouté l'instruction Randomize pour le principe mais ca n'a pas grand effet
Sub suitazar()
N = 3
Randomize
choix = Int(Rnd * N) + 1

Select Case choix
    Case 1
        MsgBox "suite_mac_ace" 'nom de la 1è macro
    Case 2
        MsgBox "suite_mac_ier" 'nom de la 2è
    Case 3
        MsgBox "suite_mac_ard" 'nom de la 3è
    End Select
End Sub


Au fait, tu es bien sur Excel: je m'aperçois que tu n'avais pas précisé...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Baldurr Messages postés 7 Date d'inscription vendredi 15 octobre 2010 Statut Membre Dernière intervention 27 janvier 2011
15 oct. 2010 à 12:42
Oui.

Merci Michel, mais, ça y est, j'ai trouvé.

Les 3 macros concernaient des feuilles différentes mais étaient gérées indépendamment. J'ai donc juste rajouté

Worksheets("feuille ard").Select '(par exemple)

en début d'exécution. Sujet clos, MERCI !!!!
0