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 :

[VBA Excel] Créer plusieurs contrôles dynamiquement


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 183
    Points : 125
    Points
    125
    Par défaut [VBA Excel] Créer plusieurs contrôles dynamiquement
    Bonjour,

    Je souhaiterais pouvoir créer plusieurs contrôles dynamiquement. Seul hic, je ne connais pas le nombre de contrôles dont j'ai besoin (puisque ce nombre peut varier durant l'exécution de l'application).

    Nota bene : Créer un contrôle n'est pas le problème en soit, c'est pouvoir le dupliquer qui l'est.

    NB2 : La FAQ VB montre comment résoudre ce problème mais ça ne marche pas en VBA.
    LikeZone
    Le meilleur du like

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Tu peux déjà essayer ça.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub AjouterUnControleDynamique_Click()
        Dim MonControle As Control
        Set MonControle = Controls.Add("Forms.1", "CommandButton2", Visible)
        With MonControle
            .Left = 18
            .Top = 50
            .Width = 175
            .Height = 20
         End With
    End Sub
    Précise ton pb.

    A+

    En fait je crois que tu crées bien plusieurs boutons mais qu'ils tous au même endroit (superposés)

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 183
    Points : 125
    Points
    125
    Par défaut
    Ton exemple ne marche pas chez moi et de plus je n'arrive plus moi meme à en créer dynamiquement ... je crise

    Ce que je veux c'est que dans une frame, soit créé plusieurs labels les uns en dessous des autres. Le problème n'est pas de les mettre les uns en dessous des autres (je suis pas con non plus) c'est de pouvoir les faire. Hors, je n'y arrive pas.

    edit :

    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
    Dim WithEvents obj1  As CommandButton
     
    Private Sub CommandButton1_Click()
     
        Set obj1 = Controls.Add("VB.CommandButton", "btn1")
     
     
        obj1.Visible = True
        obj1.Top = 100
        obj1.Left = 100
        obj1.Caption = "Valider"
     
    End Sub
     
    Private Sub obj1_Click()
    MsgBox "Bonjour"
    End Sub
    Je ne comprend pas je suis quasi certain que ce code fonctionnait il y'a une heure.

    Edit 2 :

    Voilà j'ai retrouvé comment créer dynamiquement un contrôle, dans cet exemple c'est un bouton :

    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
    Option Explicit
     
    Dim WithEvents obj1  As CommandButton
     
    Private Sub CommandButton1_Click()
     
        Set obj1 = Controls.Add("Forms.CommandButton.1", "btn")
     
     
        obj1.Visible = True
        obj1.Top = 100
        obj1.Left = 100
        obj1.Caption = "Valider"
     
    End Sub
     
    Private Sub obj1_Click()
    MsgBox "Bonjour"
    End Sub
    Malheureusement, impossible (pour moi en tout cas) de faire reproduire ce bouton.
    LikeZone
    Le meilleur du like

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    je suis pas con non plus
    Mais non, t'es pas con !
    Désolé, mais on ignore le plus souvent si la question n'émane pas d'un développeur distrait ou qui expérimente une nouvelle procédure...

    Ceci dit, tu n'as pas précisé ta version VBA
    Dans VBA 97, j'utilise DoEvents. Cela permet de gérer les événements des controls ce qui n'est pas le cas autrement. Si c'est ta version et que ça t'intéresse, tu dis.

    A+

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 290
    Points : 374
    Points
    374
    Par défaut
    Bonsoir,
    Dans cet exemple le code crée deux Label dynamique
    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
     
     
    Option Explicit
    Dim Mycmd As Control
     
    Private Sub CommandButton1_Click()
     
    Set Mycmd = Controls.Add("Forms.Label.1")
        Mycmd.Left = 18
        Mycmd.Top = 50
        Mycmd.Width = 175
        Mycmd.Height = 20
        Mycmd.Caption = "C’est amusant."
    Set Mycmd = Controls.Add("Forms.Label.1")
        Mycmd.Top = 70
        Mycmd.Left = 18
        Mycmd.Width = 175
        Mycmd.Height = 20
     Mycmd.Caption = "deuxième Label"
    End Sub
    jpleroisse

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 183
    Points : 125
    Points
    125
    Par défaut
    En fait, je n'ai pas besoin d'évènement, du moment que la création dynamique de contrôles fonctionne I'm happy.

    Pour ma version, j'aurai apparement excel 2002 (je me trompe peut etre, c'est ce que j'ai vu dans "? / à propos de Microsoft Excel").


    Désolé, mais on ignore le plus souvent si la question n'émane pas d'un développeur distrait ou qui expérimente une nouvelle procédure
    Mais en fait quand j'ai essayé de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    obj1(1).Top = obj(0).Top + 100
    obj1(1).Visible = True
    Ca ne s'exécute même pas.

    A défaut de me répéter, je souhaiterais dupliquer autant de fois que nécessaire mon contrôle.

    Merci pour les efforts que tu as fourni jusqu'ici .
    LikeZone
    Le meilleur du like

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 183
    Points : 125
    Points
    125
    Par défaut
    Voici actuellement ce que je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim obj1 As Control
     
    Private Sub CommandButton1_Click()
     
        Set obj1 = Controls.Add("Forms.Label.1", "label", True)
     
     
        obj1.Visible = True
        obj1.Top = 100
        obj1.Left = 100
        obj1.Caption = "Valider"
     
     
    End Sub
    Je précise que je fais du VBA.

    Et lorsque je veux faire

    Load obj1(1)

    Il n'appréci pas beaucoup
    LikeZone
    Le meilleur du like

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    obj1(1).Top = obj(0).Top + 100
    obj1(1).Visible = True

    Ca ne s'exécute même pas.
    Pour ça, essaie de désigner la feuille

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With MaForm.obj1
         .Top = MaForm.obj(0).Top + 100 
         '....
    end with
    Avec moi, ça marche toujours

    Mais je te laisse avec leroissejp, c'est un pro des contrôles dynamiques

    A+

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 183
    Points : 125
    Points
    125
    Par défaut
    De quelle feuille tu parles? Je travailles sur un formulaire


    EDIT :

    je n'avais pas vu que leroissejp avait répondu. Ton code marche à merveille, néanmoins, comment accéder àa ces contrôles une fois créés?
    LikeZone
    Le meilleur du like

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    J'ai bien relu tous tes messages, de formulaire... point
    Je parle d'userform "MaForm"

    A+

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 183
    Points : 125
    Points
    125
    Par défaut
    Et bien je vous remercie tous les deux, je suis finalement arrivé à ce que je voulais :

    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
    Option Explicit
     
     
    Dim Mycmd(10) As Control
     
    Private Sub CommandButton1_Click()
     
    Set Mycmd(1) = Controls.Add("Forms.Label.1")
        Mycmd(1).Left = 18
        Mycmd(1).Top = 50
        Mycmd(1).Width = 175
        Mycmd(1).Height = 20
        Mycmd(1).Caption = "C’est amusant."
    Set Mycmd(2) = Controls.Add("Forms.Label.1")
        Mycmd(2).Top = 70
        Mycmd(2).Left = 18
        Mycmd(2).Width = 175
        Mycmd(2).Height = 20
     Mycmd(2).Caption = "deuxième Label"
     
     Mycmd(1).Caption = "Test"
     
    End Sub
    Merci encore et à dans pas trop longtemps pour de nouvelles quêtes (qui a dit questions chiantes ? ).
    LikeZone
    Le meilleur du like

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

Discussions similaires

  1. [VBA/VB] créer une page dynamiquement dans un WebBrowser
    Par SilkyRoad dans le forum Contribuez
    Réponses: 3
    Dernier message: 13/03/2013, 22h24
  2. VBA EXCEL - créer graphe dynamiquement
    Par neo2k2 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 16/06/2008, 15h18
  3. [VBA-EXCEL] - Quitter un contrôle
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 13/12/2006, 08h08
  4. [vba - excel] manipuler plusieurs fichers excels à la suite
    Par ash_rmy dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/09/2006, 16h11
  5. [VBA-Excel] copier plusieurs fois une colonne dans une feuille Excel
    Par ash_rmy dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 09/08/2006, 18h43

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