Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    décembre 2007
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2007
    Messages : 130
    Points : 131
    Points
    131

    Par défaut Adapter une classe pour plusieurs formulaires

    Bonsoir à tous,
    j'essai d'adapter une classe pour pouvoir l'utiliser avec plusieurs formulaires, mon problème c'est que je ne sais pas comment faire pour que la classe reconnaisse le formulaire qui l'appel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    Public WithEvents CtrlGenerique As MSForms.ComboBox
     
    Private Sub CtrlGenerique_Change()
     
    If CtrlGenerique.ListIndex <> -1 Then
     
    'ici je récupere le nom du formulaire mais je n'arrive pas ensuite a le faire reconnaitre
    Leformulaire = CtrlGenerique.Parent.Name
     
    'jai essayé ces differentes choses mais cela ne fonctionne pas
    'Dim FRM_Form As MsForms
    'Dim Leformulaire As objet
    'Set FRM_Form = Application.Forms(Leformulaire)
     
    idx = CtrlGenerique.ListIndex
    'C'EST ICI QUE CELA COINCE
        For Each ctrl In FRM_Form.Controls
     
    If TypeOf ctrl Is MSForms.ComboBox And ctrl.Name <> CtrlGenerique.Name Then
            ctrl.ListIndex = idx
            End If
        Next
    End If
     
    End Sub
    voila, si quelqu'un voit ce que je cherche et ben c'est cool Merci !

  2. #2
    Expert éminent
    Homme Profil pro
    Inscrit en
    août 2010
    Messages
    3 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : août 2010
    Messages : 3 144
    Points : 6 332
    Points
    6 332

    Par défaut

    Bonjour,

    Le code du module de classe à réadapter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    Public WithEvents CtrlGenerique As MSForms.ComboBox
    Public FRM_Form As Object
     
    Private Sub CtrlGenerique_Change()
     
        Dim Ctrl As MSForms.Control
        Dim Leformulaire As String
        Dim Idx As Integer
     
        If CtrlGenerique.ListIndex = -1 Then Exit Sub
     
        'ici je récupere le nom du formulaire mais je n'arrive pas ensuite a le faire reconnaitre
        Leformulaire = FRM_Form.Name
        Debug.Print Leformulaire
     
        Idx = CtrlGenerique.ListIndex
     
        For Each Ctrl In FRM_Form.Controls
            Debug.Print Ctrl.Name
        Next Ctrl
     
    '    If TypeOf Ctrl Is MSForms.ComboBox And Ctrl.Name <> CtrlGenerique.Name Then
    '            Ctrl.ListIndex = Idx
    '            End If
    '        Next
    '    End If
     
    End Sub
    Le code dans les UserForm :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Dim Cb As New Classe1
     
    Private Sub UserForm_Initialize()
     
        Set Cb.CtrlGenerique = ComboBox1
        Set Cb.FRM_Form = Me
     
    End Sub

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    décembre 2007
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2007
    Messages : 130
    Points : 131
    Points
    131

    Par défaut

    Bonjour à tous,
    et merci à Theze pour sont aide. J'ai essayer d'adapter ton code c'est vrai que j'ai du mal avec les classes !
    j'aurais dus mettre le code du formulaire car je n'arrive pas a le faire fonctionner pour toutes les combo du formulaire il prend uniquement pour la derniére combo


    voila le code que j'utilisai avant mais qui ne fonctionne que pour le formulaire declarer dans la classe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Private Sub UserForm_Initialize()
    /// si ajout de nouveau champ penser a remplir le tag pour identification de la colonne///
    Dim CtrlCount As Integer
    Dim feu As Worksheet
    Dim Ctrl As Control
    Dim derli As Integer
     
    CtrlCount = 0
    Set feu = Sheets("Tbl_Séjours") '///MODIF
     
    With feu
    derli = .Cells(65000, 1).End(xlUp).Row + 1
        'instancie la classe
        For Each Ctrl In Me.Controls
                If TypeOf Ctrl Is MSForms.ComboBox And Ctrl.Tag <> "" Then
                CtrlCount = CtrlCount + 1
                ReDim Preserve GeneriqueCtrl(1 To CtrlCount)
                Set GeneriqueCtrl(CtrlCount).CtrlGenerique = Ctrl
     
                MAJCombo derli, Ctrl, feu
     
                End If
        Next Ctrl
     
    End With
     
     
    End Sub
    et le tiend que j'essai d'adapter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    Private Sub UserForm_Initialize()
    '/// si ajout de nouveau champ penser a remplir le tag pour identification de la colonne///
    Dim CtrlCount As Integer
    Dim feu As Worksheet
    Dim Ctrl As MSForms.Control
    Dim derli As Integer
     
    Set feu = Sheets("Tbl_Séjours") '///MODIF
     
     
    CtrlCount = 0
     
    With feu
    derli = .Cells(65000, 1).End(xlUp).Row + 1
        'instancie la classe
        For Each Ctrl In Me.Controls
                If TypeOf Ctrl Is MSForms.ComboBox And Ctrl.Tag <> "" Then
                CtrlCount = CtrlCount + 1
               ' ReDim Preserve GeneriqueCtrl(1 To CtrlCount)
                'Set GeneriqueCtrl(CtrlCount).CtrlGenerique = ctrl
                Set Cb.CtrlGenerique = Ctrl
                Set Cb.FRM_Form = Me
                MAJCombo derli, Ctrl, feu
     
                End If
        Next Ctrl
     
    End With
     
     
    End Sub
    et enfin la classe modifée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Public WithEvents CtrlGenerique As MSForms.ComboBox
    Public FRM_Form As Object
     
    Private Sub CtrlGenerique_Change()
    Dim Ctrl As MSForms.Control
        Dim Leformulaire As String
        Dim Idx As Integer
    'Dim FRM_Form As F_Hebergement
    'Dim Leformulaire As objet
     
    If CtrlGenerique.ListIndex <> -1 Then
     
    Leformulaire = FRM_Form.Name
    'Leformulaire = CtrlGenerique.Parent.Name
    'Set FRM_Form = Application.Forms(Leformulaire)
     
    Idx = CtrlGenerique.ListIndex
        For Each Ctrl In FRM_Form.Controls
            If TypeOf Ctrl Is MSForms.ComboBox And Ctrl.Name <> CtrlGenerique.Name Then
            Ctrl.ListIndex = Idx
            End If
        Next
    End If
     
     
    End Sub
    voila je m'y perd sur comment faire pour pouvoir passer à la classe les combo que j'ai filtrées avec la propriété tag de celle-ci
    encor merci pour ton aide.

  4. #4
    Expert éminent
    Homme Profil pro
    Inscrit en
    août 2010
    Messages
    3 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : août 2010
    Messages : 3 144
    Points : 6 332
    Points
    6 332

    Par défaut

    Module de classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    Public WithEvents CtrlGenerique As MSForms.ComboBox
    Public FRM_Form As Object
     
    Private Sub CtrlGenerique_Change()
     
        Dim Ctrl As MSForms.Control
        Dim Leformulaire As String
        Dim Idx As Integer
     
        If CtrlGenerique.ListIndex <> -1 Then
     
            Leformulaire = FRM_Form.Name
     
            Idx = CtrlGenerique.ListIndex
     
            For Each Ctrl In FRM_Form.Controls
     
                If TypeOf Ctrl Is MSForms.ComboBox And Ctrl.Name <> CtrlGenerique.Name Then Ctrl.ListIndex = Idx
     
            Next
     
        End If
     
    End Sub
    Module UserForm :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    Dim GeneriqueCtrl() As New Classe1 '<--- déclaré en tête du module et le module de classe s'appelle Classe1 (nom par défaut)
     
    Private Sub UserForm_Initialize()
        '/// si ajout de nouveau champ penser a remplir le tag pour identification de la colonne///
        Dim CtrlCount As Integer
        Dim feu As Worksheet
        Dim Ctrl As Control
        Dim derli As Integer
     
        Set feu = Sheets("Tbl_Séjours")
     
        derli = feu.Cells(65000, 1).End(xlUp).Row + 1
     
        For Each Ctrl In Me.Controls
     
            If TypeOf Ctrl Is MSForms.ComboBox And Ctrl.Tag <> "" Then
     
                CtrlCount = CtrlCount + 1
     
                'instancie la classe
                ReDim Preserve GeneriqueCtrl(1 To CtrlCount)
                Set GeneriqueCtrl(CtrlCount).CtrlGenerique = Ctrl
                Set GeneriqueCtrl(CtrlCount).FRM_Form = Me
     
                MAJCombo derli, Ctrl, feu
     
            End If
     
        Next Ctrl
     
    End Sub

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    décembre 2007
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2007
    Messages : 130
    Points : 131
    Points
    131

    Par défaut

    Whaou un grand merci c'est parfait et en plus je croit avoir compris le fonctionnemnt.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/05/2007, 15h10
  2. [FLASH MX] Une scrollbar pour plusieurs champs texte
    Par ffmlgraphics dans le forum Flash
    Réponses: 1
    Dernier message: 08/08/2005, 17h45
  3. Y a t'il une classe pour transactions FTP
    Par Devil666 dans le forum IO
    Réponses: 6
    Dernier message: 04/07/2005, 13h27
  4. thread dédié à une classe pour lui "donner vie"
    Par Dje14 dans le forum Threads & Processus
    Réponses: 5
    Dernier message: 02/06/2005, 17h46
  5. Réponses: 7
    Dernier message: 08/01/2005, 14h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo