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
Je ne sais pas, c'est peut être possible, mais moi je ne ferais pas comme ça. Pour en revenir à mes Casso spécifiques, ils ont certes des différences mais ça ne se voit plus une fois qu'ils sont créés, ce ne sont pas des propriétés, seulement des éléments Private. C'est d'ailleurs un peu un problème pour définir ces spécificités, mais je suis à peu près parvenu à m'en sortir en jouant principalement sur l'argument Format qu'on peut préciser au Add: pour les contrôles à Text c'est bien le format de nombre à appliquer, mais pour les images ça peut être le chemin du dossier qui le contint, pour les ChecBox une codification de la valeur de cellule correspondant à chaque état possible. Pour des Polygones ça me semble plus simple: c'est une série de dimensions en nombre variable spécifiables par un ParamArray par exemple.
 
Dernière édition:

laurent950

XLDnaute Accro
Pour en revenir à mes Casso spécifiques, ils ont certes des différences
C'est pour cette raison qu'il faut comprendre le mécanisme.

ils ont certes des différences mais ça ne se voit plus une fois qu'ils sont créés
Une fois que l'on sait les créer c'est facile

ce ne sont pas des propriétés, seulement des éléments Private
En Private j'ai compris l'intérêt effectivement.

C'est d'ailleurs un peu un problème pour définir ces spécificités, mais je suis à peu près parvenu à m'en sortir en jouant principalement sur l'argument Format qu'on peut précisé au Add.
Si vous avez eu des difficulté pour arriver à ce résultat, c'est que cela n'est pas si simple.

Je vais reprendre un autre exemple avec tous en Private.
 

Dranreb

XLDnaute Barbatruc
La difficulté c'était plus un problème de convention qui tienne à peu près la route entre le programmeur et l'objet ControlsAssociés. Une fois décidée ce n'était plus rien de l'appliquer :
C'est au CAsso spécifique de se débrouiller pour interpréter l'argument Format transmis à sa méthode interfacée CAsso_Init comme ça convient bien pour le contrôle de type spécifique dont il est chargé.
 
Dernière édition:

laurent950

XLDnaute Accro
Bonjour @Dranreb

Avec un peu de retard mais après avoir étudier le principe de l'implements j'ai compris votre principe.
Votre classe Casso c'est comme cette exemple ci-dessous

Module Standard :
VB:
Option Explicit
Sub Main()
Dim wks As Worksheet
    Set wks = Worksheets("Feuil1")
Dim Rgn As Range
    Set Rgn = wks.Range("A1").CurrentRegion
'
Dim oInteret As ClsInteret
'
' Montant Variables
    Dim Montant As Double, TypeInteret As String
' Lire les données
Dim i As Long, Resultat As Double
    For i = 2 To Rgn.Rows.Count
        Montant = Rgn.Cells(i, 1).Value
        TypeInteret = Rgn.Cells(i, 2).Value
        '
        Set oInteret = QuelClass(TypeInteret)
        '
        ' Montant
            oInteret.Calculer Montant
        ' Impression Resultat
            oInteret.ResultatImpression
    Next i
End Sub

Function QuelClass(ByVal TypeInteret As String) As ClsInteret
    Dim oInteret As ClsInteret
    If TypeInteret = "A" Then
        Set oInteret = New ClsInteretA
    ElseIf TypeInteret = "B" Then
        Set oInteret = New ClsInteretB
    ElseIf TypeInteret = "C" Then
        Set oInteret = New ClsInteretC
    Else
        MsgBox "Type Non Trouvé " & TypeInteret
    End If
    Set QuelClass = oInteret
End Function

Le Moudule de classe ClsInteret (Qui est sur le même mode que celui de Casso
Code:
Option Explicit
'
Sub Calculer(ByVal Montant As Double)
End Sub
'
Sub ResultatImpression()
End Sub

Puis les Modules classe en rapport avec Implements
Module de classe : ClsInteretA
Code:
Option Explicit
'
Implements ClsInteret
'
Private m_Montant As Double, m_MontantOrigine As Double
'
Sub ClsInteret_Calculer(ByVal Montant As Double)
    m_MontantOrigine = Montant
    m_Montant = Montant * 1.1
End Sub
'
Sub ClsInteret_ResultatImpression()
' TypeName(Me) = Nom de la classe
    Debug.Print TypeName(Me) & ": Calcul : " & m_MontantOrigine & " x 1,1 = " & m_Montant
End Sub

Module de classe : ClsInteretB
Code:
Option Explicit
'
Implements ClsInteret
'
Private m_Montant As Double, m_MontantOrigine As Double
'
Sub ClsInteret_Calculer(ByVal Montant As Double)
    m_MontantOrigine = Montant
    m_Montant = Montant * 1.5
End Sub
'
Sub ClsInteret_ResultatImpression()
' TypeName(Me) = Nom de la classe
    Debug.Print TypeName(Me) & ": Calcul : " & m_MontantOrigine & " x 1,5 = " & m_Montant
End Sub

Module de calsse : ClsInteretC
Code:
Option Explicit
'
Implements ClsInteret
'
Private m_Montant As Double, m_MontantOrigine As Double
'
Sub ClsInteret_Calculer(ByVal Montant As Double)
    m_MontantOrigine = Montant
    m_Montant = Montant + 500
End Sub
'
Sub ClsInteret_ResultatImpression()
' TypeName(Me) = Nom de la classe
    Debug.Print TypeName(Me) & ": Calcul : " & m_MontantOrigine & " + 500 = " & m_Montant
End Sub

Resultat :
VB:
ClsInteretA: Calcul : 1000 x 1,1 = 1100
ClsInteretB: Calcul : 2000 x 1,5 = 3000
ClsInteretA: Calcul : 1300 x 1,1 = 1430
ClsInteretB: Calcul : 2400 x 1,5 = 3600
ClsInteretC: Calcul : 1000 + 500 = 1500

La Feuille Excel toute simple pour faire fonctionner le code (exemple)
MontantType d'intérêt
1000​
A
2000​
B
1300​
A
2400​
B
1000​
C



@Dranreb lorsque ce principe est compris, il y a d'autre choses a savoir de spécifique pour faire fonctionner votre macro VBA Comboboxlié.
C'est déjà bien de comprendre cela, je suis dans le vrai @Dranreb ?

Merci pour votre code Comboboxlié qui aide a comprendre des choses spécifique en programmation
 

Pièces jointes

  • Module de Classe Standard Fonction_V0.xlsm
    15.7 KB · Affichages: 12
  • Module de Classe Standard Implement_Obtimisation_V3.xlsm
    21.3 KB · Affichages: 4
  • Module de Classe Standard Implement_V2.xlsm
    18.7 KB · Affichages: 8
  • Module de Classe Standard Procedure_V1.xlsm
    17.5 KB · Affichages: 5
Dernière édition:

laurent950

XLDnaute Accro
Bonjour.
Je ne comprends pas trop votre question car il n'est pas nécessaire de savoir comment fonctionnent mes objets ComboBoxLiées et ControlsAssociés pour pouvoir les utiliser.
je sais que cela n'est pas nécessaire, mais je veux comprendre comment cela fonctionne pour utiliser ce principe pour d'autres type de code. c'est la compréhension du modèle que vous avez créer qui est vraiment très bien fait.
 

laurent950

XLDnaute Accro
Je n'ai jamais eu besoin ailleurs de cette instruction Implements. C'était vraiment parce que j'avais à gérer de façon unifiée des contrôles de types différents.
Je pense aussi que le modèle des classes avec Excel est bien spécifique. Comme vous avez utilisé Implements je voulais en connaitre le mode de fonctionnement. c'est fait. pour le système des Userforms c'est peut être une solution. je vais étudier votre code maintenant que j'ai compris des éléments structurel.
 

Discussions similaires

Statistiques des forums

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