Revenir en arrière dans une boucle avec MsgBox
Résolu/Fermé
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
-
13 juil. 2015 à 14:47
Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 - 15 juil. 2015 à 08:50
Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 - 15 juil. 2015 à 08:50
A voir également:
- Revenir en arrière dans une boucle avec MsgBox
- Revenir en arrière clavier - Guide
- Arrière plan - Guide
- Revenir à la ligne dans une cellule excel mac - Guide
- Revenir à windows 10 - Guide
- Comment revenir en arrière sur pc ✓ - Forum Windows
2 réponses
PlacageGranby
Messages postés
393
Date d'inscription
mercredi 26 mars 2014
Statut
Membre
Dernière intervention
7 mars 2019
26
13 juil. 2015 à 15:08
13 juil. 2015 à 15:08
Bonjour,
Il n'est pas possible d'avoir un 4ieme bouton pour précédent sur le msgbox a moins d'importer un nouveau contrôle ce qui n'est pas nécessaire.
Donc, il faut ajouter un msgbox au code.
Je vois deux possibilité.
Soit on ajouter un msgbox pour confirmer notre choix pour retval et on force l'utilisateur à faire deux clic tout le temps jusqu'a temps que l'utilisateur se fâche et nous arrache la tête.
Soit on ajouter un msgbox dans la portion Cancel pour offrir deux choix.
Du genre, si on a fait oui et on voulait faire non, à la prochaine question on choisi cancel et il valide si on veut vraiment canceller ou plutôt remonter à la ligne précédente en trafiquant la valeur de notre variable I.
Il n'est pas possible d'avoir un 4ieme bouton pour précédent sur le msgbox a moins d'importer un nouveau contrôle ce qui n'est pas nécessaire.
Donc, il faut ajouter un msgbox au code.
Je vois deux possibilité.
Soit on ajouter un msgbox pour confirmer notre choix pour retval et on force l'utilisateur à faire deux clic tout le temps jusqu'a temps que l'utilisateur se fâche et nous arrache la tête.
Soit on ajouter un msgbox dans la portion Cancel pour offrir deux choix.
Du genre, si on a fait oui et on voulait faire non, à la prochaine question on choisi cancel et il valide si on veut vraiment canceller ou plutôt remonter à la ligne précédente en trafiquant la valeur de notre variable I.
If MsgBox("Voulez-vous vérifier la TVA sur les débits?", vbYesNo, "Vérif RAN TVA débits") = vbYes Then For I = 13 To DL If Sheets(1).Range("D" & I) = "RAN" Then Sheets(1).Range("B" & I).Select retval = MsgBox("La facture suivante (tiers : " & Range("B" & I) & " ) est-elle soummise à TVA sur les débits?", vbYesNoCancel, "Vérif TVA débits") If retval = vbYes Then Sheets(1).Range("N" & I) = Sheets(1).Range("K" & I) ElseIf retval = vbCancel Then if Msgbox("Faite ok pour revenir à la ligne précédente, ou cancel pour annuler", Vbokcancel, "Confirmer le choix") = VBok then I = i -2 Else Exit For End If End If End If Next I End If
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
61
13 juil. 2015 à 15:37
13 juil. 2015 à 15:37
Bonjour,
Merci pour ces informations et de vous être penché sur mon problème.
Cependant, le bouton annuler + OK me laisse sur la même ligne. Je ne reviens pas à la ligne d'avant. En gros, j'appellerais cette suite de MsgBox un événement. J'aurais voulu qu'on revienne à l'événement précédent.
Exemple: Avec votre code, excel me dit : "Voulez vous contrôler la TVA sur les débits", je répond oui, il sélectionne alors la première cellule de la colonne B pour qui D = RAN. Nouvelle MsgBox "La facture suivante (tiers : "X") est elle soumise à TVA sur les débits?", je répond oui, la cellule N & i se remplit. On passe alors à la cellule B & i suivante (Tiers Y). Mince, je m'étais trompé, je veux revenir au tiers X. Or, votre code reste le tiers Y.
Merci pour ces informations et de vous être penché sur mon problème.
Cependant, le bouton annuler + OK me laisse sur la même ligne. Je ne reviens pas à la ligne d'avant. En gros, j'appellerais cette suite de MsgBox un événement. J'aurais voulu qu'on revienne à l'événement précédent.
Exemple: Avec votre code, excel me dit : "Voulez vous contrôler la TVA sur les débits", je répond oui, il sélectionne alors la première cellule de la colonne B pour qui D = RAN. Nouvelle MsgBox "La facture suivante (tiers : "X") est elle soumise à TVA sur les débits?", je répond oui, la cellule N & i se remplit. On passe alors à la cellule B & i suivante (Tiers Y). Mince, je m'étais trompé, je veux revenir au tiers X. Or, votre code reste le tiers Y.
PlacageGranby
Messages postés
393
Date d'inscription
mercredi 26 mars 2014
Statut
Membre
Dernière intervention
7 mars 2019
26
13 juil. 2015 à 16:43
13 juil. 2015 à 16:43
Re-Bonjour,
On boucle sur les ligne à l'aide de la variable i
Donc, si ok choisi si on s'est trompé, on fait cancel lors de la cellule suivante, et il nous demande si on cancel, ou si c'est un "rollback", on choisi ok, et il change i pour revenir à la ligne précédente.
Si l'on veut réagir avant le changement de ligne, c'est ma solution #1.
Excel ne peut pas savoir qu'un erreur à été faite. Donc soit on trappe l'erreur avec le MSGbox existant, soit on rajoute un msgbox pour savoir s'il y a une erreur ou non.
Le msgbox de confirmation va être redondant lorsqu'il n'y a pas d'erreur soit 90% des cas.
Il y a même le risque que les employés s'habitue de cliquer deux fois rapidement pour passer les messages d'avertissement, et ce trop vite, ce qui ne corrige pas le problème
On boucle sur les ligne à l'aide de la variable i
Donc, si ok choisi si on s'est trompé, on fait cancel lors de la cellule suivante, et il nous demande si on cancel, ou si c'est un "rollback", on choisi ok, et il change i pour revenir à la ligne précédente.
Si l'on veut réagir avant le changement de ligne, c'est ma solution #1.
Excel ne peut pas savoir qu'un erreur à été faite. Donc soit on trappe l'erreur avec le MSGbox existant, soit on rajoute un msgbox pour savoir s'il y a une erreur ou non.
If MsgBox("Voulez-vous vérifier la TVA sur les débits?", vbYesNo, "Vérif RAN TVA débits") = vbYes Then For I = 13 To DL If Sheets(1).Range("D" & I) = "RAN" Then Sheets(1).Range("B" & I).Select retval = MsgBox("La facture suivante (tiers : " & Range("B" & I) & " ) est-elle soummise à TVA sur les débits?", vbYesNoCancel, "Vérif TVA débits") IF msgbox("Confirmer qu'il n'y a pas d'erreur",vbYesNo,"Message qui va tapper sur les nerfs") = vbYes then If retval = vbYes Then Sheets(1).Range("N" & I) = Sheets(1).Range("K" & I) ElseIf retval = vbCancel Then Exit For End If Else I = I -1 End If End If Next I End If
Le msgbox de confirmation va être redondant lorsqu'il n'y a pas d'erreur soit 90% des cas.
Il y a même le risque que les employés s'habitue de cliquer deux fois rapidement pour passer les messages d'avertissement, et ce trop vite, ce qui ne corrige pas le problème
PlacageGranby
Messages postés
393
Date d'inscription
mercredi 26 mars 2014
Statut
Membre
Dernière intervention
7 mars 2019
26
>
PlacageGranby
Messages postés
393
Date d'inscription
mercredi 26 mars 2014
Statut
Membre
Dernière intervention
7 mars 2019
13 juil. 2015 à 16:47
13 juil. 2015 à 16:47
Pour mettre mon autre exemple plus explicite pour l'utilisateur
If MsgBox("Voulez-vous vérifier la TVA sur les débits?", vbYesNo, "Vérif RAN TVA débits") = vbYes Then For I = 13 To DL If Sheets(1).Range("D" & I) = "RAN" Then Sheets(1).Range("B" & I).Select retval = MsgBox("La facture suivante (tiers : " & Range("B" & I) & " ) est-elle soummise à TVA sur les débits?", vbYesNoCancel, "Vérif TVA débits") If retval = vbYes Then Sheets(1).Range("N" & I) = Sheets(1).Range("K" & I) ElseIf retval = vbCancel Then if Msgbox("Faite ok pour revenir à la facture : (tiers : " & Range("B" & I-1) & " ) ou cancel pour annuler", Vbokcancel, "Confirmer le choix") = VBok then I = i -2 Else Exit For End If End If End If Next I End If
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
61
>
PlacageGranby
Messages postés
393
Date d'inscription
mercredi 26 mars 2014
Statut
Membre
Dernière intervention
7 mars 2019
13 juil. 2015 à 17:01
13 juil. 2015 à 17:01
Ok, merci des explications.
La seule chose c'est que si je répond "OK" à la fin pour revenir à la facture précédente, je n'y reviens pas. Je reste sur la même ligne.
Un autre problème est que le tiers en question n'est pas toujours sur "i-1", tout dépend de si "RAN" est en cellule D.
La seule chose c'est que si je répond "OK" à la fin pour revenir à la facture précédente, je n'y reviens pas. Je reste sur la même ligne.
Un autre problème est que le tiers en question n'est pas toujours sur "i-1", tout dépend de si "RAN" est en cellule D.
PlacageGranby
Messages postés
393
Date d'inscription
mercredi 26 mars 2014
Statut
Membre
Dernière intervention
7 mars 2019
26
Modifié par PlacageGranby le 13/07/2015 à 17:42
Modifié par PlacageGranby le 13/07/2015 à 17:42
Re-Re-Bonjour,
En effet, je n'avais pas pensé à la condition RAN en colonne D.
Pour que ca marche, il faudrait créé des variables pour se souvenir de la valeur précédente de i.
Quelque chose du genre devrait être fonctionnel.
J'ai aussi ajouter un elseif au cas ou on choisi "Non" pour la TVA, pour que l'on puisse aussi corriger ce "Non" au besoin
En effet, je n'avais pas pensé à la condition RAN en colonne D.
Pour que ca marche, il faudrait créé des variables pour se souvenir de la valeur précédente de i.
Dim Rollback as integer If MsgBox("Voulez-vous vérifier la TVA sur les débits?", vbYesNo, "Vérif RAN TVA débits") = vbYes Then For I = 13 To DL If Sheets(1).Range("D" & I) = "RAN" Then Sheets(1).Range("B" & I).Select retval = MsgBox("La facture suivante (tiers : " & Range("B" & I) & " ) est-elle soummise à TVA sur les débits?", vbYesNoCancel, "Vérif TVA débits") If retval = vbYes Then Sheets(1).Range("N" & I) = Sheets(1).Range("K" & I) Rollback = i Elseif retval = vbNo then Rollback = i ElseIf retval = vbCancel Then if Msgbox("Faite ok pour revenir à la facture : (tiers : " & Range("B" & Rollback) & " ) ou cancel pour annuler", Vbokcancel, "Confirmer le choix") = VBok then I = Rollback -1 Else Exit For End If End If End If Next I End If
Quelque chose du genre devrait être fonctionnel.
J'ai aussi ajouter un elseif au cas ou on choisi "Non" pour la TVA, pour que l'on puisse aussi corriger ce "Non" au besoin
Kuartz
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
61
>
PlacageGranby
Messages postés
393
Date d'inscription
mercredi 26 mars 2014
Statut
Membre
Dernière intervention
7 mars 2019
13 juil. 2015 à 18:00
13 juil. 2015 à 18:00
Absolument parfait ! Merci beaucoup ! Dernière petite question, si je voulais vraiment un 4eme bouton, quelle serait la marche à suivre?
Merci vraiment pour avoir résolu mon problème en tout cas.
Merci vraiment pour avoir résolu mon problème en tout cas.