XL 2010 Combobox liées

cathodique

XLDnaute Barbatruc
Bonjour,

Je voudrais lier les 3 combobox et que les 2 textboxs se complètent suivant les données des comboboxs.
Je sais que Dranreb a développé des modules de services dans ce sens.
Toute proposition est la bienvenue.

Avec mes remerciements anticipés.

Bonne journée.
 

Dranreb

XLDnaute Barbatruc
C'est cette base qu'il faut commencer à comprendre pour pouvoir poursuivre ?
C'est sûr qu'en attendant un question précise de @cathodique on courait le risque, hélas avéré, de commencer par ce qui n'était pas le plus évident. Mais au moins comme ça j'ai tenté de répondre à sa question, ce qui a eu ainsi j'espère de meilleures chances de retenir son attention qu'une litanie de principes, qu'on finit toujours par ne plus lire qu'avec les yeux, le cerveau s'étant déconnecté de ces mouvements occulaires automatiques …
 

laurent950

XLDnaute Accro
Bonsoir @Dranreb
J'ai compris une partie, mais pas la totalité Dranreb.
L'aide Excel ne mentionne pas cette partie que vous évoquer Dranreb :
VB:
  mais il faut mettre le modèle des procédures communes à toutes les classe spécifiques qui l'implémenteront, car ce sont elles qui définiront les propriétés et méthodes de l'objet générique. On ne met généralement pas de code dedans car dans le cadre de ce principe il n'aurait qu'une valeur documentaire et ne serait jamais exécuté. C'est le code des procédures correspondantes des classes qui l'implémentent qui sera exécuté à sa place.
Ont Ajoute quoi au fichier Excel pour que cela fonctionne en exemple :
mais il faut mettre le modèle des procédures communes à toutes les classe spécifiques qui l'implémenteront
Pour completer l'exemple du fichier en un exemple simple ?
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Ben créez un nouveau module de classe vide qui implémente l'interface, compilez et utilisez les listes déroulantes qui surmontent la fenêtre de code jusqu'à ce qu'il ne râle plus !
Mais c'est autre chose que je disais parce que je n'avais pas vu tout de suite que c'était un exemple simple comportant deux variables Public qu'on devait pouvoir à la fois initialiser et ensuite récupérer.
J'avais juste vu en diagonale les Property Let et Get dans la classe qui implémente mais pas leurs procédure vides correspondantes dans l'interface. Je n'avais pas immédiatement compris que c'est à ces variables, justement qu'elles correspondaient et non à des procédures vides dans l'interface.
Je n'ai jamais déclaré de variables Public dans un module d'interface. Ou peut être au début, il y a longtemps quand je commençais à m'y intéresser. Mais j'ai vu ensuite que ce n'était pas très commode parce qu'après il exigeait toujours pour ces variables toutes les Property logiquement possibles. Je préfère donc toujours tout définir par procédures de toutes sortes Sub, Function et Property, mais seulement celles que je veux. Vides de tout code, bien sur, dans l'interface, puisque c'est le code des procédures correspondantes des classe qui l'implémentent qui sera exécuté à la place.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
Sans compter que des variables déclarées dans une classe exclusivement utilisée comme interface, qui impliquent dans les classes qui l'implémentent des procédures Property dont on ne voit aucun modèle dans l'interface, je ne trouve pas ça très clair. Ça induit même un certain doute quant à la localisation des données, si on oublie qu'elles deviennent purement virtuelles du fait que ce n'est qu'une interface.
 

laurent950

XLDnaute Accro
Bonjour @Dranreb
Pouvons nous partir d'un fichier simple, avec un exemple simple.
Pour construire tous cela, tous ce dont vous avez parler. ce petit exemple avec le fichier serait une base exemple pour comprendre et pouvoir se servir et recréer un code ?
Immaginon votre module de classe "CAsso"
Pouvons nous écrire un code tous simple qui tourne autour ?
 

laurent950

XLDnaute Accro
Partons avec celle ci "ControlsAssociés" OK
Cette classe n'implemente pas : Implements CAsso ?

VB:
Option Explicit
Event Change(ByVal CAM As CAsso)
Event Click(ByVal CAM As CAsso)
Event KeyDown(ByVal CAM As CAsso, ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Event KeyPress(ByVal CAM As CAsso, ByVal KeyAscii As MSForms.ReturnInteger)
Event KeyUp(ByVal CAM As CAsso, ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Private LCs As ListColumns, TCAssos() As CAsso, NePasExécuterChange As Boolean

On peux créer un fichier très simple avec un exemple tous simple pour faire fonctionner ce code :
Implements CAsso
Pour faire du pas à pas et pouvoir suivre le cheminement. avec votre fichier je mis perd.
Faire un fichier tous simple
 
Dernière édition:

laurent950

XLDnaute Accro
Surtout qu'elle est incontournable: le CAsso en veut un dès le départ en tant que Parent.
Je propose de faire un exemple (Le construire en pas a pas) :
On créer un fichier avec un exemple mais vraiment des plus simple.
Dranreb (est-ce que l'on peut partir de votre base fichier Temp.xlsm) il y a un onglet Contact :
On récupère cette base vraiment toute simple (sur un nouveau classeur sans aucun Module)
Puis je construit :
Un Userform (sans code) :
Question : L'userform a besoin de quoi ? TextBox / ListeBox / etc. (je le construit)
Ensuite : création des modules (Standard, Classe etc.)
L'exemple montre comment cela fonctionne (quelques choses de vraiment simple, mais très simple pour saisir :
Surtout qu'elle est incontournable: le CAsso en veut un dès le départ en tant que Parent.
est pouvoir comprendre
 

laurent950

XLDnaute Accro
D'accord je vais faire simple.
je suis sur le fichier Temp.
Comment j'arrive sur cette évènement :
Event Change(ByVal CAM As CAsso) (Dans le module de classe ControlsAssociés)
On imagine qu'il n'y a que cela
disons que ces options sont pas obligatoire pour faire fonctionner le code ?
VB:
Event Click(ByVal CAM As CAsso)
Event KeyDown(ByVal CAM As CAsso, ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Event KeyPress(ByVal CAM As CAsso, ByVal KeyAscii As MSForms.ReturnInteger)
Event KeyUp(ByVal CAM As CAsso, ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 229
Messages
2 086 425
Membres
103 206
dernier inscrit
diambote