Microsoft 365 PB Combobox en cascade mise a jour donnée externe

Yannagramme

XLDnaute Nouveau
Bonjour a Tous

J'en appel a votre aide car je sèche durement sur un pb de mise a jour de combobox en cascade
J'ai un classeur nommé "OT" qui comporte un Usefrom et dans ce useform il y a deux Combobox (Nommées Famille et Sousfamille )en cascade pour le Nom et le prénom .
Ces données sont prises via une Macro sur un autre classeur nommé Contact.
Actuellement tout fonctionne, dans le sens ou mes combobox concernées ont bien la liste demandé prise sur le classeur Contact .
Le Seul bémol vient lorsque je fait une nouvelle entrée sur le formulaire contact lorsque les deux classeur sont ouvert mes combobox ne se mettent pas a jour .
J'ai bien évidement tenter de nombreuses solution comme Refreshall , les option de remonetr les donnée via excel etc ect ....j'ai fouillé sur le net et je pense que j'ai epuisé les liens existant se rapprochant de ce sujet sans résultat mon problème persiste malheureusement .
La seule Solution pour que cela fonctionne correctement est de fermer le classeur et de le réouvir , mais je vous avoue que c'est fort dérangeant .
J'en appel a votre aide pour une piste , une solution et bien évidement un explication , car a terme je doit utiliser le même schéma pour d'autre classeur et si je doit les fermer piur les réovirus a chaque fois ca complique legerement la tache .......

A vous lire .
 

Pièces jointes

  • OT.xlsm
    210.7 KB · Affichages: 6
  • Contact.xlsm
    203.5 KB · Affichages: 3
Dernière édition:
Solution
Bonjour,

Il suffit d'après ce que je comprends de votre demande, que votre variable BD soit réinitialisée.

Dans le fichier joint, vous trouverez en haut du module du userform la méthode :
VB:
Private Sub RefreshBD()
    Set f = Workbooks("Contact.xlsm").Sheets("BD")
    BD = f.Range("A2:R" & f.[R65000].End(xlUp).Row).Value   ' Array pour rapidité
    Set d = CreateObject("Scripting.Dictionary")
    For i = 1 To UBound(BD)                                 ' on explore la colonne de niveau 1
        d(BD(i, 1)) = ""                                      ' on ajoute l'élément de la famille au dictionnaire
    Next i
    Me.Famille.List = d.Keys
End Sub

Cette dernière est appelée sur UserForm_Initialize et UserForm_Activate, mais vous pouvez...

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Vos données ne semblent pas anonymisées. Alors ré-éditez votre demande et modifiez vos fichiers afin qu'aucune donnée confidentielle réelles (nom, adresse, téléphone etc.) n'apparaissent. Remplacez les par des données fictives !

S'il s'agit de données réelles, c'est en violation avec le RGPD, si vous êtes employé il s'agit au mieux d'une faute professionnelle..

cordialement
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Il suffit d'après ce que je comprends de votre demande, que votre variable BD soit réinitialisée.

Dans le fichier joint, vous trouverez en haut du module du userform la méthode :
VB:
Private Sub RefreshBD()
    Set f = Workbooks("Contact.xlsm").Sheets("BD")
    BD = f.Range("A2:R" & f.[R65000].End(xlUp).Row).Value   ' Array pour rapidité
    Set d = CreateObject("Scripting.Dictionary")
    For i = 1 To UBound(BD)                                 ' on explore la colonne de niveau 1
        d(BD(i, 1)) = ""                                      ' on ajoute l'élément de la famille au dictionnaire
    Next i
    Me.Famille.List = d.Keys
End Sub

Cette dernière est appelée sur UserForm_Initialize et UserForm_Activate, mais vous pouvez l'appeler quand et où vous voulez.

Contacts.xlsm doit être ouvert.

Cordialement
 

Pièces jointes

  • OT.xlsm
    200.1 KB · Affichages: 4

Yannagramme

XLDnaute Nouveau
Rebonjour Roblochon , le forum ,

C'est merveilleux , vraiment merci .

Ce qui me désole le plus c'est que je bloque dessus depuis plusieurs jours et en vous lisant la solution respire la simplicité et était devant mes yeux ......

C'est d'ailleurs souvent le cas ...

Encore merci pour votre retour et passez une bonne journée .

Cordialement.
 

Discussions similaires