Exécution d'une macro au hasard

Résolu
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

5 réponses

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    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
    
    1. 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
      1. 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
        1. Contributeur
          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é...
          1. 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 !!!!