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
 

mememe

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

Re,

je tente une dernière fois, après je vous laisse tranquilles!

Chaque paroi comporte n "parties" appelées "murs", chaque mur comporte n panneaux.
En gros, je dois faire un USF qui gère tout ça, qui viendrait après celui que tu viens de me faire.

Une idée qui me simplifierais la vie?
 

mememe

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

En fait, je voudrais savoir si on peut faire un USF qui s'ouvre une seule fois pour chaque paroi, dans lequel on déclare un nombre de mur variable, dans lequel on a un nombre de panneau variable, qui ont leur largeur et leur quantité.

Le USF s'adapterait en fonction.

Par exemple, si dans la paroi2 on veut 3 murs différents, paf! 3 le bidule nous créé 3 zone de liste, dans lesquelles ont déclare un nombre de panneau, et paf! 3 text box apparaissent pour chaque panneau, et ce dans chaque mur.

A mon avis, c'est trop compliqué, voir même impossible....
C'est la dessus que j'aimerais un avis.

Désolé si j'insiste!
 
Dernière édition:

kjin

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

Re,
Tu as du mal à comprendre que je ne comprends pas ta demande
Soit tu t'expliques clairement, soit tu prends ton courage à 2 mains et tu postes un fichier avec un joli dessin si tu veux !
A+
kjin
 

mememe

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

Alors voilà!

Une image du USF désiré, sachant que tout doit être dynamique.

Donc la question: c'est possible?

Je n'en suis pas convaincu.
 

Pièces jointes

  • userform.zip
    11.8 KB · Affichages: 37
  • userform.zip
    11.8 KB · Affichages: 41
  • userform.zip
    11.8 KB · Affichages: 42

kjin

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

Bonsoir,
Tout est possible ou presque, s'agit de savoir si c'est utile ou si c'est juste pour le fun...
1 - dans ce cas, il faudra forcément passer par un module de classes
2 - vu que ça risque d'être m...pour gérer la position des contrôles et éviter la nausée du au tanguage, je te propose de passer par un contrôle multipage avec une page pour chaque mur.
A+
kjin
 

mememe

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

Re,

Ha oui! Effectivement c'est une idée!
Je vais essayer de m'y lancer en faisant un truc propre, en m'inspirant de ce que tu as fait!

En tout cas, un grand merci à tous, et particulièrement à toi kjin pour ta patience et pour le code!
A+
 

mememe

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

Re,
Juste encore une question... j'essaie de renommer les onglets de ma multipage...
le premier truc à faire, je bloque!

Ca coince là où j'ai ecrit que ça coince! Problème de syntaxe je pense....

Code:
Option Explicit
Public nb_mur_paroi()

Sub def_murs()
ReDim nb_mur_paroi(USFParois.NbParois)
Dim result, Nbr_Page As Integer
Dim Compteur_Page As Integer, i, j, k As Integer
Dim mur_paroi_i As Integer
Dim nom_page As String
Compteur_Page = USFMurs.MultiPage1.Pages.Count
  'Ici on determine le nombre de pages final
 
For j = 1 To USFParois.NbParois
    mur_paroi_i = InputBox("Indiquez le nombre de mur dans la paroi " & j, "Nombre mur")
    nb_mur_paroi(j) = mur_paroi_i
    Nbr_Page = nb_mur_paroi(j)
    Unload USFMurs 'Ncr car l'usf est loadé pendant le count
     
    If Compteur_Page < Nbr_Page Then ' il faut ajouter des pages
        For i = Compteur_Page To Nbr_Page - 1
           USFMurs.MultiPage1.Pages.Add
        Next
    End If
     
    If Compteur_Page > Nbr_Page Then ' il faut supprimer des pages
        For i = Compteur_Page To Nbr_Page + 1 Step -1
          USFMurs.MultiPage1.Pages.Remove (i - 1)
        Next
    End If
    
    For k = 1 To nb_mur_paroi(j)
        USFMurs.MultiPage1.Pages(k).Name = "Murs " & k  C'EST ICI QUE CA COINCE !!!
    Next k
Next j

USFMurs.Show
End Sub
 

kjin

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

Re,
Déjà ! :D
Je suppose qu'il s'agit plutôt de la propriété Caption, non ?
Pourquoi ne pas l'indiquer au moment de l'ajout
Code:
MultiPage1.Pages.Add Nom, Caption
Note qu'il n'est pas utile de nommer le formulaire systématiquement...
A+
kjin
 

mememe

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

Oui, déjà, et on ne se moque pas! :p

J'avoue que je suis naze, mais j'aimerais vraiment apprendre et faire ce programme qui est un peu important quand même!

Bref, je ne comprends pas bien ta syntaxe, et si je les renomme après, c'est que le multipage est déjà présent dans le USF, donc il y a déjà 2 pages qui ne sont pas renommées...
J'ai honte, je ne l'ai pas créé en VBA... :rolleyes:
 

kjin

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

Re,
- 1: est-ce le nom de la page (Name) ou le nom qui apparait sur l'onglet (Caption) ?
- 2: on peut changer la propriété Name d'un contrôle que s'il est créé dynamiquement au moment de l'execution, par contre on peut toujours changer la propriété Caption
- 3: l'index des Pages commence à 0
A+
kjin
 

mememe

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

C'est la propriété Caption que j'aimerais changer.
J'ai réussi, mais je pense que ce n'est pas la méthode correcte....

J'ai supprimé toute les pages dans mon USF, puis dans mon code, je créé n pages et je les nommes au fur et à mesure....
Merci pour les infos! J'aurais oublié une page sinon! ^^

Toujours présent pour les nuls kjin!
 

mememe

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

Bonjour à tous!

Voilà, j'ai créé mon multipage, renommé les onglets, crée 1 combobox par page et un label par page.

Maintenant, question fatidique:
Comment faire pour attribuer une fonction du type _change à la combobox de chaque page??
C'est possible ça, pour un nombre de combobox qui n'est pas connu?

D'avance merci.
 

Discussions similaires

Réponses
0
Affichages
352

Statistiques des forums

Discussions
315 089
Messages
2 116 094
Membres
112 658
dernier inscrit
doro 76