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 :

Créer des textbox à la volé [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 4
    Par défaut Créer des textbox à la volé
    Bonjour à tous,

    Je fais mes débuts en matièere de programmation VBA sur Excel. Je suis confronté depuis ce matin à un problème que j'arrive pas à résoudre.

    J'ai un formulaire avec un bouton qui doit me permettre de créer un textbox chaque fois qu'il est activé. Les texbox doivent s'enchainer un à la suite de l'autre

    voici ce que j'ai fait pour le moment
    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
     
    Dim TexteBox(0 To 100) As MSForms.TextBox
     
    Private intcpt As Integer
     
    'Bouton permettant d'ajouter des contrôles
    Private Sub btnAjouter_Click()
        TexteBox(intcpt) = 'J'ai pas trouvé comment instancié l'objet
        TexteBox(intcpt).Left = 10
        TexteBox(intcpt).Top = intcpt + 10
     
        Dim i As Integer
        For i = 0 To intcpt
        Set TexteBox(intcpt) = Me.Frame1.Controls.Add("Forms.TextBox.1", , True)
        Next
     
        intcpt = intcpt + 1
     
    End Sub
    évidement ce code la fonctionne pas. J'aimerai que vous m'aidiez à le compléter

    Merci beaucoup de votre aide, je commence a désespéré

  2. #2
    Membre émérite Avatar de sabzzz
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 748
    Par défaut
    bonjour Chuckyboy,

    d'après ce que tu dit et ton exemple, je ne suis pas sur si tu veut créer un seul textbox ou plusieurs, voici exemple pour créer 10 TexBox,

    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
    Private Sub CommandButton1_Click()
      Dim tb As msforms.TextBox, x As Integer
      x = 40
    For i = 1 To 10
    With UserForm1
      Set tb = .Controls.Add("Forms.TextBox.1", True)
        With tb
        .Height = 15
        .Width = 120
        .Top = x
        .Left = 100
        .Text = "tb." & i
        .Font.Name = "Arial"
        .Font.Size = 8
        ht = .Height
        End With
    End With
    x = x + ht + 5
    Next
    End Sub

  3. #3
    Futur Membre du Club
    Inscrit en
    Mai 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 4
    Par défaut
    d'accord,

    j'ai pas essayé mais à la lecture j'ai pas l'impression que ça va fonctionner.

    Lorsque j'appui sur mon bouton, je veux créer un textbox de plus en dessous des X précédent. C'est pourquoi j'avais déclarer un vecteur de textbox. Donc il ne suffirai que de boucler sur mon vecteur pour tous les afficher. Ou pour récupérer toutes les valeurs.

    Est-ce que tu vois ce que je veux dire ?

    maintenant comment procède t-on ?

    merci de ta réponse

  4. #4
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    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 X As Integer
     
    Private Sub CommandButton1_Click()
    Dim tb As msforms.TextBox
    Const ht = 20
     
    X = IIf(X < 40, 40, X)
    With UserForm1
        Set tb = .Controls.Add("Forms.TextBox.1", True)
        With tb
            .Height = ht
            .Width = 120
            .Top = X
            .Left = 100
        End With
    End With
    X = X + ht + 5
    End Sub

  5. #5
    Futur Membre du Club
    Inscrit en
    Mai 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 4
    Par défaut
    Merci de ta réponse mais cela ne résout pas mon problème.

    Voici le code avec plus de commentaire
    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
     
    'Déclaration d'un vecteur de type textbox (ce vecteur contiendra les textbox dynamique du formulaire
    private MesTextbox() as Msform.TextBox
     
    'Déclaration du nombre de textbox présent actuellement dans la page
    private intNbTxtBox as integer
     
    'Hauteur du textbox
    private Const intht as integer = 20
     
    'Évènement au clique (Ajouter un Textbox)
    Private Sub btnAjouter_Click()
    'On Ajoute un textbox dans le vecteur de type textBox
    MesTextBox(intNbTxtBox) = '******Mon problème********
    with MesTextBox(intNbTxtBox)
            .Height = intht
            .Width = 120
            .Top = intNbTxtBox
            .Left = 100
     
    end with
    Dim intCompteur as integer
     
    'On affiche les textbox précédent
    for intCompteur = 0 To intNbTxtBox
    'Ligue de code pour afficher les textbox de mon vecteur
    '***** 2ème problème *******
     
     
    Next
     
    'On augmente le nombre de textbox de 1
    intNbTxtBox = intNbtxtBox + 1
    end sub
    Voilà, Donc lorsque je clique sur le bouton, le rajoute 1 textbox à la suite des autres (qui ont été préalablement rajouter aussi avec le même bouton)

    Est-ce que vous comprenez là ou je galère ?

    Encore merci pour vos réponse ! J'espère réussir à résoudre mon problème

  6. #6
    Membre émérite Avatar de sabzzz
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 748
    Par défaut
    bonjour Chuckyboy,

    pour créer une nouvelle classe de controls, il te faut créer un module de classe, (click droit sut le VBAproject et insertion, module de classe)
    dans cette exemple je nomme ce nouveau module "ClassTb"

    sur la page code de "ClassTb"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public WithEvents MonTb As MSForms.TextBox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub MonTb_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    MsgBox Me.MonTb.Name
    End Sub
    et sur la page code du UserForm

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private MesTb() As New ClassTb
    Dim x As Integer
    Dim Ctb As Integer
    Dim no As Integer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub UserForm_Initialize()
     
    End Sub
    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
    Private Sub CommandButton1_Click()
      x = x + 30
      no = no + 1
    With UserForm1
      Set tb = .Controls.Add("Forms.TextBox.1", True)
        With tb
        .Height = 15
        .Width = 120
        .Top = x
        .Left = 100
        .Name = "MonTb" & no
        ht = .Height
        End With
    End With
    InitialiseClassTb
    Ctb = 1
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub InitialiseClassTb()
    Dim ctl As Control, I&
    If Ctb = 1 Then TerminateClassTb
         For Each ctl In Me.Controls
             If TypeName(ctl) = "TextBox" Then
                 ReDim Preserve MesTb(0 To I)
                 Set MesTb(I).MonTb = ctl
                 I = I + 1
             End If
         Next ctl
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub TerminateClassTb()
         Dim I&
         For I = 0& To UBound(MesTb)
             Set MesTb(I) = Nothing
         Next I
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub UserForm_Terminate()
    TerminateClassTb
    End Sub
    voila:
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. Créer des TextBox dynamiquement dans un UserForm ?
    Par Hellgast dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 05/06/2014, 22h16
  2. Créer des objets à la volé
    Par remirobert dans le forum C#
    Réponses: 4
    Dernier message: 10/08/2012, 23h48
  3. Réponses: 3
    Dernier message: 01/02/2012, 12h22
  4. Créer des textbox, des listes déroulantes.
    Par SweetLeaf dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 15/07/2008, 16h01
  5. Créer des TextBox et récupérer les saisies.
    Par Tony Truand dans le forum Windows Forms
    Réponses: 2
    Dernier message: 11/06/2008, 21h21

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