OVH Cloud OVH Cloud

proc. événementielle

10 réponses
Avatar
isabelle
bonjour vous tous & toutes,

je voudrais éviter que les procédures (MiseÀJour et ComboBox1_Change) s'exécute avant la fin de la boucle de la
procédure CommandButton1_Click, j'ai oublié cette commande, je vous en pris éclairez moi.

Public lng
Sub MiseÀJour()
For i = 1 To 30
lng = ComboBox1.ListIndex + 2
With UserForm2.Controls("TextBox" & i)
.Value = Feuil2.Cells(lng, i)
End With
Next
End Sub

Private Sub ComboBox1_Change()
Call MiseÀJour
End Sub

Private Sub CommandButton1_Click() 'Enregistrer
For i = 1 To 30
Feuil2.Cells(lng, i) = UserForm2.Controls("TextBox" & i)
Next
Call MiseÀJour
End Sub

isabelle

10 réponses

Avatar
papou
Bonjour Isabelle
Application.enableevents = false
puis à la fin de la boucle tu remets à true
Cordialement
Pascal

"isabelle" a écrit dans le message de
news:
bonjour vous tous & toutes,

je voudrais éviter que les procédures (MiseÀJour et ComboBox1_Change)
s'exécute avant la fin de la boucle de la

procédure CommandButton1_Click, j'ai oublié cette commande, je vous en
pris éclairez moi.


Public lng
Sub MiseÀJour()
For i = 1 To 30
lng = ComboBox1.ListIndex + 2
With UserForm2.Controls("TextBox" & i)
.Value = Feuil2.Cells(lng, i)
End With
Next
End Sub

Private Sub ComboBox1_Change()
Call MiseÀJour
End Sub

Private Sub CommandButton1_Click() 'Enregistrer
For i = 1 To 30
Feuil2.Cells(lng, i) = UserForm2.Controls("TextBox" & i)
Next
Call MiseÀJour
End Sub

isabelle


Avatar
isabelle
merci Pascal pour ton aide, mais malheureusent ça ne fonctionne pas et j'ignore pourquoi.
pourtant je l'ai fait comme l'exemple tiré de l'aide, mais au premier tour de boucle l'exécution se dirige vers la
procédure Private Sub ComboBox1_Change()
____________________________________________________________________
Cet exemple montre comment désactiver des événements avant
l'enregistrement d'un fichier de telle sorte que l'événement
BeforeSave n'ait pas lieu.

Application.EnableEvents = False
ActiveWorkbook.Save
Application.EnableEvents = True
___________________________________________________________________
Private Sub CommandButton1_Click() 'Enregistrer
Application.EnableEvents = False
For i = 1 To 30
Feuil2.Cells(lng, i) = UserForm2.Controls("TextBox" & i)
Next
Application.EnableEvents = True
Call MiseÀJour
End Sub

isabelle


Bonjour Isabelle
Application.enableevents = false
puis à la fin de la boucle tu remets à true
Cordialement
Pascal

"isabelle" a écrit dans le message de
news:
bonjour vous tous & toutes,

je voudrais éviter que les procédures (MiseÀJour et ComboBox1_Change)
s'exécute avant la fin de la boucle de la

procédure CommandButton1_Click, j'ai oublié cette commande, je vous en
pris éclairez moi.


Public lng
Sub MiseÀJour()
For i = 1 To 30
lng = ComboBox1.ListIndex + 2
With UserForm2.Controls("TextBox" & i)
.Value = Feuil2.Cells(lng, i)
End With
Next
End Sub

Private Sub ComboBox1_Change()
Call MiseÀJour
End Sub

Private Sub CommandButton1_Click() 'Enregistrer
For i = 1 To 30
Feuil2.Cells(lng, i) = UserForm2.Controls("TextBox" & i)
Next
Call MiseÀJour
End Sub

isabelle




Avatar
papou
Isabelle
Y a t-il une raison pour que tu places les actions dans une procédure à part
plutôt que directement dans l'évènement Change de ta combo ?
Parce que sinon j'aurai suggéré de placer les actions directement dans ton
Private Sub ComboBox1_Change()
Cordialement
Pascal

"isabelle" a écrit dans le message de
news:
merci Pascal pour ton aide, mais malheureusent ça ne fonctionne pas et
j'ignore pourquoi.

pourtant je l'ai fait comme l'exemple tiré de l'aide, mais au premier tour
de boucle l'exécution se dirige vers la

procédure Private Sub ComboBox1_Change()
____________________________________________________________________
Cet exemple montre comment désactiver des événements avant
l'enregistrement d'un fichier de telle sorte que l'événement
BeforeSave n'ait pas lieu.

Application.EnableEvents = False
ActiveWorkbook.Save
Application.EnableEvents = True
___________________________________________________________________
Private Sub CommandButton1_Click() 'Enregistrer
Application.EnableEvents = False
For i = 1 To 30
Feuil2.Cells(lng, i) = UserForm2.Controls("TextBox" & i)
Next
Application.EnableEvents = True
Call MiseÀJour
End Sub

isabelle


Bonjour Isabelle
Application.enableevents = false
puis à la fin de la boucle tu remets à true
Cordialement
Pascal

"isabelle" a écrit dans le message de
news:
bonjour vous tous & toutes,

je voudrais éviter que les procédures (MiseÀJour et ComboBox1_Change)
s'exécute avant la fin de la boucle de la

procédure CommandButton1_Click, j'ai oublié cette commande, je vous en
pris éclairez moi.


Public lng
Sub MiseÀJour()
For i = 1 To 30
lng = ComboBox1.ListIndex + 2
With UserForm2.Controls("TextBox" & i)
.Value = Feuil2.Cells(lng, i)
End With
Next
End Sub

Private Sub ComboBox1_Change()
Call MiseÀJour
End Sub

Private Sub CommandButton1_Click() 'Enregistrer
For i = 1 To 30
Feuil2.Cells(lng, i) = UserForm2.Controls("TextBox" & i)
Next
Call MiseÀJour
End Sub

isabelle






Avatar
isabelle
oui, car la macro MiseÀJour doit s'exécuter sur les événements ComboBox1_Change et également sur CommandButton1_Click(),
mais une fois seulement que la boucle est complété et c'est là le problème,
pendant l'exécution de la boucle de CommandButton1_Click, après le premier "next" au lieu d'exécuter i = 2 l'exécution
est diriger vers ComboBox1_Change.

Private Sub CommandButton1_Click() 'Enregistrer
Application.EnableEvents = False
For i = 1 To 30
Feuil2.Cells(lng, i) = UserForm2.Controls("TextBox" & i)
Next
Application.EnableEvents = True
Call MiseÀJour
End Sub

Private Sub ComboBox1_Change()
Call MiseÀJour
End Sub

Sub MiseÀJour()
For i = 1 To 30
lng = ComboBox1.ListIndex + 1
With UserForm2.Controls("TextBox" & i)
.Value = Feuil2.Cells(lng, i)
End With
Next
End Sub

isabelle
Avatar
isabelle
re bonjour Pascal,

je n'ai toujours pas trouver la cause de ce problème, mais je suis parvenue à le contourner avec une variable.
dans ce classeur il y a une seule autre proc UserForm_Initialize et je ne crois pas quel soit en cause.
alors si un de vous connaissez l'explication à ce fait, surtout ne vous gêné pas.

Public lng
Public flg

Private Sub CommandButton1_Click() 'Enregistrer
flg = 1
Application.EnableEvents = False
For i = 1 To 31
Feuil2.Cells(lng, i) = UserForm2.Controls("TextBox" & i)
Next
Application.EnableEvents = True
flg = 0
Call MiseÀJour
End Sub

Private Sub ComboBox1_Change()
If flg = 1 Then GoTo fin
Call MiseÀJour
fin:
End Sub

Sub MiseÀJour()
If flg = 1 Then GoTo fin
For i = 1 To 31
lng = ComboBox1.ListIndex + 1
With UserForm2.Controls("TextBox" & i)
.Value = Feuil2.Cells(lng, i)
End With
Next
fin:
End Sub

isabelle


Isabelle
Y a t-il une raison pour que tu places les actions dans une procédure à part
plutôt que directement dans l'évènement Change de ta combo ?
Parce que sinon j'aurai suggéré de placer les actions directement dans ton
Private Sub ComboBox1_Change()
Cordialement
Pascal

"isabelle" a écrit dans le message de
news:
merci Pascal pour ton aide, mais malheureusent ça ne fonctionne pas et
j'ignore pourquoi.

pourtant je l'ai fait comme l'exemple tiré de l'aide, mais au premier tour
de boucle l'exécution se dirige vers la

procédure Private Sub ComboBox1_Change()
____________________________________________________________________
Cet exemple montre comment désactiver des événements avant
l'enregistrement d'un fichier de telle sorte que l'événement
BeforeSave n'ait pas lieu.

Application.EnableEvents = False
ActiveWorkbook.Save
Application.EnableEvents = True
___________________________________________________________________
Private Sub CommandButton1_Click() 'Enregistrer
Application.EnableEvents = False
For i = 1 To 30
Feuil2.Cells(lng, i) = UserForm2.Controls("TextBox" & i)
Next
Application.EnableEvents = True
Call MiseÀJour
End Sub

isabelle


Bonjour Isabelle
Application.enableevents = false
puis à la fin de la boucle tu remets à true
Cordialement
Pascal

"isabelle" a écrit dans le message de
news:
bonjour vous tous & toutes,

je voudrais éviter que les procédures (MiseÀJour et ComboBox1_Change)
s'exécute avant la fin de la boucle de la

procédure CommandButton1_Click, j'ai oublié cette commande, je vous en
pris éclairez moi.


Public lng
Sub MiseÀJour()
For i = 1 To 30
lng = ComboBox1.ListIndex + 2
With UserForm2.Controls("TextBox" & i)
.Value = Feuil2.Cells(lng, i)
End With
Next
End Sub

Private Sub ComboBox1_Change()
Call MiseÀJour
End Sub

Private Sub CommandButton1_Click() 'Enregistrer
For i = 1 To 30
Feuil2.Cells(lng, i) = UserForm2.Controls("TextBox" & i)
Next
Call MiseÀJour
End Sub

isabelle








Avatar
Michel Pierron
Bonjour Isabelle;
AMHA, ta méthode est bonne; il suffit d'inhiber la procédure évènementielle
ComboBox1_Change avec un flag.
Public lng, iFlag As Boolean

Sub MiseÀJour()
For i = 1 To 30
lng = ComboBox1.ListIndex + 2
With UserForm2.Controls("TextBox" & i)
.Value = Feuil2.Cells(lng, i)
End With
Next
iFlag = False
End Sub

Private Sub ComboBox1_Change()
If Not iFlag Then Call MiseÀJour
End Sub

Private Sub CommandButton1_Click() 'Enregistrer
iFlag = True
For i = 1 To 30
Feuil2.Cells(lng, i) = UserForm2.Controls("TextBox" & i)
Next
Call MiseÀJour
End Sub

MP

"isabelle" a écrit dans le message de
news:
re bonjour Pascal,

je n'ai toujours pas trouver la cause de ce problème, mais je suis
parvenue à le contourner avec une variable.

dans ce classeur il y a une seule autre proc UserForm_Initialize et je ne
crois pas quel soit en cause.

alors si un de vous connaissez l'explication à ce fait, surtout ne vous
gêné pas.


Public lng
Public flg

Private Sub CommandButton1_Click() 'Enregistrer
flg = 1
Application.EnableEvents = False
For i = 1 To 31
Feuil2.Cells(lng, i) = UserForm2.Controls("TextBox" & i)
Next
Application.EnableEvents = True
flg = 0
Call MiseÀJour
End Sub

Private Sub ComboBox1_Change()
If flg = 1 Then GoTo fin
Call MiseÀJour
fin:
End Sub

Sub MiseÀJour()
If flg = 1 Then GoTo fin
For i = 1 To 31
lng = ComboBox1.ListIndex + 1
With UserForm2.Controls("TextBox" & i)
.Value = Feuil2.Cells(lng, i)
End With
Next
fin:
End Sub

isabelle


Isabelle
Y a t-il une raison pour que tu places les actions dans une procédure à
part


plutôt que directement dans l'évènement Change de ta combo ?
Parce que sinon j'aurai suggéré de placer les actions directement dans
ton


Private Sub ComboBox1_Change()
Cordialement
Pascal

"isabelle" a écrit dans le message de
news:
merci Pascal pour ton aide, mais malheureusent ça ne fonctionne pas et
j'ignore pourquoi.

pourtant je l'ai fait comme l'exemple tiré de l'aide, mais au premier
tour



de boucle l'exécution se dirige vers la
procédure Private Sub ComboBox1_Change()
____________________________________________________________________
Cet exemple montre comment désactiver des événements avant
l'enregistrement d'un fichier de telle sorte que l'événement
BeforeSave n'ait pas lieu.

Application.EnableEvents = False
ActiveWorkbook.Save
Application.EnableEvents = True
___________________________________________________________________
Private Sub CommandButton1_Click() 'Enregistrer
Application.EnableEvents = False
For i = 1 To 30
Feuil2.Cells(lng, i) = UserForm2.Controls("TextBox" & i)
Next
Application.EnableEvents = True
Call MiseÀJour
End Sub

isabelle


Bonjour Isabelle
Application.enableevents = false
puis à la fin de la boucle tu remets à true
Cordialement
Pascal

"isabelle" a écrit dans le message de
news:
bonjour vous tous & toutes,

je voudrais éviter que les procédures (MiseÀJour et
ComboBox1_Change)





s'exécute avant la fin de la boucle de la
procédure CommandButton1_Click, j'ai oublié cette commande, je
vous en





pris éclairez moi.

Public lng
Sub MiseÀJour()
For i = 1 To 30
lng = ComboBox1.ListIndex + 2
With UserForm2.Controls("TextBox" & i)
.Value = Feuil2.Cells(lng, i)
End With
Next
End Sub

Private Sub ComboBox1_Change()
Call MiseÀJour
End Sub

Private Sub CommandButton1_Click() 'Enregistrer
For i = 1 To 30
Feuil2.Cells(lng, i) = UserForm2.Controls("TextBox" & i)
Next
Call MiseÀJour
End Sub

isabelle










Avatar
Alain CROS
Bonjour.

AMHA la commande Application.EnableEvents = False inhibe les événements de l'application mais pas ceux des ActiveX et il n'existe
pas de commande ActiveX.EnableEvents = False.

Pour s'en convaincre :

Sur Feuil1, 1 CommandButton nommé CommandButton1, avec ce code:

Private Sub CommandButton1_Click()
UserForm1.Show
End Sub

1 UserForm, nommé UserForm1 comprenant 1 CommandButton nommé CommandButton1, avec ce code :

Private Sub CommandButton1_Click()
MsgBox Application.EnableEvents
Application.EnableEvents = Not (Application.EnableEvents)
End Sub

Private Sub UserForm_Initialize()
Application.EnableEvents = False
End Sub

Private Sub UserForm_Terminate()
Application.EnableEvents = True
End Sub

Alain CROS


"isabelle" a écrit dans le message de news:
re bonjour Pascal,

je n'ai toujours pas trouver la cause de ce problème, mais je suis parvenue à le contourner avec une variable.
dans ce classeur il y a une seule autre proc UserForm_Initialize et je ne crois pas quel soit en cause.
alors si un de vous connaissez l'explication à ce fait, surtout ne vous gêné pas.


Avatar
michdenis
Bonjour Isabelle, Michel,

Ma question : Pourquoi utiliser la procédure combobox1_Change pour l'inhiber ? Si tu la supprimes, tu vas obtenir l'effet
désiré ... l'utilisation du bouton de commande pour faire les mises à jour !!! Non ?


Salutations!



"Michel Pierron" a écrit dans le message de news:%
Bonjour Isabelle;
AMHA, ta méthode est bonne; il suffit d'inhiber la procédure évènementielle
ComboBox1_Change avec un flag.
Public lng, iFlag As Boolean

Sub MiseÀJour()
For i = 1 To 30
lng = ComboBox1.ListIndex + 2
With UserForm2.Controls("TextBox" & i)
.Value = Feuil2.Cells(lng, i)
End With
Next
iFlag = False
End Sub

Private Sub ComboBox1_Change()
If Not iFlag Then Call MiseÀJour
End Sub

Private Sub CommandButton1_Click() 'Enregistrer
iFlag = True
For i = 1 To 30
Feuil2.Cells(lng, i) = UserForm2.Controls("TextBox" & i)
Next
Call MiseÀJour
End Sub

MP

"isabelle" a écrit dans le message de
news:
re bonjour Pascal,

je n'ai toujours pas trouver la cause de ce problème, mais je suis
parvenue à le contourner avec une variable.

dans ce classeur il y a une seule autre proc UserForm_Initialize et je ne
crois pas quel soit en cause.

alors si un de vous connaissez l'explication à ce fait, surtout ne vous
gêné pas.


Public lng
Public flg

Private Sub CommandButton1_Click() 'Enregistrer
flg = 1
Application.EnableEvents = False
For i = 1 To 31
Feuil2.Cells(lng, i) = UserForm2.Controls("TextBox" & i)
Next
Application.EnableEvents = True
flg = 0
Call MiseÀJour
End Sub

Private Sub ComboBox1_Change()
If flg = 1 Then GoTo fin
Call MiseÀJour
fin:
End Sub

Sub MiseÀJour()
If flg = 1 Then GoTo fin
For i = 1 To 31
lng = ComboBox1.ListIndex + 1
With UserForm2.Controls("TextBox" & i)
.Value = Feuil2.Cells(lng, i)
End With
Next
fin:
End Sub

isabelle


Isabelle
Y a t-il une raison pour que tu places les actions dans une procédure à
part


plutôt que directement dans l'évènement Change de ta combo ?
Parce que sinon j'aurai suggéré de placer les actions directement dans
ton


Private Sub ComboBox1_Change()
Cordialement
Pascal

"isabelle" a écrit dans le message de
news:
merci Pascal pour ton aide, mais malheureusent ça ne fonctionne pas et
j'ignore pourquoi.

pourtant je l'ai fait comme l'exemple tiré de l'aide, mais au premier
tour



de boucle l'exécution se dirige vers la
procédure Private Sub ComboBox1_Change()
____________________________________________________________________
Cet exemple montre comment désactiver des événements avant
l'enregistrement d'un fichier de telle sorte que l'événement
BeforeSave n'ait pas lieu.

Application.EnableEvents = False
ActiveWorkbook.Save
Application.EnableEvents = True
___________________________________________________________________
Private Sub CommandButton1_Click() 'Enregistrer
Application.EnableEvents = False
For i = 1 To 30
Feuil2.Cells(lng, i) = UserForm2.Controls("TextBox" & i)
Next
Application.EnableEvents = True
Call MiseÀJour
End Sub

isabelle


Bonjour Isabelle
Application.enableevents = false
puis à la fin de la boucle tu remets à true
Cordialement
Pascal

"isabelle" a écrit dans le message de
news:
bonjour vous tous & toutes,

je voudrais éviter que les procédures (MiseÀJour et
ComboBox1_Change)





s'exécute avant la fin de la boucle de la
procédure CommandButton1_Click, j'ai oublié cette commande, je
vous en





pris éclairez moi.

Public lng
Sub MiseÀJour()
For i = 1 To 30
lng = ComboBox1.ListIndex + 2
With UserForm2.Controls("TextBox" & i)
.Value = Feuil2.Cells(lng, i)
End With
Next
End Sub

Private Sub ComboBox1_Change()
Call MiseÀJour
End Sub

Private Sub CommandButton1_Click() 'Enregistrer
For i = 1 To 30
Feuil2.Cells(lng, i) = UserForm2.Controls("TextBox" & i)
Next
Call MiseÀJour
End Sub

isabelle










Avatar
michdenis
Bonjour Alain et tout le monde,

Je suis d'accord avec toi.

Et pour s'en convaincre, on peut utiliser l'explorateur d'objet de la fenêtre VBE (visual basic editor).
Si on fait une recherche de l'expression "EnableEvents" et que l'on sélectionne diverses bibliothèques dans la liste
déroulante des bibliothèques...on va rapidement s'apercevoir que "EnableEvents" est défini dans la bibliothèque "Excel" et
non "MsForms".


Salutations!





"Alain CROS" a écrit dans le message de news:
Bonjour.

AMHA la commande Application.EnableEvents = False inhibe les événements de l'application mais pas ceux des ActiveX et il
n'existe
pas de commande ActiveX.EnableEvents = False.

Pour s'en convaincre :

Sur Feuil1, 1 CommandButton nommé CommandButton1, avec ce code:

Private Sub CommandButton1_Click()
UserForm1.Show
End Sub

1 UserForm, nommé UserForm1 comprenant 1 CommandButton nommé CommandButton1, avec ce code :

Private Sub CommandButton1_Click()
MsgBox Application.EnableEvents
Application.EnableEvents = Not (Application.EnableEvents)
End Sub

Private Sub UserForm_Initialize()
Application.EnableEvents = False
End Sub

Private Sub UserForm_Terminate()
Application.EnableEvents = True
End Sub

Alain CROS


"isabelle" a écrit dans le message de news:
re bonjour Pascal,

je n'ai toujours pas trouver la cause de ce problème, mais je suis parvenue à le contourner avec une variable.
dans ce classeur il y a une seule autre proc UserForm_Initialize et je ne crois pas quel soit en cause.
alors si un de vous connaissez l'explication à ce fait, surtout ne vous gêné pas.


Avatar
isabelle
un gros merci Michel Denis et Alain,

vous avez parfaitement raison, c'est bien dans la bibli. d'excel et non de MSForm, je suis maintenant rassurer pour
l'utilisation du flag.

big bisou***
isabelle



Bonjour Alain et tout le monde,

Je suis d'accord avec toi.

Et pour s'en convaincre, on peut utiliser l'explorateur d'objet de la fenêtre VBE (visual basic editor).
Si on fait une recherche de l'expression "EnableEvents" et que l'on sélectionne diverses bibliothèques dans la liste
déroulante des bibliothèques...on va rapidement s'apercevoir que "EnableEvents" est défini dans la bibliothèque "Excel" et
non "MsForms".

Salutations!

"Alain CROS" a écrit dans le message de news:
Bonjour.

AMHA la commande Application.EnableEvents = False inhibe les événements de l'application mais pas ceux des ActiveX et il
n'existe
pas de commande ActiveX.EnableEvents = False.

Pour s'en convaincre :

Sur Feuil1, 1 CommandButton nommé CommandButton1, avec ce code:

Private Sub CommandButton1_Click()
UserForm1.Show
End Sub

1 UserForm, nommé UserForm1 comprenant 1 CommandButton nommé CommandButton1, avec ce code :

Private Sub CommandButton1_Click()
MsgBox Application.EnableEvents
Application.EnableEvents = Not (Application.EnableEvents)
End Sub

Private Sub UserForm_Initialize()
Application.EnableEvents = False
End Sub

Private Sub UserForm_Terminate()
Application.EnableEvents = True
End Sub

Alain CROS

"isabelle" a écrit dans le message de news:
re bonjour Pascal,

je n'ai toujours pas trouver la cause de ce problème, mais je suis parvenue à le contourner avec une variable.
dans ce classeur il y a une seule autre proc UserForm_Initialize et je ne crois pas quel soit en cause.
alors si un de vous connaissez l'explication à ce fait, surtout ne vous gêné pas.