XL 2019 suspendre l'execution Change() tout en modifiant le combobox

SPGoder

XLDnaute Occasionnel
Bonjour
C'est certainement une idée tordue, mais dans l'instruction suivant, quand le combobox1 reçoit une valeur, la macro se relance au début (normal puisque le combobox a alors changé)
Ma question, peut t on l’empêcher et qu'il modifie quand même la valeur de combobox1 et continue le code
J’espère avoir été assez clair dans l'explication
Je m'attends a une réponse : mauvaise utilisation, ou il y a moyen de faire autrement, et je n'en doute pas, mais cette question me taraude quand même
VB:
 Private Sub ComboBox1_Change()
......
code
........
ComboBox1 = Ws.Cells(Ligne, "G")
.......
code
.........
end sub
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir SPGoder,
On peut suspendre les événements par :
Application.EnableEvents = False
et les réactiver par :
Application.EnableEvents = True

Surtout ne pas oublier la réactivation sinon tout est bloqué. Faire en sorte que la suspension soit la plus courte possible.
VB:
Private Sub ComboBox1_Change()
......
code
........
Application.EnableEvents=False
ComboBox1 = Ws.Cells(Ligne, "G")
Application.EnableEvents=True
.......
code
.........
end sub
 

youky(BJ)

XLDnaute Barbatruc
Bonjour Sylvanu, et à tous,
Application.enabledevents ne fonctionne pas sur un combobox
Perso je mets en haut du module
Public kit As Boolean
et ensuite
Private Sub ComboBox1_Change()
if kit=true then exit sub
kit=true
'le code qui modifie
kit=false

Bruno
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonsoir @SPGoder , @sylvanu , @youky(BJ) , le Forum

Pour moi mettre l'alimentation d'une ComboBox dans l'évènement Change de cette dernière est un simple non-sence ! Un serpent qui se mort la queue, une boucle sans fin, la génération d'un trou noir !!!

Tu vas rejoindre le côté sombre de la force comme ça !! LoL

Bonne continuation
@+Thierry
 

patricktoulon

XLDnaute Barbatruc
re
bonjour a tous

ComboBox1 = Ws.Cells(Ligne, "G")

je me pose une question
est ce que Ws.Cells(Ligne, "G") ne fait pas déjà partie de la liste

au quel cas pas besoins de variable intermédiaire("kit" exemple de @youky(BJ))
et application.enableevents n'a rien avoir la dedans
non tout simplement gérer l'event dans if .listindex si l'item existe dans la liste

si il n'existe pas


tout simplement

VB:
Private Sub ComboBox1_Change()
 with combobox1
  if .value<> Ws.Cells(Ligne, "G") then
  'faire ceci  blablabla
  .value= Ws.Cells(Ligne, "G")
  else'
  'faire cela'blablabla
  end if
 end with
end sub
;)
 

SPGoder

XLDnaute Occasionnel
Merci de vos réponse à tous,
Effectivement, Application.enabledevents ne fonctionne pas sur un combobox
Dans le cas présent, l'item n'existera pas car rempli avec la concaténation de 2 cellules, (nom et prénom) pour n'enregistrer que le nom dans le combobox

Tu vas rejoindre le côté sombre de la force comme ça !! LoL
c'est déjà fait...:D
 

SPGoder

XLDnaute Occasionnel
VB:
Public kit As Boolean

Private Sub ComboBox1_Change()

.......code

If kit = True Then Exit Sub
        kit = True
        ComboBox1 = Ws.Cells(Ligne, "G")
        kit = False
....... code

Ne fonctionne pas non plus, retourne au début : change()
 
Dernière édition:

SPGoder

XLDnaute Occasionnel
re
Je l'ai bien évidement lu et étudié, mais pas testé
car tu suggérai que
est ce que Ws.Cells(Ligne, "G") ne fait pas déjà partie de la liste

au quel cas pas besoins de variable intermédiaire("kit" exemple de @youky(BJ))
et application.enableevents n'a rien avoir la dedans
non tout simplement gérer l'event dans if .listindex si l'item existe dans la liste

si il n'existe pas

Alors que
Dans le cas présent, l'item n'existera pas car rempli avec la concaténation de 2 cellules, (nom et prénom) pour n'enregistrer que le nom dans le combobox

D'ou ma demande de pouvoir remplir le combobox malgré le change()
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Ca y est il est tombé du côté obscure en plus en s'inspirant de moi !!!

1594667485835.png


LoL @+Thierry
 

Statistiques des forums

Discussions
312 317
Messages
2 087 189
Membres
103 493
dernier inscrit
Vidal Salvador