Dans select case, comment revenir sur alternatives abandonnées en 1er choix ?

Sebast

XLDnaute Impliqué
Bonjour à toutes et à tous,

Par une boîte de dialogue, je propose 3 choix à l’utilisateur :
Choix 1 : exécuter un traitement partiel « p »
Choix 2 : exécuter un traitement total « t »
Choix 3 : abandonner, quitter le programme « a »


J’aimerais que lorsque l’utilisateur a choisi d’abandonner, apparaisse une boîte lui demandant confirmation et s’il se ravise, qu’il soit réorienté vers l’alternative initiale (choix 1 ou choix 2).

C’est cet embranchement que je n’arrive tout simplement pas à réaliser !
Quelqu’un a-t-il une idée comment le coder ?

Ci-dessous le code

Code:
Sub Afficher()

Dim Answer As Variant
Dim Réponse As Byte

Do Until Answer = "p" Or Answer = "t" Or Answer = "a"   
    Answer = Application.InputBox("Merci de donner votre réponse : p pour partiel, t pour total, a pour abandonner l'application", Type:=2)
Loop


Select Case Answer
            Case "p"
                    MsgBox "Je lance la procédure pour le traitement partiel"
                    ' ici code mais pas le sujet de ce fil ...
                    
            Case "t"
                    MsgBox "Je lance la procédure pour le traitement total"
                    ' ici code mais pas le sujet de ce fil ...
                    
            Case "a" ' l'utilisateur a choisi d'abandonner
                        
                        Réponse = MsgBox("Voulez-vous vraiment abandonner ?", vbQuestion + vbYesNo)
                        If Réponse = vbYes Then
                        MsgBox "Fin de la procédure ... au revoir"
                        Exit Sub
                        Else  ' dernière chance pour quand même choisir le partiel ou le complet

            ' c'est là que je ne sais pas comment revenir au choix initial où finalement
            ‘ l'utilisateur pourra choisir p ou t

                        End If
End Select

End Sub



Merci d’avance pour votre aide
 

Paritec

XLDnaute Barbatruc
Re : Dans select case, comment revenir sur alternatives abandonnées en 1er choix ?

bonjour Sebast le forum
Code:
Select Case Answer
1
            Case "p"
                    MsgBox "Je lance la procédure pour le traitement partiel"
                    ' ici code mais pas le sujet de ce fil ...
                    
            Case "t"
                    MsgBox "Je lance la procédure pour le traitement total"
                    ' ici code mais pas le sujet de ce fil ...
                    
            Case "a" ' l'utilisateur a choisi d'abandonner
                        
                        Réponse = MsgBox("Voulez-vous vraiment abandonner ?", vbQuestion + vbYesNo)
                        If Réponse = vbYes Then
                        MsgBox "Fin de la procédure ... au revoir"
                        Exit Sub
                        Else  ' dernière chance pour quand même choisir le partiel ou le complet

            goto 1

                        End If
End Select
 

Paritec

XLDnaute Barbatruc
Re : Dans select case, comment revenir sur alternatives abandonnées en 1er choix ?

re Sebast le forum
et si c'est vraiment le dernier choix possible, si tu es en option explicit rajoutes en haut de la macro
dim ok as boolean
Code:
Select Case Answer
1
            Case "p"
                    MsgBox "Je lance la procédure pour le traitement partiel"
                    ' ici code mais pas le sujet de ce fil ...
                    
            Case "t"
                    MsgBox "Je lance la procédure pour le traitement total"
                    ' ici code mais pas le sujet de ce fil ...
                    
            Case "a" ' l'utilisateur a choisi d'abandonner
                        
                        Réponse = MsgBox("Voulez-vous vraiment abandonner ?", vbQuestion + vbYesNo)
                        If Réponse = vbYes Then
                        MsgBox "Fin de la procédure ... au revoir"
                        Exit Sub
                        Else  ' dernière chance pour quand même choisir le partiel ou le complet

            if ok then exit sub else goto 1: ok=1

                        End If
End Select


EDIT Bonjour PierreJean
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : Dans select case, comment revenir sur alternatives abandonnées en 1er choix ?

Bonjour Sebast

Une suggestion (Merci le copier/coller)

Code:
 Do Until Answer = "p" Or Answer = "t"
                              Answer = Application.InputBox("Merci de donner votre réponse : p pour partiel, t pour total", Type:=2)
                           Loop
                           Select Case Answer
                             Case "p"
                                 MsgBox "Je lance la procédure pour le traitement partiel"
                                   ' ici code mais pas le sujet de ce fil ...
                              Case "t"
                                  MsgBox "Je lance la procédure pour le traitement total"
                                   ' ici code mais pas le sujet de ce fil ...
                            End Select

Edit Salut Paritec
 

Sebast

XLDnaute Impliqué
Re : Dans select case, comment revenir sur alternatives abandonnées en 1er choix ?

Bonjour Paritec, salut PierreJean,

merci pour vos propositions.
J'avais bien pensé à un embranchement goto mais je ne savais pas que ça existait en vba (héritage Cobol ?).
J'ai essayé les codes proposés mais, comme je ne connais vraiment pas (encore !) ces instructions goto, je ne sais pas ce qui coince (j'ai le message "erreur compilation, instructions et étiquettes incorrectes entre select case et premier case).

PierreJean : je ne vois pas comment l'utilisateur peut choisir d'abandonner avec le code proposé ?

Je suis tellement novice sur cette instruction que je n'arrive pas à l'adapter. Avez-vous lancé la procédure pour voir si elle marche ?

Merci d'avance
 

pierrejean

XLDnaute Barbatruc
Re : Dans select case, comment revenir sur alternatives abandonnées en 1er choix ?

Re

J'en était resté la:
dernière chance pour quand même choisir le partiel ou le complet

Code:
Sub Afficher()
Dim Answer As Variant
Dim Réponse As Byte
choix:
Do Until Answer = "p" Or Answer = "t" Or Answer = "a"
    Answer = Application.InputBox("Merci de donner votre réponse : p pour partiel, t pour total, a pour abandonner l'application", Type:=2)
Loop
Select Case Answer
            Case "p"
                    MsgBox "Je lance la procédure pour le traitement partiel"
                    ' ici code mais pas le sujet de ce fil ...
                    
            Case "t"
                    MsgBox "Je lance la procédure pour le traitement total"
                    ' ici code mais pas le sujet de ce fil ...
                    
            Case "a" ' l'utilisateur a choisi d'abandonner
                        
                        Réponse = MsgBox("Voulez-vous vraiment abandonner ?", vbQuestion + vbYesNo)
                        If Réponse = vbYes Then
                         MsgBox "Fin de la procédure ... au revoir"
                         Exit Sub
                        Else  ' dernière chance pour quand même choisir le partiel ou le complet
                         Answer = ""
                         GoTo choix
            ' c'est là que je ne sais pas comment revenir au choix initial où finalement
            ' l 'utilisateur pourra choisir p ou t
                           
                        End If
End Select


End Sub
 

pierrejean

XLDnaute Barbatruc
Re : Dans select case, comment revenir sur alternatives abandonnées en 1er choix ?

Re

@ Papou : Je plussoie vigoureusement !!!

Une version sans Goto

Code:
Sub Afficher_b()
Dim Answer As Variant
Dim Réponse As Byte
While Answer <> "p" And Answer <> "t" And Answer <> "a"
'Do Until Answer = "p" Or Answer = "t" Or Answer = "a"
    Answer = Application.InputBox("Merci de donner votre réponse : p pour partiel, t pour total, a pour abandonner l'application", Type:=2)
'Loop
 Select Case Answer
   Case "p"
       MsgBox "Je lance la procédure pour le traitement partiel"
                    ' ici code mais pas le sujet de ce fil ...
    Case "t"
        MsgBox "Je lance la procédure pour le traitement total"
                    ' ici code mais pas le sujet de ce fil ...
    Case "a" ' l'utilisateur a choisi d'abandonner
        Réponse = MsgBox("Voulez-vous vraiment abandonner ?", vbQuestion + vbYesNo)
        If Réponse = vbYes Then
          MsgBox "Fin de la procédure ... au revoir"
          Exit Sub
        Else  ' dernière chance pour quand même choisir le partiel ou le complet
          Answer = ""
        End If
 End Select
Wend
End Sub
 

Sebast

XLDnaute Impliqué
Re : Dans select case, comment revenir sur alternatives abandonnées en 1er choix ?

Re,

Paritec : je n'avais pas joint de fichier car il n'y a pas de données traitées, je pensais que c'était plus simple et moins lourd de copier mes lignes à coller dans un .xlsm chez soi (le code se suffit à lui-même).

PierreJean : merci beaucoup, l'un comme l'autre des codes fonctionne.
Puisque tu me proposes deux façons d'aborder la question, laquelle est à privilégier ?
La version goto me paraît plus lisible, l'autre moins intuitive mais c'est sûrement affaire de goût !

En revanche, je ne comprends pas pourquoi il faut mettre Answer à " ". Je pensais que par construction, cette variable ne pouvait prendre pour valeur que "p", "t" ou "a".


Un grand merci pour votre aide
 

Lian

XLDnaute Nouveau
Re : Dans select case, comment revenir sur alternatives abandonnées en 1er choix ?

Hello,

voici ma version vu entrement... :)
Code:
Sub Afficher()
Dim Answer As Variant
Dim Réponse As Byte
While Réponse <> vbYes
    Answer = Application.InputBox("Merci de donner votre réponse : p pour partiel, t pour total, a pour abandonner l'application", Type:=2)

   Réponse = Application.Run(Answer)
Wend
End Sub


Sub p()
MsgBox "Je lance la procédure pour le traitement partiel"
End Sub

Sub t()
MsgBox "Je lance la procédure pour le traitement total"
End Sub

Function a() As Integer
a = MsgBox("Voulez-vous vraiment abandonner ?", vbQuestion + vbYesNo)
End Function

Lian
 

pierrejean

XLDnaute Barbatruc
Re : Dans select case, comment revenir sur alternatives abandonnées en 1er choix ?

Re

c'est effectivement affaire de gout

Answer est effectivement limité a p t ou a en sortie de inputbox mais comme n'importe quelle variable peut prendre n'importe quelle valeur avant ou apres
Il faut le mettre a tout sauf a p ou t pour que le wend renvoie au while

@ Lian
Très élégant mais...
provoque un debug en cas d'annulation ou de fermeture de l'inputbox
 

Sebast

XLDnaute Impliqué
Re : Dans select case, comment revenir sur alternatives abandonnées en 1er choix ?

Bonjour Lian,

merci pour cette autre approche.
Le problème est qu'on ne sort pas de la boucle : si on choisit p par exemple, le traitement se fait mais on revient sur la boîte de dialogue qui propose le même choix.

En revanche, quand on choisit d'emblée d'abandonner, là on est bien redirigé vers la boîte adéquate.

J'ai essayé de changer des éléments du code mais je ne m'en sors pas. As-tu une idée ?
 

Lian

XLDnaute Nouveau
Re : Dans select case, comment revenir sur alternatives abandonnées en 1er choix ?

Hello,

voici une version qui plante pas et qui permet de sortir une fois p ou t choisi et traité :
On Error Resume Next
et
On Error GoTo 0
ne sont pas recommandés : ça empeche de la fonction appelée de planter, mais dans notre exemple ça passe...
Si tu veux implimenter les fonctions p et t pour d'autre traitement, il vaut mieux mettre à la place:
if Answer = "a" or "p" or "t" then
Réponse = Application.Run(Answer)
end if
Code:
Sub Afficher()
Dim Answer As Variant
Dim Réponse As Byte
While Réponse <> vbYes
  Answer = Application.InputBox("Merci de donner votre réponse : p pour partiel, t pour total, a pour abandonner l'application", Type:=2)
  On Error Resume Next
  Réponse = Application.Run(Answer)
  On Error GoTo 0
Wend
End Sub


Function p() As Byte
MsgBox "Je lance la procédure pour le traitement partiel"
p = vbYes
End Function

Function t() As Byte
MsgBox "Je lance la procédure pour le traitement total"
t = vbYes
End Function

Function a() As Byte
a = MsgBox("Voulez-vous vraiment abandonner ?", vbQuestion + vbYesNo)
End Function

Lian
 

Sebast

XLDnaute Impliqué
Re : Dans select case, comment revenir sur alternatives abandonnées en 1er choix ?

Lian,

merci pour ton code retouché. Ca marche mais je ne comprends pas pourquoi tu redoutes la gestion d'erreur ?
En tous cas, merci pour cette nouvelle approche.
 

Statistiques des forums

Discussions
312 492
Messages
2 088 938
Membres
103 988
dernier inscrit
Feonix