Mettre à jour Liste ComboBox sans fermer et rouvrir Userform

pmfontaine

XLDnaute Occasionnel
Bonjour le Forum,
Sur le fichier joint je peux modifier la TabObservateurs qui sert de liste au CBxObservateur qui se trouve dans le formulaire de saisie (en autres).

Mon soucis est que quand je rajoute un nom dans TabObservateurs il n’apparaît pas tous de suite dans la liste de choix de CBxObservateur.
Je suis obliger de fermer puis de rouvrir le formulaire de saisie (UFmSaisie) pour le voir apparaître.

Si c'est possible, je voudrais trouver une solution pour que la liste se mette a jour sans être obliger de fermer /ouvrir le UFmSaisie sans modifier les éventuelles saisie déjà faites dans les autres ComboBox de UFmSaisie.
(D’ou le titre de mon post)

J'ai chercher sur le Web, mais je n'ai pas trouvé.
Voir fichier joint (Cliquer sur 1 - Formulaire de Saisie 2 - RAJOUTER UN NOM DANS LA LISTE DES OBSERVATEURS 3 - .......etc)
Merci
Patrick
 

Pièces jointes

  • MaJ-ListeComboBoxPmfontaine.xlsm
    535.5 KB · Affichages: 91

Lone-wolf

XLDnaute Barbatruc
Bonjour Patrick

Il suffisait de faire une macro de réinilisation et avec textboxprénom_AfterUpdate: call init.
Met aussi de l'ordre dans la feuille BD, c'est du n'importe quoi. Comment veut-tu t'y retouver??.

EDIT: rectification de ce que j'ai dit. Dans le formulaire d'inscription

VB:
Private Sub CommandButton1_Click()
Dim lig As Long, i As Long
  With Sheets("BD")
  lig = .Range("c" & Rows.Count).End(xlUp).Row + 1
  .Range("c" & lig) = TextBox2 & " " & TextBox1
  UserForm2.Show

  For i = 2 To .Range("c" & Rows.Count).End(xlUp).Row
  UserForm2.ComboBox1 = .Range("c" & i)
  If UserForm2.ComboBox1.ListIndex = -1 Then UserForm2.ComboBox1.AddItem .Range("c" & i)
  Next i
  UserForm2.ComboBox1 = ""
  End With
  Unload Me
End Sub
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonsoir.
Il serait plus prudent de réexécuter TObservateurs = [TabObservateurs].Value
puis CBxObservateur1.List = TObservateurs
Et reprenez exactement le système mis au point dans la UserModification. Ce n'est pas normal qu'il y ait deux traitements différents.
 

pmfontaine

XLDnaute Occasionnel
Bonsoir Dranreb,
Merci pour votre réponse sur mon problème car vous connaissez bien le fichier puisqu'il est fait en grande parti grâce a vous.
Mais je ne sais pas comment faire pour passer par une macro
VB:
Sub Init()
TObservateurs = [TabObservateurs].Value
CBxObservateur.List = TObservateurs
MàJListCBxObsverateur
End Sub
ou
VB:
Sub Init()
TObservateurs = [TabObservateurs].Value
CBxObservateur.List = TObservateurs
'MàJListCBxObsverateur
Dim L As Long, D As New Dictionary
For L = 0 To LBxObservateurs.ListCount - 1: D(LBxObservateurs.List(L, 0)) = 1: Next L
Me.CBxObservateur.Clear
For L = 1 To UBound(TObservateurs)
   If Not D.Exists(TObservateurs(L, 1)) Then CBxObservateur.AddItem TObservateurs(L, 1)
   Next L
End Sub
Bien sur ça plante et ce n'est surment pas ça que vous me conseillez de faire, mais je ne comprends pas comment on fait pour agir sur un Combobox a partir d'un code extérieur.
Patrick
 

Dranreb

XLDnaute Barbatruc
Il n'y pas à écrire d'autre Init que la UserForm_Initialize.
Et arrêtez de toujours mettre en commentaire ce que vous ne comprenez pas.
VB:
TObservateurs = [TabObservateurs].Value
MàJListCBxObsverateur
Ces deux instructions sont à exécuter dans l'UserForm_Initialize et aussi après tout changement de TabObservateurs que ce changement soit effectué par des instructions du même UserForm ou juste après Show d'un autre.
La CBxObservateur.List ne doit jamais être modifiée par autre chose que MàJListCBxObservateur, sauf lors de l'ajout de l'observateur dans la ListBox parce que là la simple suppression de l'observateur choisi suffit. Mais même pour l'y remettre, ça doit être fait par MàJListCBxObservateurs. (Idiot de la reclasser alors que l'original complet est toujours déjà classé !)
 
Dernière édition:

Discussions similaires

Réponses
9
Affichages
150

Statistiques des forums

Discussions
312 103
Messages
2 085 322
Membres
102 862
dernier inscrit
Emma35400