IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Macros et VBA Excel Discussion :

Tableau de control en VBA excel [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 6
    Par défaut Tableau de control en VBA excel
    Bonjour,
    Je travaille actuellement sur une userForm dans Excel qui doit s’adapter aux besoins de l’utilisateur.
    En fonction des données entrées dans une TextBox, je dois générer un groupe de contrôle comprenant :1 label ,2 ComboBox,1 CheckBox
    J’ai essayé plusieurs méthodes sans succès.
    Je me suis orienté vers la création d’un tableau contenant mes 4 éléments. Mais cela ne fonctionne pas.
    Faut-il changer de stratégie ou est-ce que mon code est faux ?

    --------------------------
    Code: (example)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    Option Explicit
    Dim MonTabDeLabel(1) As Object ’ est-ce le bon type?
    Private Sub UserForm_Click()
        Set MonTabDeLabel(0) = FrmParametre.LblAddNewLine
        Set MonTabDeLabel(1) = FrmParametre.LblAddNewLine
        MonTabDeLabel(0).Caption = "toto" & "1"
        MonTabDeLabel(1).Caption = "toto" & "2"
    End Sub
    ‘A mon regret l’index 0 et 1 pilote le même label alors que je voudrai que ce soit des instances différentes.


    Merci pour vos réponses , vos idées ou exemple de code.

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Bonsoir,

    Le problème dans le code précédent, c'est que MonTabDeLabel(0) et MonTabDeLabel(1) ont une référence sur le même objet LblAddNewLine.
    Du coup, toute modification sur l'indice 0 du tableau se retrouve sur l'indice 1 (vu que c'est le même objet).

    Pour créer dynamiquement des objects depuis le code, en fonction des valeurs entrées par l'utilisateur :

    (1) . Ajout un module de classe à nommer LigneComposants avec le code ci-dessous.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public LineLabel As Object
    Public LineCBBox1 As ComboBox
    Public LineCBBox2 As ComboBox
    Public LineCheckBox As Object

    (2) Dans la userform, ajoute le code ci-dessous.
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    Option Explicit
     
    Dim Line() As LigneComposants
     
    Private Sub AddLine(etiquette As String, ByRef cb1List() As String, ByRef cb2List() As String)
        ReDim Preserve Line(UBound(Line) + 1)
        Dim i As Integer
        Dim lNumber As Integer
        lNumber = UBound(Line)
        Dim Rowoffset As Integer
        Rowoffset = 1
        Set Line(UBound(Line)) = New LigneComposants
        With Line(UBound(Line))
           Set .LineCheckBox = Me.Controls.Add("FORMS.CHECKBOX.1", "CkeckBox" & lNumber, True)
           With .LineCheckBox
                .Top = 1 + 20 * lNumber
                .Left = Rowoffset + 1
                .Width = 20
                Rowoffset = .Left + .Width
           End With
           Set .LineLabel = Me.Controls.Add("FORMS.LABEL.1", "Label" & lNumber, True)
           With .LineLabel
                .Top = 20 * lNumber + 4
                .Left = Rowoffset + 1
                .Width = 30
                .Caption = etiquette
                Rowoffset = .Left + .Width
           End With
           Set .LineCBBox1 = Me.Controls.Add("FORMS.COMBOBOX.1", "CB_BOXv1" & lNumber, True)
           With .LineCBBox1
                .Top = 1 + 20 * lNumber
                .Left = Rowoffset + 1
                For i = 0 To UBound(cb1List)
                    .AddItem (cb1List(i))
                Next i
                .Text = cb1List(0)
                Rowoffset = .Left + .Width
           End With
           Set .LineCBBox2 = Me.Controls.Add("FORMS.COMBOBOX.1", "CB_BOXv2" & lNumber, True)
           With .LineCBBox2
                .Top = 1 + 20 * lNumber
                .Left = Rowoffset + 1
                For i = 0 To UBound(cb2List)
                    .AddItem (cb2List(i))
                Next i
                .Text = cb2List(0)
                Rowoffset = .Left + .Width
           End With
        End With
     
    End Sub
     
    Private Sub UserForm_Initialize()
        ReDim Line(0)
    End Sub
    (3) Pour ajouter une ligne appelle la routine AddLine, en passant en paramètres :
    - le label à afficher,
    - la liste de valeur pour la première des combobox
    - la liste de valeur pour la seconde des combobox

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 6
    Par défaut Merci
    Merci pour la réponse, je n’ai pas le temps de coder ce weekend , je regarde ca pour le milieu de la semaine.Je ferai un retour à ce moment là.
    Bonne journée

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 6
    Par défaut allons plus loin...
    Je n’ai pas réussi à attendre. J’ai testé ce code et il fait bien ce que je veux MERCI. Maintenant je me pose une autre question. Comment utiliser les « Event » des nouveaux controls ?
    Exemple:
    ..._Change()
    ..._Enter()
    ...
    bonne journée

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Bonjour,

    Dans ma version d'Excel je ne vois pas de méthode pour associer dynamiquement un évènement à un contrôle.
    Peut être que sous XLS2007, il y a des méthodes comme AddHandler (existant en VB.net)

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

Discussions similaires

  1. [XL-2007] Export d'un tableau dimensionné (à partir de vba Excel) vers Word
    Par hedidev1 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/02/2015, 20h02
  2. [VBA-E] controle mscom VB excel
    Par ericquad@wanadoo.fr dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/06/2006, 22h32
  3. VBA-Excel:Présentation d'un tableau (insertion ligne de légende)
    Par gabrielle_dl dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 15/06/2006, 11h11
  4. [VBA] Excel control de touche tab
    Par Igloobel dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 25/01/2006, 15h24
  5. [VBA Excel] Fiabilité des controles Actives X
    Par Farbin dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/08/2005, 12h28

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