Microsoft 365 Référence d'une TextBox Masquée pour Exporter son contenu

Yoyo60

XLDnaute Junior
Coucou à tous et à tous,

La fin de l'année approche à grands pas...

Un dernier petit défi pour cette année (ou un premier défi pour l'année suivante...) Hihi

Un petit problème pour lequel je m'arrache un peu les cheveux alors je sollicite une nouvelle fois votre aide.

En cherchant, j'ai réussi à trouver quelques ligne de code me permettant d'afficher une TextBox dans un UserForm (me permet d'ajouter un N° de téléphone supplémentaire)

jusqu'ici tout fonctionne bien mais comme je n'ai pas tout bien compris (mon inexpérience me rattrape à grand pas hélas !!!), je ne comprends pas plusieurs points :

- l'utilité de la variable "i" (i = Me.Controls.Count - 1)
- Ou se trouve le nom de cette TextBox qui sera créée (puis-je le choisir ?)
- Le formatage de celle-ci au format "00 00 00 00 00" qui ne peut pas s'appliquer (sans doute lié à MA méconnaissance du nom de cette TextBox)
- et enfin et surtout, comment exporter son contenu vers la cellule désirée.

Espérant avoir de l'aide de votre part, je joint à cette demande, un petit fichier d'exemple

Je vous souhaite à toutes et à tous une excellente nouvelle année avec pleins de bonnes choses, de la réussite et tout et tout.

Johann
 

Pièces jointes

  • Aide_TextBox_Masquée.xlsm
    23.9 KB · Affichages: 3

ChTi160

XLDnaute Barbatruc
Bonjour Yoyo60
Mes Commentaires du Texte de la Procédure
VB:
Private Sub CommandButton1_Click()
Dim TxBox As Control
Dim i As Byte
i = Me.Controls.Count - 1 'Nombre de Controls sur le Userform
Set TxBox = UserForm1.Controls.Add("Forms.Textbox.1", "TB" & i, True) 'On affecte a la variable TextBox (Control) un nouveau Control (TextBox) On y met Un Nom "TBi"
With TxBox 'Avec ce TextBox
.Name = TextBox_Telephone_2 'On lui donne Un autre Nom ( Pourquoi ?)
.Tag = "TB" & i 'On met dans sa Propriété .Tag "TB" & i le premier Nom du Control
.Height = 20 'on définit sa hauteur
.Top = 120   'On définit sa Position en Hauteur sur le Userform
.Left = 15   'On définit sa Position horizontale sur le Userform
.Font.Size = 12 'On définit la taille de son texte
.Width = 250    ''On définit sa largeur
End With
End Sub
cette Procédure , si tu appuies plusieurs fois , va créer autant de Control que ( i ) qui vont ce mettre les Uns sous les Autres
n'hésite pas si besoin !
Jean marie
 
Dernière édition:

Yoyo60

XLDnaute Junior
Bonjour Yoyo60
Mes Commentaires du Texte de la Procédure
VB:
Private Sub CommandButton1_Click()
Dim TxBox As Control
Dim i As Byte
i = Me.Controls.Count - 1 'Nombre de Controls sur le Userform
Set TxBox = UserForm1.Controls.Add("Forms.Textbox.1", "TB" & i, True) 'On affecte a la variable TextBox (Control) un nouveau Control (TextBox) On y met Un Nom "TBi"
With TxBox 'Avec ce TextBox
.Name = TextBox_Telephone_2 'On lui donne Un autre Nom ( Pourquoi ?)
.Tag = "TB" & i 'On met dans sa Propriété .Tag "TB" & i le premier Nom du Control
.Height = 20 'on définit sa hauteur
.Top = 120   'On définit sa Position en Hauteur sur le Userform
.Left = 15   'On définit sa Position horizontale sur le Userform
.Font.Size = 12 'On définit la taille de son texte
.Width = 250    ''On définit sa largeur
End With
End Sub
cette Procédure , si tu appuies plusieurs fois , va créer autant de Control que ( i ) qui vont ce mettre les Uns sous les Autres
n'hésite pas si besoin !
Jean marie
Bonjour Jean-Marie,

Meilleurs vœux pour cette nouvelle année.

Merci pour ta réponse.

J'ai regardé ta réponse. Je comprend mieux bcp de choses mais certaines restent un mystère...

J'ai vu que tu te demandais pourquoi j'avais ajouté : .Name = TextBox_Telephone_2

Je pensais en faisant cela, pouvoir identifier le nom de la TextBox afin de pouvoir ensuite utiliser son contenu pour l'exporter vers une cellule...

Hélas, non.

Aurais tu une idée afin que je puisse identifier le nom et pouvoir l'utiliser ?

Par avance merci
 

Hasco

XLDnaute Barbatruc
Repose en paix
bonjour,

vos textbox s'appelent "TB1" à "TBn" oùest est un nombre pour le moment indéfini.
Pourquoi vouloir ajouter des TextBox ? Réinitialiser un seul textbox de départ ne serait-il pas plus judicieux ?
Vos textbox étaient masqués parcequ'il avait tous le même .Top
Vous vous compliquez la tâche pour rien (à part l'apprentissage).

Cordialement
 

Pièces jointes

  • Aide_TextBox_Masquée.xlsm
    20.2 KB · Affichages: 2

Yoyo60

XLDnaute Junior
bonjour,

vos textbox s'appelent "TB1" à "TBn" oùest est un nombre pour le moment indéfini.
Pourquoi vouloir ajouter des TextBox ? Réinitialiser un seul textbox de départ ne serait-il pas plus judicieux ?
Vos textbox étaient masqués parcequ'il avait tous le même .Top
Vous vous compliquez la tâche pour rien (à part l'apprentissage).

Cordialement
Bonsoir Hasco,

Merci d'avoir pris part à mon problème.

Il est très probablement vrai que je me complique la tâche. Hihi

Je découvre et essaye de comprendre au maximum. Parfois j'ai des idées, d'autres fois des envies. Toutes dans le but d'essayer d'améliorer le fichier personnel que j'essaye de construire.

Je vois que vous avez réussi à résoudre mon "casse-tête". Je vais regarder avec attention votre façon de coder et tenter de comprendre au maximum.

Un grand merci à vous pour votre aide.

Excellente nouvelle année à vous.

Johann
 

Yoyo60

XLDnaute Junior
Coucou à toutes et à tous,

Petit à petit, j'avance. Mais une fois de plus, je ''bloque''. C'est pas faute d'avoir cherché, mais une fois de plus c'est l'impasse...

J'ai réussi à masquer les label et TextBox suivant la valeur de ma ComboBox (c'est pas très "propre" et "optimisé" niveau codage (j'en suis sûr), mais je m'approche du résultat souhaité).

Je bloque sur un problème d'affichage (ou d'actualisation).

Je m'explique : Admettons que je sélectionne 3 Adultes et qu'ensuite, je choisisse 5 enfants. Les 5 champs correspondants au 5 enfants s'affichent correctement (comme voulu).

Mais, gros malin que je suis, c'est pas 5 que je devais choisir mais 4 enfants que j'aurais du sélectionner. (quel nunuche !!!).

Et c'est là que se trouve mon problème...

Les 5 champs correspondants aux 5 âges des enfants restent affichés même si je sélectionne 4 ou 3 dans la ComboBox... (SNIF).

Existe-t-il un moyen d'actualiser l'affichage des labels et TextBox en cas de changement d'information de la ComboBox ?

Par avance merci pour vos réponses.

Johann

Mon petit fichier en pièce jointe
 

Pièces jointes

  • Masquer_Label_TextBox.xlsm
    23.3 KB · Affichages: 1

ChTi160

XLDnaute Barbatruc
Bonjour
ce que j'ai ajouté en tête de la Procédure
VB:
Private Sub Combobox1_Change()
Dim CTRL As Control
Dim x As Byte

Dim a As Byte
Dim b As Byte
Dim c As Byte
Dim d As Byte
Dim e As Byte
Dim f As Byte
Dim g As Byte
Dim h As Byte
Dim i As Byte
Dim j As Byte
Dim k As Byte

a = 1
b = 2
c = 3
d = 4
e = 5
f = 6
g = 7
h = 8
i = 9
j = 10
k = 11
'************ On masque l'ensemble des Controls avant d'appliquer le Choix
For i = 1 To 12
 Me.Controls("TextBox" & i).Visible = False
 Me.Controls("Label" & i).Visible = False
Next i
'***********************
'Pour 0
x = 0
If Me.ComboBox1 = "" Then
'
à voir si nécessaire pour le Combobox "ComboBox_Nombre_Adulte"
Tu pourrais alors ajouter
Code:
Private Sub ComboBox_Nombre_Adulte_Change()
Me.ComboBox1.ListIndex = 0
End Sub
Jean marie
 

Yoyo60

XLDnaute Junior
Bonjour
ce que j'ai ajouté en tête de la Procédure
VB:
Private Sub Combobox1_Change()
Dim CTRL As Control
Dim x As Byte

Dim a As Byte
Dim b As Byte
Dim c As Byte
Dim d As Byte
Dim e As Byte
Dim f As Byte
Dim g As Byte
Dim h As Byte
Dim i As Byte
Dim j As Byte
Dim k As Byte

a = 1
b = 2
c = 3
d = 4
e = 5
f = 6
g = 7
h = 8
i = 9
j = 10
k = 11
'************ On masque l'ensemble des Controls avant d'appliquer le Choix
For i = 1 To 12
 Me.Controls("TextBox" & i).Visible = False
 Me.Controls("Label" & i).Visible = False
Next i
'***********************
'Pour 0
x = 0
If Me.ComboBox1 = "" Then
'
à voir si nécessaire pour le Combobox "ComboBox_Nombre_Adulte"
Tu pourrais alors ajouter
Code:
Private Sub ComboBox_Nombre_Adulte_Change()
Me.ComboBox1.ListIndex = 0
End Sub
Jean marie
Bonjour Jean-Marie

Il me semble que ce n'est pas la première fois que vous apportez une solution à mes questions.

Une fois de plus, c'est rapide, net et efficace.

Un grand MERCI à vous pour votre aide
 

ChTi160

XLDnaute Barbatruc
Re
Une autre approche qui fait gagner des Lignes Lol
(Sûrement perfectible)
VB:
Private Sub ComboBox_Nombre_Adulte_Change()
Me.ComboBox1.ListIndex = 0
End Sub

Private Sub UserForm_Initialize()
Dim CTRL As Control
Dim x As Byte
With Me
  .ComboBox_Nombre_Adulte.List = Array("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20")
  .ComboBox2.List = Array("", "1", "2", "3", "4", "5", "6") 'Bébé
  .ComboBox1.List = Array("", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12") 'Enfant
  .ComboBox1.ListIndex = 0
End With
End Sub

Private Sub Combobox1_Change()
Dim CTRL As Control
Dim x As Byte
Dim ii As Byte
Dim oDebut As Byte, oFin As Byte

With Me

For ii = 1 To 12
 .Controls("TextBox" & ii).Visible = True
 .Controls("Label" & ii).Visible = True
Next ii

'Pour 0
If .ComboBox1 = "" Then
oDebut = 1: oFin = 12
End If
'Pour 1
If .ComboBox1 = "1" Then
oDebut = 2: oFin = 12
End If
'Pour 2
If Me.ComboBox1 = "2" Then
oDebut = 3: oFin = 12
End If
'Pour 3
If Me.ComboBox1 = "3" Then
oDebut = 4: oFin = 12
End If
'Pour 4
If .ComboBox1 = "4" Then
oDebut = 5: oFin = 12
End If
'Pour 5
If .ComboBox1 = "5" Then
oDebut = 6: oFin = 12
End If
'Pour 6
If .ComboBox1 = "6" Then
oDebut = 7: oFin = 12
End If
'Pour 7
If .ComboBox1 = "7" Then
oDebut = 8: oFin = 12
End If
'Pour 8
If .ComboBox1 = "8" Then
oDebut = 9: oFin = 12
End If
'Pour 9
If .ComboBox1 = "9" Then
oDebut = 10: oFin = 12
End If
'Pour 10
If .ComboBox1 = "10" Then
oDebut = 11: oFin = 12
End If
'Pour 11
If .ComboBox1 = "11" Then
oDebut = 12: oFin = 12
End If
''Pour 12
If .ComboBox1 = "12" Then
Exit Sub
End If

For ii = oDebut To oFin
    .Controls("TextBox" & ii).Visible = False
    .Controls("Label" & ii).Visible = False
Next ii

End With
End Sub
N'hésite pas si besoin !
Jean Marie
 

Yoyo60

XLDnaute Junior
Re
Une autre approche qui fait gagner des Lignes Lol
(Sûrement perfectible)
VB:
Private Sub ComboBox_Nombre_Adulte_Change()
Me.ComboBox1.ListIndex = 0
End Sub

Private Sub UserForm_Initialize()
Dim CTRL As Control
Dim x As Byte
With Me
  .ComboBox_Nombre_Adulte.List = Array("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20")
  .ComboBox2.List = Array("", "1", "2", "3", "4", "5", "6") 'Bébé
  .ComboBox1.List = Array("", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12") 'Enfant
  .ComboBox1.ListIndex = 0
End With
End Sub

Private Sub Combobox1_Change()
Dim CTRL As Control
Dim x As Byte
Dim ii As Byte
Dim oDebut As Byte, oFin As Byte

With Me

For ii = 1 To 12
 .Controls("TextBox" & ii).Visible = True
 .Controls("Label" & ii).Visible = True
Next ii

'Pour 0
If .ComboBox1 = "" Then
oDebut = 1: oFin = 12
End If
'Pour 1
If .ComboBox1 = "1" Then
oDebut = 2: oFin = 12
End If
'Pour 2
If Me.ComboBox1 = "2" Then
oDebut = 3: oFin = 12
End If
'Pour 3
If Me.ComboBox1 = "3" Then
oDebut = 4: oFin = 12
End If
'Pour 4
If .ComboBox1 = "4" Then
oDebut = 5: oFin = 12
End If
'Pour 5
If .ComboBox1 = "5" Then
oDebut = 6: oFin = 12
End If
'Pour 6
If .ComboBox1 = "6" Then
oDebut = 7: oFin = 12
End If
'Pour 7
If .ComboBox1 = "7" Then
oDebut = 8: oFin = 12
End If
'Pour 8
If .ComboBox1 = "8" Then
oDebut = 9: oFin = 12
End If
'Pour 9
If .ComboBox1 = "9" Then
oDebut = 10: oFin = 12
End If
'Pour 10
If .ComboBox1 = "10" Then
oDebut = 11: oFin = 12
End If
'Pour 11
If .ComboBox1 = "11" Then
oDebut = 12: oFin = 12
End If
''Pour 12
If .ComboBox1 = "12" Then
Exit Sub
End If

For ii = oDebut To oFin
    .Controls("TextBox" & ii).Visible = False
    .Controls("Label" & ii).Visible = False
Next ii

End With
End Sub
N'hésite pas si besoin !
Jean Marie
Merci Jean-Marie,

Je vais regarder tes modifications et les ajouter à la place de mon code qui ressemble quand même à "une usine à Gaz"... Hihi

Merci
 

Discussions similaires

Statistiques des forums

Discussions
315 129
Messages
2 116 561
Membres
112 784
dernier inscrit
chokairy mohamed