(VBA) InputBox : comportement étrange

Doktor

XLDnaute Nouveau
Bonjour à tous,

J'ai créé mon premier code VBA afin de rappeler à l'utilisateur d'un fichier Excel qu'il doit remplir une cellule en particulier (C51) afin que tous les calculs de la feuille fonctionnent correctement. :)


Code:
Option Explicit

Private Sub Worksheet_Activate()

Range("C51").Select
    Selection = MsgBox("Avez-vous saisi le nombre de semaines travaillées ce mois?", vbYesNo)
    Select Case Selection
        Case vbYes
        MsgBox ("Ok")
        Case vbNo
        Selection = InputBox("Saisissez-le :", "Nombre de semaines")
    End Select
Application.EnableEvents = False
        
End Sub

Pour résumer :

1) L'utilisateur ouvre le feuillet
2) Il se retrouve à l'ouverture devant la msgbox "Avez-vous saisi le nombre de semaines travaillées ce mois?"
a) Il répond oui : une msgbox "ok" s'affiche et c'est tout
b) Il répond non : une inputbox s'affiche lui demandant de saisir le nombre de semaines
3) Le nombre de semaines est automatiquement saisi en C51

Mon problème est le suivant : Lorsque l'utilisateur clique sur "oui" et la msgbox "ok" s'affiche, le compteur actuel de semaines en C51 est automatiquement augmenté de 2. :eek: :confused:

Comment y remédier? Je veux que le compteur actuel reste le même qu'il est si l'utilisateur l'a déjà saisi lors d'une précédente ouverture du fichier.

Merci à tous.
 

Doktor

XLDnaute Nouveau
Re : (VBA) InputBox : comportement étrange

Ok, je comprends mieux maintenant.
Dernières questions : peux-tu m'expliquer le rôle de la variable "b" dans ce code?

On déclare une variable booléenne qui, dès qu'elle a comme valeur "true", exécute la condition?
Par exemple, ici,

Code:
If b Then Exit Sub

veut dire : "Si l'on trouve "b" dans le code, alors on quitte la procédure dès qu'elle se termine"? Le b=true fait donc "apparaître" ce "b" et valide la condition?

Aussi, pourquoi ne trouve-t-on pas de "End If" s'il y a un "If" dans

Code:
If b Then Exit Sub
?
 

Pierrot93

XLDnaute Barbatruc
Re : (VBA) InputBox : comportement étrange

Re,

Aussi, pourquoi ne trouve-t-on pas de "End If" s'il y a un "If" dans

si ce qui suit le "then" est sur la même ligne pas besoin de "end if"...

la variable booléenne permet de vérifier si nous sommes déjà passé dans la procédure, si c'est le cas on sort, sinon l'instruction suivante la positionne à TRUE et l'on continue l'execution du code.... au prochain passage on sortira du code...
 

Discussions similaires

Réponses
8
Affichages
527

Statistiques des forums

Discussions
312 428
Messages
2 088 332
Membres
103 816
dernier inscrit
vladmir