Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2019 Choix lancement de macro selon résutat d'une boucle

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

gilboss

XLDnaute Nouveau
J'ai 9 macro qui ouvre chacune une mgbox différente. Selon le résultat d'une boucle de 1 à 9 qui se trouve dans le code de la page, une des macro doit se lancer via Call le nom de la macro qui se termine par le n° du résultat de la boucle.
Seulement, j'aurai déjà réussi si l'on pouvais nommer une macro par un chiffre. ' Sub 1 ( ) ' Mais Excel vba ne le permet pas. J'ai donc appelé mes macro ' Message_1 ( ) ' à 'Message_9' Mon soucis, je n'arrive pas à nommer le résultat de ma boucle pour incrémenter le nom de ma Macro. Par exemple, ma boucle i=5, Résultat= Message_i ce qui donnerai Message_5 et que je lancerai par Call Résultat.
Mais je n'arrive pas à faire cet incrément Message_i
J'espère avoir été assez claire. Merci pour votre aide.
 
Bonjour,

Dans ce cas, il est mieux d'écrire une seule procédure en lui passant un argument.
Voici un exemple :
VB:
Sub exemple_d_appel()
    Message 2
End Sub

Sub Message(index As Byte)
    Select Case index
       Case 1: MsgBox "blabla 1"
       Case 2: MsgBox "blabla 2"
       Case 3: MsgBox "blabla 3"
       Case 4: MsgBox "blabla 4"
       Case 5: MsgBox "blabla 5"
       Case 6: MsgBox "blabla 6"
       Case 7: MsgBox "blabla 7"
       Case 8: MsgBox "blabla 8"
       Case 9: MsgBox "blabla 9"
    End Select
End Sub

Alternative : directement dans la procédure "appelante" :
VB:
Sub Exemple2()
Dim Msg As Variant

    Msg = Array("blabla 0", "blabla 1", "blabla 2", "blabla 3", "blabla 4", "blabla 5", "blabla 6", "blabla 7", "blabla 8", "blabla 9")
    
    MsgBox Msg(2)
End Sub
 
J'ai testé manuellement votre code en le plaçant dans un module. Il fonctionne.
J'ai essayé en le placant dans le code de la page et en faisant une boucle qui se déclenche en cliquant sur une cellule ( ici ligne de 1 à 9 sur colonne C) Mais cela ne marche pas. message d'erreur. Type d'argument Byref incompatible.


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim i
For i = 1 To 9
If Selection.Count = 1 Then
If Not Intersect(Target, Cells(i, 3)) Is Nothing Then
Message i
End I
Next i
End Sub
 
Alors il faut corriger votre code.
L'index passé en argument est de type Byte donc il est nécessaire de typer votre i de la même façon.
Ensuite, il faut fermer les 2 IF par des END IF
Ce qui donne (avec des indentations de code c'est toujours plus facile de voir les end if manquants) :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim i As Byte

    For i = 1 To 9
        If Selection.Count = 1 Then
            If Not Intersect(Target, Cells(i, 3)) Is Nothing Then
                Message i
            End If
        End If
    Next i
End Sub

Alternative : on peut simplifier le tout comme ceci :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Intersect(Target, Range("C1:C9")) Is Nothing Then Message Target.Row
End Sub

Ou bien encore plus simple :
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Msg As Variant

    Msg = Array("blabla 0", "blabla 1", "blabla 2", "blabla 3", "blabla 4", "blabla 5", "blabla 6", "blabla 7", "blabla 8", "blabla 9")
    If Not Intersect(Target, Range("C1:C9")) Is Nothing Then MsgBox Msg(Target.Row)
End Sub
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…