Revenir en arrière dans une boucle avec MsgBox
Résolu
Kuartz
Messages postés
852
Date d'inscription
Statut
Membre
Dernière intervention
-
Kuartz Messages postés 852 Date d'inscription Statut Membre Dernière intervention -
Kuartz Messages postés 852 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous.
Je vous explique ce que je souhaiterais faire.
Dans un premier temps voici mon code original :
(Les variables ont été définies avant et tout marche correctement, le code est très long en entier)
Voilà donc ce code me permet, après avoir répondu "oui" à la première MsgBox, de sélectionner une à une les cellules de la colonne B qui répondent à la condition "D = RAN" puis de remplir mon tableau petit à petit en fonction de ma réponse "OUI ou NON".
Ce que je souhaiterais c'est avoir un bouton supplémentaire ("LIGNE PRECEDENTE") qui pourrait me ramener à la ligne d'avant répondant à la condition "D = RAN". En fait le problème est que les gens cliquent trop vite et font une erreur et je me suis rendu compte qu'on ne pouvait pas revenir à la ligne précédente pour rerépondre à la question de la MsgBox "RetVal". Pensez-vous que cela est possible?
Merci d'avance.
Cordialement.
Je vous explique ce que je souhaiterais faire.
Dans un premier temps voici mon code original :
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 Exit For End If End If Next I End If
(Les variables ont été définies avant et tout marche correctement, le code est très long en entier)
Voilà donc ce code me permet, après avoir répondu "oui" à la première MsgBox, de sélectionner une à une les cellules de la colonne B qui répondent à la condition "D = RAN" puis de remplir mon tableau petit à petit en fonction de ma réponse "OUI ou NON".
Ce que je souhaiterais c'est avoir un bouton supplémentaire ("LIGNE PRECEDENTE") qui pourrait me ramener à la ligne d'avant répondant à la condition "D = RAN". En fait le problème est que les gens cliquent trop vite et font une erreur et je me suis rendu compte qu'on ne pouvait pas revenir à la ligne précédente pour rerépondre à la question de la MsgBox "RetVal". Pensez-vous que cela est possible?
Merci d'avance.
Cordialement.
A voir également:
- Revenir en arrière dans une boucle avec MsgBox
- Comment revenir en arriere sur page - Forum iPhone
- Comment revenir en arrière sur pc ✓ - Forum Windows
- Youtube en arrière plan - Guide
- Comment revenir en arrière sur page mac - Forum MacOS
- Revenir à la ligne dans une cellule excel mac - Guide
2 réponses
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
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.
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
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
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