VBA: Appeller une textbox créée depuis le code

mememe

XLDnaute Nouveau
Bonjour à tous!

Tout d'abord, bonne et heureuse année à tous!
Je viens à vous pour un petit problème qui me turlupine!

En fait, j'ai créé des textbox dans un userform via ma macro, et je lui ai donné un nom.
Jusqu'ici, rien d'extraordinaire.

Quand je demande une liste des controls du userform avec un for....each..., mes textbox apparaissent avec le bon nom.

Mais quand je tape une valeur dans le userform et que j'essai de la récupérer via un userform.textbox11.value, il ne reconnait pas la textbox.

Quelqu'un pour m'aider?
D'avance merci, ça me bloque un peu...

Bonne soirée!



Code:
Public Sub CommandButton1_Click()
Dim obj As Object
Dim answer As String

For Each obj In Def_paroi.Controls
answer = answer & vbLf & obj.Name
Next

MsgBox answer

answer = (Def_paroi.textbox32.Value)


Unload Def_paroi

End Sub

Public Sub nombre_mur_change()

Dim valeur As Variant

Def_paroi.Hide
ReDim nb_mur_paroi(Def_paroi.nombre_mur.Value)
nb_mur_paroi(no_paroi) = Def_paroi.nombre_mur.Value
    
Dim Top, Lefti, Width, Height, i As Integer
Dim NumeroTextBox As Integer
Dim TextBoxName, labelname, labelcolonne As String

'supp^ression des textbox

Dim CTRL As Control
i = 0
For Each CTRL In Me.Controls
    If TypeOf CTRL Is MSForms.TextBox Or TypeOf CTRL Is MSForms.Label Then
            Me.Controls.Remove (i)
    Else
        i = i + 1
    End If
Next
    
Top = 70

Width = 50
Height = 20
NumeroTextBox = 1




Def_paroi.Height = 115


i = 1
test = False

While i <= 20 And i <= nb_mur_paroi(no_paroi)

       
 Def_paroi.Width = 260
 Lefti = 70
             Def_paroi.Height = Def_paroi.Height + 25
            
        labelname = "Paroi" & i
        Set labelparoi = Def_paroi.Controls.Add("Forms.label.1", labelname, True) 'Ouverture est le nom de ma fenetre
        
        Lefti = 50
        
        With labelparoi
        .Visible = True
        .Caption = "paroi " & i
        .Top = Top 'Definit la distance entre le bord de la fenetre et le bord du conteneur
        .Left = Lefti - 45 'Definit la distance entre le bord gauche de la fenetre et le bord du conteneur
        .Width = Width 'Definit la largeur de l'objet
        .Height = Height 'Definit la hauteur de l'objet
        .Font.Size = 10
        End With
        
            
            
            For j = 1 To 3
        
                TextBoxName = "textbox" & i & j
                Set TextBox = Def_paroi.Controls.Add("Forms.textbox.1", TextBoxName, True)  'Ouverture est le nom de ma fenetre
        
                With TextBox
                .Name = TextBoxName
                .Visible = True
                .Top = Top 'Definit la distance entre le bord de la fenetre et le bord du conteneur
                .Left = Lefti 'Definit la distance entre le bord gauche de la fenetre et le bord du conteneur
                .Width = Width 'Definit la largeur de l'objet
                .Height = Height 'Definit la hauteur de l'objet
                .Font.Size = 10
                End With
                
                
                labelcolonne = "Labelcolonne" & j
                Set labelcol = Def_paroi.Controls.Add("Forms.label.1", labelcolonne, True)  'Ouverture est le nom de ma fenetre
        
                With labelcol
                .Visible = True
                .Top = 50 'Definit la distance entre le bord de la fenetre et le bord du conteneur
                .Left = Lefti 'Definit la distance entre le bord gauche de la fenetre et le bord du conteneur
                .Width = Width 'Definit la largeur de l'objet
                .Height = Height 'Definit la hauteur de l'objet
                .Font.Size = 10
                End With
                
                If j = 1 Then
                    labelcol.Caption = "Coord. X"
                Else
                    If j = 2 Then
                        labelcol.Caption = "Coord. Y"
                            Else
                                labelcol.Caption = "Teta /X"
                            End If
                    End If
                
                
            Lefti = Lefti + 70
            
            Next j
 i = i + 1
Top = Top + 25
        
Wend


If i > 20 Then
Top = 70
 For i = 21 To nb_mur_paroi(no_paroi)
 
             Def_paroi.Width = 520
             Lefti = 320
        
        labelname = "Paroi" & i
        
        Set labelparoi = Def_paroi.Controls.Add("Forms.label.1", labelname, True) 'Ouverture est le nom de ma fenetre
                
        With labelparoi
        .Visible = True
        .Caption = "paroi " & i
        .Top = Top 'Definit la distance entre le bord de la fenetre et le bord du conteneur
        .Left = Lefti - 45 'Definit la distance entre le bord gauche de la fenetre et le bord du conteneur
        .Width = Width 'Definit la largeur de l'objet
        .Height = Height 'Definit la hauteur de l'objet
        .Font.Size = 10
        End With
        
            
            
            For j = 1 To 3
        
                TextBoxName = "textbox" & i & j
                Set TextBox = Def_paroi.Controls.Add("Forms.textbox.1", TextBoxName, True)  'Ouverture est le nom de ma fenetre
        
                With TextBox
                .Name = TextBoxName
                .Visible = True
                .Top = Top 'Definit la distance entre le bord de la fenetre et le bord du conteneur
                .Left = Lefti 'Definit la distance entre le bord gauche de la fenetre et le bord du conteneur
                .Width = Width 'Definit la largeur de l'objet
                .Height = Height 'Definit la hauteur de l'objet
                .Font.Size = 10
                End With
                
                
                labelcolonne = "Labelcolonne" & j
                Set labelcol = Def_paroi.Controls.Add("Forms.label.1", labelcolonne, True)  'Ouverture est le nom de ma fenetre
        
                With labelcol
                .Visible = True
                .Top = 50 'Definit la distance entre le bord de la fenetre et le bord du conteneur
                .Left = Lefti 'Definit la distance entre le bord gauche de la fenetre et le bord du conteneur
                .Width = Width 'Definit la largeur de l'objet
                .Height = Height 'Definit la hauteur de l'objet
                .Font.Size = 10
                End With
                
                If j = 1 Then
                    labelcol.Caption = "Coord. X"
                Else
                    If j = 2 Then
                        labelcol.Caption = "Coord. Y"
                            Else
                                labelcol.Caption = "Teta /X"
                            End If
                    End If
                                
            Lefti = Lefti + 70
            
            Next j
            
        Top = Top + 25
 
        
Next
End If


Def_paroi.Height = Def_paroi.Height - 25

Def_paroi.Show
'Def_paroi.nombre_mur.SetFocus

'MsgBox (Def_paroi.textbox32.Value)


End Sub
 

James007

XLDnaute Barbatruc
Re : VBA: Appeller une textbox créée depuis le code

Bonsoir,

Je n'ai pas décortiqué ton code ... mais comme première précaution, as-tu compilé ton code ... et deuxièmement, est-ce-que tu retrouves bien tous tes noms, quand tu saisis du code, dans intellisense ?

A +
:)
 

mememe

XLDnaute Nouveau
Re : VBA: Appeller une textbox créée depuis le code

Tout d'abord, merci de la réponse.

Comme mon code bien dégueulasse le démontre, je suis débutant en VBA.

en fait, quand je compile, il me dit que la textbox n'existe pas. Logique, vu qu'elle n'est pas créée.
Mais la ligne de code qui demande la textbox se trouve après le code que j'ai cité dans le message précédent, donc elle existe.

Je n'arrive juste pas à l'appeller.... mauvais nom? .... j'ai du mal à comprendre...
 

Pièces jointes

  • Calcul_paroi.zip
    19.8 KB · Affichages: 82
  • Calcul_paroi.zip
    19.8 KB · Affichages: 87
  • Calcul_paroi.zip
    19.8 KB · Affichages: 91

James007

XLDnaute Barbatruc
Re : VBA: Appeller une textbox créée depuis le code

Re Bonsoir,

Je viens tout juste d'ouvrir ton fichier ...

Avant d'aller plus loin, tu ne peux pas debugger si tu n'indiques pas comme toute première instruction, dans ton code : Option Explicit

A +
:)
 

mememe

XLDnaute Nouveau
Re : VBA: Appeller une textbox créée depuis le code

Re bonsoir,

Comme quoi, quand on n'a pas les bases....

Bref, le fichier qui bug, mais avec 1 seul bug, celui qui m'énerve!
 

Pièces jointes

  • Calcul_paroi.zip
    18.3 KB · Affichages: 75
  • Calcul_paroi.zip
    18.3 KB · Affichages: 78
  • Calcul_paroi.zip
    18.3 KB · Affichages: 72

James007

XLDnaute Barbatruc
Re : VBA: Appeller une textbox créée depuis le code

Re,

A première vue, il existe plusieurs variables que tu n'as pas déclarées : Dim labelparoi,
Dim j , Dim labelcol , et Dim TextBox ...

Il me semble aussi prudent de te dire concernant la dernière variable qu'il n'est vraiment pas recommendé d'utiliser un mot clé de VBA en tant que variable : ce sont de gros soucis assurés ...

A +
:)
 

mememe

XLDnaute Nouveau
Re : VBA: Appeller une textbox créée depuis le code

re,

Dans le deuxième envoi, les variables sont déclarées.
On peut donc avoir un aperçu de ce que je veux...

Un idée?
Ce serait la variable textbox qui merdouille?

Merci de t'interresser à mon problème!
 

James007

XLDnaute Barbatruc
Re : VBA: Appeller une textbox créée depuis le code

Re,

Je n'ai pas décortiqué tout ton code ... mais je comprends que tu utilise VBA pour créér dynamiquement ton USF ...

Je te conseille d'ores et déjà de changer la variable TextBox, et de remplacer ce mot par ce que tu veux ...

Et, demain matin, promis, je prendrai le temps de creuser plus avant ... :)

A +
:)
 

kjin

XLDnaute Barbatruc
Re : VBA: Appeller une textbox créée depuis le code

Bonsoir,
Pour utiliser les contrôles ajoutés lors de l'execution, 2 syntaxes possibles
Code:
Me!TextBox1
ou
Code:
Me.Controls("TextBox1")
Voir PJ (j'ai fais un peu de nettoyage !)
A+
kjin
 

Pièces jointes

  • mememe.zip
    12.3 KB · Affichages: 99

mememe

XLDnaute Nouveau
Re : VBA: Appeller une textbox créée depuis le code

Bonjour tout le monde! et Merci beaucoup!

Le seul petit souci, c'est que le redimensionnement en largeur et le décalage d'une colonne quand nbmur est supérieur à 20 ne se fait plus, mais je m'en charge, et je m'inspirerai de ce code à l'avenir!

Encore merci à tous!
 

mememe

XLDnaute Nouveau
Re : VBA: Appeller une textbox créée depuis le code

Re-bonjour,

Vous allez trouver que j'abuse, mais quelqu'un peu m'aider pour que quand i est supérieur à 20, une deuxième colonne se créée, et le textbox apparaissent dans cette colonne?

Je n'arrive pas à bidouiller le code donné par Kjin pour arriver à mes fins.....

Merci d'avance...
PS: si vous habitez vers dreux, je vous payerai l'apéro... :eek:
 

James007

XLDnaute Barbatruc
Re : VBA: Appeller une textbox créée depuis le code

Bonjour,

De nouveau pas Option Explicit en début de code ... et on ne peut pas debugger ... :mad:

Que signifie une deuxième colonne ...? puisque l' USF en affiche déjà quatre ... :confused:

A mon humble avis, tout ce code de génération d' USF devrait plutôt se trouver dans un module standard ...

A +
:)
 

Discussions similaires

Réponses
0
Affichages
153

Membres actuellement en ligne

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 185
dernier inscrit
salhit