OVH Cloud OVH Cloud

Détecter un changement de Listindex

7 réponses
Avatar
Alain
Bonjour,
J'ai une base de données Excel contenant notamment une colonne Nom et
une colonne Prénom. Cette base est consultée via un userform qui
contient une Combobox, nommée Nom, à 2 colonnes : Nom et Prénom. Cette
combobox affiche uniquement le Nom, le prénom et les autres champs étant
récupérés en se basant sur la propriété ListIndex. Certains traitement
se déclenchent sur un changement de cette combobox, càd par la fonction
Nom_change.
Si je choisis dans ma combobox Dupont Albert ou Dupont Gérard, elle
m'affiche toujours Dupont. Les autres champs sont bons, puisqu'ils sont
récupérés par ListIndex. Pourtant la valeur de ma combobox n'a pas
changé, donc Change_nom ne se déclenche pas ... Comment faire pour
détecter le changement de ListIndex ?

Alain

7 réponses

Avatar
jb
J'avais observé ce pb. Il est préférable d'alimenter les listes avec
Additem dans la procédure User_Form_Initialize()

Me.Choix_service.Additem xx

On gère mieux les ajouts et suppressions dans les listes.

http://www.excelabo.net/compteclic.php?nom=jb-formulaire

JB
Avatar
michdenis
Bonjour Alain,

Voici une façon de faire qui devrait résoudre ta problématique :

Voici un exemple de code pour gérer ton combobox


'Déclaration de ta variable dans le haut du module
Dim Ok As Boolean

'-----------------------------------
Private Sub ComboBox1_Change()

Dim A As Long, DerLig As Long

If Ok = False Then
With Me.ComboBox1
DerLig = Range("A65536").End(xlUp).Row + 1
For A = 0 To 1 ' 2 colonnes
c = c & .List(.ListIndex, A) & " "
Next
Ok = True
Me.ComboBox1.Text = c
End With

End If

End Sub

'-----------------------------------
Private Sub ComboBox1_Click()
Ok = False
End Sub
'-----------------------------------


Salutations!




"Alain" a écrit dans le message de news:
Bonjour,
J'ai une base de données Excel contenant notamment une colonne Nom et
une colonne Prénom. Cette base est consultée via un userform qui
contient une Combobox, nommée Nom, à 2 colonnes : Nom et Prénom. Cette
combobox affiche uniquement le Nom, le prénom et les autres champs étant
récupérés en se basant sur la propriété ListIndex. Certains traitement
se déclenchent sur un changement de cette combobox, càd par la fonction
Nom_change.
Si je choisis dans ma combobox Dupont Albert ou Dupont Gérard, elle
m'affiche toujours Dupont. Les autres champs sont bons, puisqu'ils sont
récupérés par ListIndex. Pourtant la valeur de ma combobox n'a pas
changé, donc Change_nom ne se déclenche pas ... Comment faire pour
détecter le changement de ListIndex ?

Alain
Avatar
Alain
Ca aurait effectivement pu résoudre mon problème (en fait j'avais déjà
cherché cette façon de faire, sans succès...). Mais dans mon cas,
j'utilise la même combobox pour consulter ou entrer un nouveau nom : je
commence à taper, si le nom n'existe pas, tout le formulaire s'efface et
je crée une nouvelle ligne dans ma base. Je suis donc obligé d'avoir une
case Nom et une case Prénom.
En fait le pb vient d'ailleurs : dans le combobox Nom, lorsque je
choisis un nom pour lequel j'ai plusieurs prénoms disponibles, le
formulaire se rempli bien (je récupère ListIndex, puis j'utilise
Intersect entre des colonnes nommées et la ligne Listindex). Mais quand
je réouvre la Combobox, elle est déjà sur le 1er nom de la série. Je
peux en choisir un autre, mais pas le premier, tant que je n'ai pas
changé de nom !!
Ex : Dupont Jean - Dupont Albert - Dupont Paul
Je choisis la ligne Dupont Albert. Combobox Nom = Dupont, TextBox Prénom
= Albert.
Je réouvre le combobox : la ligne sélectionnée est Dupont Jean.
Je choisis Paul, OK.
Je choisis Jean (le 1er), La sélection reste sur Paul. Je suis obligé de
sélectionner un autre nom, puis de revenir.
Une idée ?

Et merci pour ton aide !

Alain
Avatar
jb
Créer un premier élément neutre.
Pour obliger Change à se déclencher lors du nouveau choix de Dupont,
il faut positionner la liste sur un autre élément que Dupont:

En fin de séquence Change, positionner la liste sur le premier
élément avec:

me.xxx.listindex=0

Ceci va déclencher un événement parasite. Le neutraliser avec If
me.xx.listindex=0 then exit sub

JB
Avatar
michdenis
| Mais quand je réouvre la Combobox, elle est déjà sur le 1er nom de la série.

Est-ce une obligation d'ouvrir la combobox affichant la première entrée ?

Si tu utilises Listindex = -1 , aucun élément sera affiché dans le combobox à l'ouverture.
L''événement "ComboBox1_Change" fera son travail adéquatement.

Si tu tiens vraiment à l'affichage du premier élément affiché à l'ouverture, à toi de te d'utiliser d'autres événements que
"ComboBox1_Change" pour obtenir ce que tu désires !


Salutations!



"Alain" a écrit dans le message de news:
Ca aurait effectivement pu résoudre mon problème (en fait j'avais déjà
cherché cette façon de faire, sans succès...). Mais dans mon cas,
j'utilise la même combobox pour consulter ou entrer un nouveau nom : je
commence à taper, si le nom n'existe pas, tout le formulaire s'efface et
je crée une nouvelle ligne dans ma base. Je suis donc obligé d'avoir une
case Nom et une case Prénom.
En fait le pb vient d'ailleurs : dans le combobox Nom, lorsque je
choisis un nom pour lequel j'ai plusieurs prénoms disponibles, le
formulaire se rempli bien (je récupère ListIndex, puis j'utilise
Intersect entre des colonnes nommées et la ligne Listindex). Mais quand
je réouvre la Combobox, elle est déjà sur le 1er nom de la série. Je
peux en choisir un autre, mais pas le premier, tant que je n'ai pas
changé de nom !!
Ex : Dupont Jean - Dupont Albert - Dupont Paul
Je choisis la ligne Dupont Albert. Combobox Nom = Dupont, TextBox Prénom
= Albert.
Je réouvre le combobox : la ligne sélectionnée est Dupont Jean.
Je choisis Paul, OK.
Je choisis Jean (le 1er), La sélection reste sur Paul. Je suis obligé de
sélectionner un autre nom, puis de revenir.
Une idée ?

Et merci pour ton aide !

Alain
Avatar
Alain
Je ne cherche pas du tout à afficher la première entrée ! Je constate
seulement que quand j'ai un nom avec plusieurs prénoms possibles, quel
que soit le prénom choisi, quand je réouvre la combobox c'est le premier
nom de la série qui est activé. Du coup lorsque je le resélectionne
Combobox_change ne se déclenche pas. J'ai refait des tests avec un
fichier "de base", soit uniquement 2 colonnes (nom et prénom) et un
formulaire contenant une combobox pour le nom et une textbox pour le
prénom correspondant, ça marche. Je ne trouve pas pourquoi sur le
fichier complet ça ne marche pas ...
Avatar
michdenis
Bonjour Alain,

Tu peux m'envoyer ton classeur dans ma Bal si tu veux ! Avec quelques explications.


Salutations!


"Alain" a écrit dans le message de news:
Je ne cherche pas du tout à afficher la première entrée ! Je constate
seulement que quand j'ai un nom avec plusieurs prénoms possibles, quel
que soit le prénom choisi, quand je réouvre la combobox c'est le premier
nom de la série qui est activé. Du coup lorsque je le resélectionne
Combobox_change ne se déclenche pas. J'ai refait des tests avec un
fichier "de base", soit uniquement 2 colonnes (nom et prénom) et un
formulaire contenant une combobox pour le nom et une textbox pour le
prénom correspondant, ça marche. Je ne trouve pas pourquoi sur le
fichier complet ça ne marche pas ...