(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.
 

Pierrot93

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

Bonjour,

modifie peut être comme suit :
Code:
Private Sub Worksheet_Activate()
Application.EnableEvents = False
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 = True
         
End Sub

bonne journée
@+
 

mutzik

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

bonjour Doktor, Salut Pierrot,

je crois savoir que Selection est un mot réservé en VBA et que ce n'est pas une bonne chose que de les utiliser
mieux vaut utiliser une variable comme rep pour réponse ou autre chose
 

Pierrot93

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

Re,
Bonjour Bertrand:)
dans un module standard tu déclares la variable :
Code:
Option Explicit
Public b As Boolean

ensuite dans le module de la feuille :
Code:
Private Sub Worksheet_Activate()
 if b then exit sub
b = True
 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
      
 End Sub

edition : tiens compte également de la remarque de Bertrand
 

PMO2

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

Bonjour,

Essayez avec votre code modifié
Code:
Private Sub Worksheet_Activate()
Dim Reponse
'---
Application.EnableEvents = False
Range("C51").Select
Reponse = MsgBox("Avez-vous saisi le nombre de semaines travaillées ce mois?", vbYesNo)
Select Case Reponse
  Case vbYes
    MsgBox ("Ok")
  Case vbNo
  
    '////////////////////////////////////////////////////////////////
    '/// La boucle Do Loop sert à borner le nombre de semaines.
    '/// Si <1 ou >52 on refait la demande.
    '/// Si ce test n'est pas nécessaire, retirez les instructions :
    '/// Do
    '/// Loop Until Reponse > 0 And Reponse < 53
    '////////////////////////////////////////////////////////////////
    Do
      Reponse = Application.InputBox(prompt:="Saisissez-le :", Title:="Nombre de semaines", Type:=1)
    Loop Until Reponse > 0 And Reponse < 53
    
    
    Range("C51") = Reponse
End Select
Application.EnableEvents = True
End Sub
 

Doktor

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

@Pierrot93 : J'ai essayé ton code. Le problème est le même que mon code. En fait, il ne rajoute pas +2, c'est juste qu'il veut absolument afficher "6" en C51. Quand je réponds "non" à la première msgbox, que je saisis admettons "4" dans l'inputbox, tout va bien. Par contre, à partir du moment ou je choisis "oui" dans la 1ère msgbox, alors automatiquement à l'apparition de "ok", C51 passe à 6 ... Quand il est déjà à 6, il ne bouge plus même avec un "oui".

@PM02 : Bonjour,

Ton code fonctionne, hourra ! J'ai modifié la boucle loop afin de borner le nombre de semaine à 5 maximum (ce qui résout mon problème du "6" intempestif décrit au-dessus. Sinon, c'est nickel. Merci beaucoup.
Mais du coup, à quoi te sert le "application.enableevents" en début et en fin de code?
 

Doktor

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

Re,

regarde dans l'aide vba, tu y trouveras ceci :

Aaaaaaaaah ! Et donc, forcément, si tu mets

Code:
Selection=MsgBox(...)

quand tu répondras vbYes, Excel renverra la valeur de vbYes dans la Selection, c'est ça?
Donc le but est de contourner le problème par quelque chose comme ça :

Code:
Option Explicit
Public b As Boolean
Private Sub Worksheet_Activate()
Dim Réponse As Integer
 If b Then Exit Sub
b = True
Range("C51").Select
    Réponse = MsgBox("Avez-vous saisi le nombre de semaines travaillées ce mois?", vbYesNo)
      Select Case Réponse
          Case vbYes
          MsgBox ("Ok")
          Case vbNo
          Selection = InputBox("Saisissez-le :", "Nombre de semaines")
      End Select
 End Sub

La variable "réponse" permet donc ici de dissocier la Selection et la MsgBox en cas de réponse "oui" en quelque sorte et de ne pas renvoyer 6. C'est ça?
 

PMO2

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

Mais du coup, à quoi te sert le "application.enableevents" en début et en fin de code?
Cela sert à désactiver la gestion des autres événements et à empêcher leur traitement PUIS à réactiver la gestion des événements.

Dans le cas actuel et comme il n'y a pas d'autres événements prévus, cela est superflu mais c'est une bonne habitude à prendre. Par la suite, si on programme d'autres événements, on n'aura plus à se préoccuper de cet événement particulier.
 

Discussions similaires

Réponses
8
Affichages
527

Statistiques des forums

Discussions
312 428
Messages
2 088 347
Membres
103 821
dernier inscrit
Lorient56