Bouton_click() devant s'appeler lui-même

Raton

XLDnaute Junior
Bonjour,
J'ai une fonction (d'un bouton) qui, en cas d'erreur, est sensée se relancer. Le problème c'est que je n'y arrive pas.
J'ai ceci.

Code:
Private Sub RetourBouton_Click()

Dim ConfirmRet, Err
Dim instrum, texte, titre, icone As String

Deb = Defcol()

icone = vbInformation
titre = "Retour d'un instrument"

instrum = UCase(Scanne("L'instrument en retour est le ", titre, icone))
    'Lance la fonction Scanne() avec certains paramètres et met en mémoire le nomlabo renvoyé par celle-ci dans une variable

If Range(Colpret & ligneinstrum).Value <> Empty Then

...
...
        
        Else: Err = MsgBox("L'instrument " + instrum + " était en armoir ou vous n'avez pas entré correctement son nom" + Chr(13) _
                    + "Veuillez vérifiez", vbCritical + vbOKCancel, titre)
            If Err = "1" Then
                Err = RetourBouton()          'Devrait relancer RetourBouton_click()
            Else: End
            End If
        End If
        
    End If
    
End If

End Sub
Je n'ai pas mis tous le code car il est assez long. La partie posant problème se trouve après les ... (le if err = "1")
 

ftho

XLDnaute Occasionnel
Re : Bouton_click() devant s'appeler lui-même

Bonjour,

Je n'ai pas vérifié si le reste de ton code est ok mais pour relancer la macro fait comme ceci :

En début de code tu indiques
Code:
Private Sub RetourBouton_Click()
Return:

Et dans ta condition
Code:
If Err = "1" Then GoTo Return
 

Gorfael

XLDnaute Barbatruc
Re : Bouton_click() devant s'appeler lui-même

Salut Raton, ftho et le forum

ou alors, remplacer
Code:
If Err = "1" Then
                Err = RetourBouton()          'Devrait relancer RetourBouton_click()
            Else: End
            End If
par
Code:
If Err = "1" Then
     call RetourBouton_click
Else
     exit sub
End If
(il me semble que la macro s'appelle RetourBouton_click et pas RetourBouton, mais peut-être me trompe-je :p)
A+
 

Gorfael

XLDnaute Barbatruc
Re : Bouton_click() devant s'appeler lui-même

Salut Raton et le forum
Là, tu compliques :p, je ne sais pas comment transmettre une adresse, donc il reste la solution (en attendant une réponse plus "professionnelle") de transmission d'une variable avec un select case et des goto du style

Code:
sub macro1
dim Y as integer
if Condition 1 then Y = 1
if Condition 2 then Y = 2
if Condition 3 then Y = 3
 
call macro2(y)
end sub
 
sub macro2(X as integer)
select Case X
case 1
   goto Addr1
case 2
   goto Addr2
case 3
   goto Addr3
end select
partie si X différent de 1,2,3
exit sub ou goto ... ou rien suivant nécessité
Addr1:
partie si X=1
exit sub ou goto ... ou rien suivant nécessité
Addr2:
partie si X=2
exit sub ou goto ... ou rien suivant nécessité
Addr3:
partie si X=3
exit sub ou goto ... ou rien suivant nécessité
end sub
un truc de ce genre
Moi je préfère emploier Call, parce que j'ai des macros assez longues qui font appel à plusieurs macros, et quand je veux modifier, plutôt que le rechercher Macro1, Macro2, etc... je recherche Call. si c'est pas le bon, le suivant, etc. C'est plus rapide et m'évite de taper le nom de la macro, ce qui épargne mon poil dans la main :D
A+
 

Discussions similaires

Statistiques des forums

Discussions
312 506
Messages
2 089 111
Membres
104 037
dernier inscrit
damsau