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 :

Probléme textbox dynamique [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 23
    Par défaut Probléme textbox dynamique
    Bonjour,

    J' ai trouvé une solution pour creer un textbox dynamique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set var = question.Controls.Add("Forms.TextBox.1")
    cette méthode fonctionne.

    Le problème est que : quand je veux boucler x fois cette creation de textbox et que je veux renommer la textbox en :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    with var.name = "var"+cstr(x)
    Je n'arrive pas a récuperer la valeur du text box par les variables var1, var2, varn... je n'arrive même pas à recuperer mon résultat dans une msgbox.

    Avez vous une solution à me proposer, ci-dessous mon code complet :


    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
    Do while x <> 5
     
    Set var = question.Controls.Add("Forms.TextBox.1")
    With var
    .Name = "var" + CStr(x)
    .Left = 120
    .Height = 18
    .Width = 54
    .Top = 72 + 24 * x
    End With
     
    msgbox controls("var"+cstr(x))
     
    x=x+1
    loop

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 48
    Par défaut
    Salut,
    Je me demande si en procédant de cette manière tu ne crée pas une sorte de groupe de contrôle. Si je prenais une image, tu crées des clones, qui à l'instar de clones humains seraient des individus différents mais avec la même carte de Sécu, vu qu'il sont tous nés le même jour au même endroit...
    Ca rejoint le fonctionnement de création de macros avec l'enregistreur, tu as beau éffacer les anciennes, si tu ne redemarre pas Excel, lors d'une nouvelle création, l'enregistreur continu à numéroter dans la foulée. Je n'ai pas essayé mais je tenterais de leur donner un nom différent à la création .
    Qui à dit élucubrations ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 23
    Par défaut
    ok merci mais comment pourrais je faire pour avoir un nom différent à chaque fois :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set userform1.controls("var"+cstr(x)) = question.Controls.Add("Forms.TextBox.1")
    cette méthode ne fonctionne pas
    il faudrait concaténer une variable pour former une nouvelle variable.

  4. #4
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Salut,
    Tu n'es pas obligé de connaitre le nom de la TextBox pour récupérer la valeur, tu peux faire une boucle sur les controles de ton userform, voici un exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub TestTb()
     
    Dim Tb As Object
    Dim MaVal as string
     
    For Each Tb In UserForm1.Controls
        MaVal = Tb.Value
        MsgBox MaVal
    Next
    End Sub
    Sinon, mais attention j'ai pas testé ...

    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
    Do while x <> 5
     
    Set var = question.Controls.Add("Forms.TextBox.1")
    With var
    .Name = "var" & x
    .Left = 120
    .Height = 18
    .Width = 54
    .Top = 72 + 24 * x
    End With
     
    msgbox Userforms.controls("var" & i)
     
    x=x+1
    loop

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 23
    Par défaut
    Merci beaucoup, j'ai cherché toute la journée en vain.

    La deuxième solution fonctionne a merveille et me convient très bien.

    Encore merci

  6. #6
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Donc j'imagine que tu auras corrigé la coquille dans la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msgbox Userforms.controls("var" & i)
    Il fallait lire x et pas i (j'utilise toujours i pour mes boucles...)

    A+

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Par défaut
    Bonjour,

    Une piste avec le code suivant

    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_Click()
    Dim C As Control
    Dim i&
    '/// par collection ///
    For Each C In Me.Controls
      If TypeName(C) = "TextBox" Then
        MsgBox C.Name & "  boucle collection (For Each)"
      End If
    Next C
    '/// par boucle classique ///
    For i& = 1 To 5
      MsgBox Me.Controls("var" & i& & "").Name & "  boucle (For Next)"
    Next i&
    End Sub
     
    Private Sub UserForm_Initialize()
    Dim var As Control
    Dim x As Integer
    Do
    x = x + 1
    Set var = Me.Controls.Add("Forms.TextBox.1")
    With var
      .Name = "var" + CStr(x)
      .Left = 120
      .Height = 18
      .Width = 54
      .Top = 72 + 24 * x
    End With
    Loop Until x = 5
    End Sub
    Cordialement.

    PMO
    Patrick Morange

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

Discussions similaires

  1. [AC-2010] problème création dynamique de textbox, erreur 429
    Par zorroe dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 05/03/2012, 10h22
  2. Problème TextBox dynamiques
    Par mpilard dans le forum ASP.NET
    Réponses: 10
    Dernier message: 14/04/2011, 17h50
  3. [VBA-E] UserForm avec textbox "Dynamique"
    Par Alex_Kidd dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/05/2006, 00h29
  4. [C++.NET] problème textBox
    Par stgi02 dans le forum VC++ .NET
    Réponses: 5
    Dernier message: 25/04/2006, 11h38
  5. [vb.net] définir un textbox dynamiquement
    Par arnolem dans le forum Windows Forms
    Réponses: 13
    Dernier message: 05/12/2005, 15h51

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