Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

UserForm - Combobox Change - Ne pas éxcuter un évenement

10 réponses
Avatar
Alex
Bonjour =E0 tous,

Je viens =E0 vous, car je rencontre un probl=E8me sur le param=E9trage d'un
UserForm, permettant d'une part d'enregistrer des donn=E9es sur une
feuille "BASE DE DONNEES" , et d'autre part, toujours par le m=EAme
UserForm, de consulter et Modifier cette feuille "BASE DE DONNEES".
Ce fichier permet =E0 chacun, d'enregistrer son temps de travail sur un
dossier d'immeuble, pour que l'on puisse par la suite, effectuer une
facturation pour chaque Immeuble.
Le Userform contient une ComboBox, par laquelle on peut choisir un
Immeuble, au choix de l'immeuble, celle-ci alimente des textbox li=E9es
au choix d'immeuble. j'ai donc effectu=E9 ceci :

Sur Userform_Activate :
--------------------------------

'Nom de la ComboBox =3D IMM


Private Sub UserForm_Activate()
DernierAlex =3D Range("Deroulant!A1").End(xlDown).Address
IMM.RowSource =3D "Deroulant!A1:" & DernierAlex
IMM.ListIndex =3D 0
End Sub

Sur Combobox Immeuble (IMM):
----------------------------------------------


Private Sub IMM_Change()

'Mise en m=E9moire de l'immeuble et Rech St=E9 Prop et Affichage
'--------------------------------------------------------------------------=
-------------------
IndexAlex =3D IMM.ListIndex
Alex =3D IMM.List(IndexAlex)
DernierPROP =3D Range("Deroulant!B1").End(xlDown).Address
PROP.Value =3D WorksheetFunction.VLookup(Alex, Range("Deroulant!A1:" &
DernierPROP), 2, False)

Jusque l=E0 tout fonctionne tr=E8s bien. Apr=E8s j'ai un bouton de
validation, qui alimente la feuille "BASE DE DONNEES".

Le probl=E8me se corse, lorsque je Clique sur le Bouton
"Consultation" (Sub RemplirForm) me permettant d'alimenter le
UserForm, en reprenant les donnees de ma feuille "BASE DE
DONNEES" (au d=E9part, je me positionne sur la 1ere ligne de la base de
donnees et consultation ligne par ligne bien =E9videment).

L'ensemble des TextBoxs s'alimente correctement, sauf une, la combobox
IMM.

En effet, lorsqu'on arrive =E0 ma ligne de combobox IMM, demandant de
mettre la valeur de la cellule 3 de la ligne selectionn=E9, il quitte
temporairement ma macro RemplirForm pour reprendre la Macro
IMM_Change, ce qui est logique (Snifff) :

Sur remplirForm :
-----------------------

Sub RemplirForm()

Range("BASE DE DONNEES!A2" & ":BASE DE DONNEES!H2").Select
Me.NOM =3D ActiveCell.Offset(0, 0).Value
Me.MOIS =3D ActiveCell.Offset(0, 1).Value
Me.IMM =3D ActiveCell.Offset(0, 2).Value
Me.STE =3D ActiveCell.offset(0,3).Value.....

Sur IMM_Change, il bloc sur :

Alex =3D IMM.List(IndexAlex)

Comment puis-je dire avant ma ligne de commande :

Me.IMM =3D ActiveCell.Offset(0, 2).Value

que je ne veux pas qu'il execute la macro IMM_Change
(temporairement) ???
Ou comment puis-je d=E9clarer deux Mode : 1 Mode cr=E9ation avec le
combobox alimentant les textbox s'y referant, et 1 Mode Consultation
me permetant de lire ma feuille BASE DE DONNEES sans prendre en
question le ComboBox_Change

J'ai tent=E9 avec Application.EnableEvents , Application.DisplayAlert,
BeforeUpdate mais j'ai fait fausse route ou mal =E9crit la formule.

J'esp=E8re que mes explications vous permettront de comprendre
correctement mon probl=E8me et je vous remercie par avance de vos
solutions.

Cordialement.
Alex

10 réponses

Avatar
michdenis
Bonjour Alex,

Est-ce possible d'utiliser une de ces adresses
Cjoint.com ou cijoint.fr et de publier ton projet.

Tu enlèves l'information sensible de ton fichier et tu peux
supprimer tout ce qui ne concerne pas ton problème pour
ne conserver ladite feuille de calcul et ton formulaire.

Tu obtiendras une adresse que tu nous transmettra ici.




"Alex" a écrit dans le message de groupe de discussion :

Bonjour à tous,

Je viens à vous, car je rencontre un problème sur le paramétrage d'un
UserForm, permettant d'une part d'enregistrer des données sur une
feuille "BASE DE DONNEES" , et d'autre part, toujours par le même
UserForm, de consulter et Modifier cette feuille "BASE DE DONNEES".
Ce fichier permet à chacun, d'enregistrer son temps de travail sur un
dossier d'immeuble, pour que l'on puisse par la suite, effectuer une
facturation pour chaque Immeuble.
Le Userform contient une ComboBox, par laquelle on peut choisir un
Immeuble, au choix de l'immeuble, celle-ci alimente des textbox liées
au choix d'immeuble. j'ai donc effectué ceci :

Sur Userform_Activate :
--------------------------------

'Nom de la ComboBox = IMM


Private Sub UserForm_Activate()
DernierAlex = Range("Deroulant!A1").End(xlDown).Address
IMM.RowSource = "Deroulant!A1:" & DernierAlex
IMM.ListIndex = 0
End Sub

Sur Combobox Immeuble (IMM):
----------------------------------------------


Private Sub IMM_Change()

'Mise en mémoire de l'immeuble et Rech Sté Prop et Affichage
'---------------------------------------------------------------------------------------------
IndexAlex = IMM.ListIndex
Alex = IMM.List(IndexAlex)
DernierPROP = Range("Deroulant!B1").End(xlDown).Address
PROP.Value = WorksheetFunction.VLookup(Alex, Range("Deroulant!A1:" &
DernierPROP), 2, False)

Jusque là tout fonctionne très bien. Après j'ai un bouton de
validation, qui alimente la feuille "BASE DE DONNEES".

Le problème se corse, lorsque je Clique sur le Bouton
"Consultation" (Sub RemplirForm) me permettant d'alimenter le
UserForm, en reprenant les donnees de ma feuille "BASE DE
DONNEES" (au départ, je me positionne sur la 1ere ligne de la base de
donnees et consultation ligne par ligne bien évidement).

L'ensemble des TextBoxs s'alimente correctement, sauf une, la combobox
IMM.

En effet, lorsqu'on arrive à ma ligne de combobox IMM, demandant de
mettre la valeur de la cellule 3 de la ligne selectionné, il quitte
temporairement ma macro RemplirForm pour reprendre la Macro
IMM_Change, ce qui est logique (Snifff) :

Sur remplirForm :
-----------------------

Sub RemplirForm()

Range("BASE DE DONNEES!A2" & ":BASE DE DONNEES!H2").Select
Me.NOM = ActiveCell.Offset(0, 0).Value
Me.MOIS = ActiveCell.Offset(0, 1).Value
Me.IMM = ActiveCell.Offset(0, 2).Value
Me.STE = ActiveCell.offset(0,3).Value.....

Sur IMM_Change, il bloc sur :

Alex = IMM.List(IndexAlex)

Comment puis-je dire avant ma ligne de commande :

Me.IMM = ActiveCell.Offset(0, 2).Value

que je ne veux pas qu'il execute la macro IMM_Change
(temporairement) ???
Ou comment puis-je déclarer deux Mode : 1 Mode création avec le
combobox alimentant les textbox s'y referant, et 1 Mode Consultation
me permetant de lire ma feuille BASE DE DONNEES sans prendre en
question le ComboBox_Change

J'ai tenté avec Application.EnableEvents , Application.DisplayAlert,
BeforeUpdate mais j'ai fait fausse route ou mal écrit la formule.

J'espère que mes explications vous permettront de comprendre
correctement mon problème et je vous remercie par avance de vos
solutions.

Cordialement.
Alex
Avatar
michdenis
Voici un exemple vite fait : http://cjoint.com/?jyvyPb1Twl
Avatar
Alex
On 24 sep, 20:03, "michdenis" wrote:
Bonjour Alex,

Est-ce possible d'utiliser une de ces adresses
Cjoint.com ou cijoint.fr  et de publier ton projet.

Tu enlèves l'information sensible de ton fichier et tu peux
supprimer tout ce qui ne concerne pas ton problème pour
ne conserver ladite feuille de calcul et ton formulaire.

Tu obtiendras une adresse que tu nous transmettra ici.

"Alex" a écrit dans le message de groupe de discussi on :

Bonjour à tous,

Je viens à vous, car je rencontre un problème sur le paramétrage d' unUserForm, permettant d'une part d'enregistrer des données sur une
feuille "BASE DE DONNEES" , et d'autre part, toujours par le mêmeUserFo rm, de consulter et Modifier  cette feuille "BASE DE DONNEES".
Ce fichier permet à chacun, d'enregistrer son temps de travail sur un
dossier d'immeuble, pour que l'on puisse par la suite, effectuer une
facturation pour chaque Immeuble.
LeUserformcontient uneComboBox, par laquelle on peut choisir un
Immeuble, au choix de l'immeuble, celle-ci alimente des textbox liées
au choix d'immeuble. j'ai donc effectué ceci :

Sur Userform_Activate :
--------------------------------

'Nom de laComboBox= IMM

Private Sub UserForm_Activate()
DernierAlex = Range("Deroulant!A1").End(xlDown).Address
IMM.RowSource = "Deroulant!A1:" & DernierAlex
IMM.ListIndex = 0
End Sub

SurComboboxImmeuble (IMM):
----------------------------------------------

Private Sub IMM_Change()

'Mise en mémoire de l'immeuble et Rech Sté Prop et Affichage
'------------------------------------------------------------------------ --­-------------------
IndexAlex = IMM.ListIndex
Alex = IMM.List(IndexAlex)
DernierPROP = Range("Deroulant!B1").End(xlDown).Address
PROP.Value = WorksheetFunction.VLookup(Alex, Range("Deroulant!A1:" &
DernierPROP), 2, False)

Jusque là tout fonctionne très bien. Après j'ai un bouton de
validation, qui alimente la feuille "BASE DE DONNEES".

Le problème se corse, lorsque je Clique sur le Bouton
"Consultation" (Sub RemplirForm) me permettant d'alimenter leUserForm,  en reprenant les donnees de ma feuille "BASE DE
DONNEES" (au départ, je me positionne sur la 1ere ligne de la base de
donnees et consultation ligne par ligne bien évidement).

L'ensemble des TextBoxs s'alimente correctement, sauf une, lacombobox
IMM.

En effet, lorsqu'on arrive à ma ligne decomboboxIMM, demandant de
mettre la valeur de la cellule 3 de la ligne selectionné, il quitte
temporairement ma macro RemplirForm pour reprendre la Macro
IMM_Change, ce qui est logique (Snifff) :

Sur remplirForm :
-----------------------

Sub RemplirForm()

Range("BASE DE DONNEES!A2" & ":BASE DE DONNEES!H2").Select
Me.NOM = ActiveCell.Offset(0, 0).Value
Me.MOIS = ActiveCell.Offset(0, 1).Value
Me.IMM = ActiveCell.Offset(0, 2).Value
Me.STE = ActiveCell.offset(0,3).Value.....

Sur IMM_Change, il bloc sur :

Alex = IMM.List(IndexAlex)

Comment puis-je dire avant ma ligne de commande :

Me.IMM = ActiveCell.Offset(0, 2).Value

que je ne veux pas qu'il execute la macro IMM_Change
(temporairement) ???
Ou comment puis-je déclarer deux Mode : 1 Mode création avec lecombob oxalimentant les textbox s'y referant, et 1 Mode Consultation
me permetant de lire ma feuille BASE DE DONNEES sans prendre en
question le ComboBox_Change

J'ai tenté avec Application.EnableEvents , Application.DisplayAlert,
BeforeUpdate mais j'ai fait fausse route ou mal écrit la formule.

J'espère que mes explications vous permettront de comprendre
correctement mon problème et je vous remercie par avance de vos
solutions.

Cordialement.
Alex



Salut, c'est encore moi (j'ai fais répondre à l'auteur, tu auras un
mail de moi sur ta BAL).
J'ai tenté de rentrer une variable boolean et de l' integrer dans ma
macro de combobox change et mon remplir form mais rien a faire cela me
cree de nouvelles anomalies. Par ailleurs, ta proposition de solution
oblige l'utilisateur à devoir cliquer sur un bouton supplémentaire, ce
qui complique l'utilisation du userform. Veux tu que je t'envoi mon
fichier pour que tu y jetes un oeil avec l'ensemble du userform, cela
serait peut être plus facile. Encore une fois merci par avance de ton
aide.
Cordialement.
Alex
Avatar
Alex
On 24 sep, 21:26, "michdenis" wrote:
Voici un exemple vite fait :  http://cjoint.com/?jyvyPb1Twl



J'ai transmis le fichier sur cijoint.fr
Merci
Avatar
michdenis
Tu peux envoyer ton fichier dans ma bal.

Fais disparaître tout ce qui n'est pas nécessaire à la problématique.

J'y jetterai un oil plus tard aujourd'hui !



"Alex" a écrit dans le message de groupe de discussion :

On 24 sep, 20:03, "michdenis" wrote:
Bonjour Alex,

Est-ce possible d'utiliser une de ces adresses
Cjoint.com ou cijoint.fr et de publier ton projet.

Tu enlèves l'information sensible de ton fichier et tu peux
supprimer tout ce qui ne concerne pas ton problème pour
ne conserver ladite feuille de calcul et ton formulaire.

Tu obtiendras une adresse que tu nous transmettra ici.

"Alex" a écrit dans le message de groupe de discussion :

Bonjour à tous,

Je viens à vous, car je rencontre un problème sur le paramétrage d'unUserForm,
permettant d'une part d'enregistrer des données sur une
feuille "BASE DE DONNEES" , et d'autre part, toujours par le mêmeUserForm, de consulter
et Modifier cette feuille "BASE DE DONNEES".
Ce fichier permet à chacun, d'enregistrer son temps de travail sur un
dossier d'immeuble, pour que l'on puisse par la suite, effectuer une
facturation pour chaque Immeuble.
LeUserformcontient uneComboBox, par laquelle on peut choisir un
Immeuble, au choix de l'immeuble, celle-ci alimente des textbox liées
au choix d'immeuble. j'ai donc effectué ceci :

Sur Userform_Activate :
--------------------------------

'Nom de laComboBox= IMM

Private Sub UserForm_Activate()
DernierAlex = Range("Deroulant!A1").End(xlDown).Address
IMM.RowSource = "Deroulant!A1:" & DernierAlex
IMM.ListIndex = 0
End Sub

SurComboboxImmeuble (IMM):
----------------------------------------------

Private Sub IMM_Change()

'Mise en mémoire de l'immeuble et Rech Sté Prop et Affichage
'--------------------------------------------------------------------------­-------------------
IndexAlex = IMM.ListIndex
Alex = IMM.List(IndexAlex)
DernierPROP = Range("Deroulant!B1").End(xlDown).Address
PROP.Value = WorksheetFunction.VLookup(Alex, Range("Deroulant!A1:" &
DernierPROP), 2, False)

Jusque là tout fonctionne très bien. Après j'ai un bouton de
validation, qui alimente la feuille "BASE DE DONNEES".

Le problème se corse, lorsque je Clique sur le Bouton
"Consultation" (Sub RemplirForm) me permettant d'alimenter leUserForm, en reprenant les
donnees de ma feuille "BASE DE
DONNEES" (au départ, je me positionne sur la 1ere ligne de la base de
donnees et consultation ligne par ligne bien évidement).

L'ensemble des TextBoxs s'alimente correctement, sauf une, lacombobox
IMM.

En effet, lorsqu'on arrive à ma ligne decomboboxIMM, demandant de
mettre la valeur de la cellule 3 de la ligne selectionné, il quitte
temporairement ma macro RemplirForm pour reprendre la Macro
IMM_Change, ce qui est logique (Snifff) :

Sur remplirForm :
-----------------------

Sub RemplirForm()

Range("BASE DE DONNEES!A2" & ":BASE DE DONNEES!H2").Select
Me.NOM = ActiveCell.Offset(0, 0).Value
Me.MOIS = ActiveCell.Offset(0, 1).Value
Me.IMM = ActiveCell.Offset(0, 2).Value
Me.STE = ActiveCell.offset(0,3).Value.....

Sur IMM_Change, il bloc sur :

Alex = IMM.List(IndexAlex)

Comment puis-je dire avant ma ligne de commande :

Me.IMM = ActiveCell.Offset(0, 2).Value

que je ne veux pas qu'il execute la macro IMM_Change
(temporairement) ???
Ou comment puis-je déclarer deux Mode : 1 Mode création avec lecomboboxalimentant les
textbox s'y referant, et 1 Mode Consultation
me permetant de lire ma feuille BASE DE DONNEES sans prendre en
question le ComboBox_Change

J'ai tenté avec Application.EnableEvents , Application.DisplayAlert,
BeforeUpdate mais j'ai fait fausse route ou mal écrit la formule.

J'espère que mes explications vous permettront de comprendre
correctement mon problème et je vous remercie par avance de vos
solutions.

Cordialement.
Alex



Salut, c'est encore moi (j'ai fais répondre à l'auteur, tu auras un
mail de moi sur ta BAL).
J'ai tenté de rentrer une variable boolean et de l' integrer dans ma
macro de combobox change et mon remplir form mais rien a faire cela me
cree de nouvelles anomalies. Par ailleurs, ta proposition de solution
oblige l'utilisateur à devoir cliquer sur un bouton supplémentaire, ce
qui complique l'utilisation du userform. Veux tu que je t'envoi mon
fichier pour que tu y jetes un oeil avec l'ensemble du userform, cela
serait peut être plus facile. Encore une fois merci par avance de ton
aide.
Cordialement.
Alex
Avatar
michdenis
| J'ai transmis le fichier sur cijoint.fr


Ce n'est pas suffisant. L'adresse que tu as obtenue lors
de la transmission de ton fichier sur cijoint.fr, tu dois
nous la transmettre via un message ici... sinon comment
le retrouver ?
Avatar
Alex
On 25 sep, 18:38, "michdenis" wrote:
| J'ai transmis le fichier sur cijoint.fr

Ce n'est pas suffisant. L'adresse que tu as obtenue lors
de la transmission de ton fichier sur cijoint.fr, tu dois
nous la transmettre via un message ici... sinon comment
le retrouver ?



l'adresse est la suivante :
http://www.cijoint.fr/cjlink.php?file=cj200909/cijOsY8O9q.xls
Avatar
michdenis
Ton fichier : http://cjoint.com/?jztBrqgeTl

Le principe avec une variable booléenne défini dans le haut de ton module formulaire est
simple. À chaque fois qu'il y a une ligne de code qui modifie le contenu du combobox et
qui est en dehors de la procédure "Private Sub IMM_Change()" , tu ajoutes devant la ligne
modifiant le contenu du combobox Ok = False et immédiatement après la ligne qui a modifié
le contenu du combobox Ok = True . Cela a pour but de ne pas permettre à la procédure
IMM_Change de ne pas intervenir.

Cela peut donner :
Ok = false
Imm.Value = "toto"
Ok = true

Ou
ok = false
imm.index = 0
ok = true

J'ai aussi inhiber quelques lignes de code dans la procédure Imm_change
que je trouvais inutile.

Il y a un fichier exemple qui explique un peu plus ! http://cjoint.com/?jzmc1dlJEb
Avatar
Alex
On 25 sep, 19:38, "michdenis" wrote:
Ton fichier :  http://cjoint.com/?jztBrqgeTl

Le principe avec une variable booléenne défini dans le haut de ton mo dule formulaire est
simple. À chaque fois qu'il y a une ligne de code qui modifie le conten u du combobox et
qui est en dehors de la procédure "Private Sub IMM_Change()" , tu ajout es devant la ligne
modifiant le contenu du combobox  Ok = False et immédiatement apr ès la ligne qui a modifié
le contenu du combobox  Ok = True . Cela a pour but de ne pas permett re à la procédure
IMM_Change de ne pas intervenir.

Cela peut donner :
Ok = false
Imm.Value = "toto"
Ok = true

Ou
ok = false
imm.index = 0
ok = true

J'ai aussi inhiber quelques lignes de code dans la procédure Imm_change
que je trouvais inutile.

Il y a un fichier exemple qui explique un peu plus !  http://cjoint.com /?jzmc1dlJEb



Merci beaucoup, c'est super ca marche, mais monprobleme etait lié
aussi à ma liste combobox IMM en effet ma liste d'immeuble comportait
pour chaque immeuble 4 lignes dans une cellule, car quand j'ai remis
ma vrai liste ca beugait aussi mais avec 1 ligne de donnees ca marche.
Merci encore. Dis moi si tu veux le projet final
Alex
Avatar
michdenis
| Dis moi si tu veux le projet final

Ce n'est pas nécessaire !
mais j'accepte volontiers ton offre. Tu peux utiliser
ma Bal perso. sur Hotmail.com.


Salutations.