Agrandir une textBox selon le texte quelle contient

  • Initiateur de la discussion Initiateur de la discussion Toubabou
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Toubabou

XLDnaute Impliqué
Bonjour à tous,
Pourriez-vous m'aider pour que ma TextBox3 s'agrandisse automatiquement en fonction du texte quelle contient?
Merci par avance
Toubabou
 

Pièces jointes

ben j’étais parti dessus et j'ai vu que tu était parti sur le label autosize alors j'ai laissé tomber car je suis contre ce concept dans cet exemple très précis

vu que (non pas que l'astuce n'est pas valable) mais c'est le concept lui même qui ne l'ai pas
dis moi un peu si ton texte box fait 15 ligne combien fera ton userform
et si tu veux ajouter et bien tes controls ajouts ne sont plus accessible a moins de brancher ton pc a un écran de cinema 😛

te rend tu compte de la mécanique que tu déploie pour ajouter un nom de plante et sa définition ou en modifier une
il faut revenir strictement aux bases
et je suis surpris d’être le seul a te le dire, vu le calibre des intervenants

quand on travail sur une BDD
déjà la combo doit au moins avoir une colonne supp correspondant au index de ligne sur sheets
surtout que tu filtre bien que même filter comme je te l'ai dis est inutile dans ton fichier
histoire de pas faire de cabriole avec match

le txtb3 peut très bien servir pour l'ajout ou la modif

le bouton ajouter peut très bien être le bouton modif en fonction du choix par click sur combo ou écriture dans txtb1

le txtb3 peut très bien être pré dimensionné pour 4 ou 5 ligne
j'ai tout dis 😉
 
voila comment je vois ton interface
un seul combo pour choisir ou taper le texte
selon si ça existe le bouton vert devient ajouter ou modifier
je t'ai préparé la ligne en commentaire
te reste plus qu'a refaire les codes pour ajouter ou modifier je te donne le N° de ligne sur le click button
c'est l'histoire de 3 ou 4 ligne de code et encore !!!!
et voila simple comme un bonjour
 

Pièces jointes

Mais comment l'adapter à mon UserForm?
Remplacez votre TextBox par un Label (c'est idiot de prendre une TextBox pour quelque chose qui n'est pas modifiable), prenez ma Private Sub AjusterLab telle qu'elle est, et utilisez la partout ou vous voulez lui faire afficher un texte dans un Label, sur le modèle de l'instruction unique des Sub CBnTexteLong_Click et CBnTexteCourt_Click.
 
bonjour Toubalou
comme je l'ai dis je te l'ai préparé
il te reste qu' a faire le code d'enregistrement et modif
je répète voir commentaire du bouton AddModif
tu a à dispo l'index de ligne pour l’enregistrement d'un nouveau et la modif d'un existant
c'est du niveau débutant ce qu'il te reste a faire
c'est quand même pas compliqué
la variable DL te donne la ligne pour l'ajout ou modif

il t'est si difficile de faire

with sheets("nom de ton sheet")
.cells(DL, colonne DES NOMS ).value=combobox1.value
.cells(DL,colonne DEFINITION ).value=textbox3.value
end with
 
re regarde comme c'etait simple
VB:
'***************************************
'les 3 boutons

Private Sub AddModif_Click()    ' bouton mixte ajout/modif
    Dim DL&
    Select Case AddModif.Caption
    Case "Ajouter"
        DL = ActiveWorkbook.Worksheets("Lexique").Cells(Rows.Count, 1).End(xlUp).Row
         With Sheets("Lexique")
            .Cells(DL, "A").Value = ComboBox1.Value
            .Cells(DL, "B").Value = TextBox3.Value
        End With
    Case "Modifier"
        With ComboBox1: ligne = .List(.ListIndex, 2) - 1: End With
        Sheets("Lexique").Cells(ligne, "B") = TextBox3.Value
    End Select
    relist    ' remise a jour de la comboboxdans l'ordre et avec les  donnée a jour dynamiquement
End Sub
demo4.gif



correction pour la ligne d'enregistrement le(-1)
 
Dernière édition:
re
tiens j'ai remis les 26 lettres de l'alphabet dans la liste en orange
modifier 2/3 petites choses ici et là(déclaration de variable)
j'ai pas fait le bouton effacer je sais pas ce que tu veux faire avec donc .....

voila

tu n'a pas besoins de déplacer et redimensionner le textbox3 est assez grand je crois
quand tu tape dans la combo et que le mot n'existe pas il n'y a pas de dropdown et le bouton vert se transforme en "Ajouter"
si le mot existe le bouton devient "Modifier"

simple comme un bonjour 😉
 

Pièces jointes

Dernière édition:
Bonjour.
Changé ma procédure pour qu'elle puisse être utilisée pour plusieurs sortes de contrôles :
VB:
Private Sub AjusterObj(ByVal Obj As MSForms.Control, Optional ByVal HImposée As Long = 0)
   Dim HInit As Double, Haut As Double, Bas As Double, X As Double, Ctl As MSForms.Control
   HInit = Obj.Height: Haut = Obj.Top: Bas = Haut + HInit
   If HImposée > 0 Then
      Obj.Height = HImposée
   Else: X = Obj.Width
      Obj.AutoSize = True
      Obj.AutoSize = False
      Obj.Width = X: End If
   X = Obj.Height - HInit: If X = 0 Then Exit Sub
   For Each Ctl In Me.Controls
      If Ctl.Top > Bas Then Ctl.Top = Ctl.Top + X
      Next Ctl
   Me.Height = Me.Height + X
   End Sub
 

Pièces jointes

Je ne mets jamais un AutoSize True définitif à un contrôle de contenu variable de plusieurs lignes possibles. C'est un coup à ce qu'il prenne des dimensions chaotiques au gré des changements successifs, car il redimensionne chaque fois la largeur en fonction de la plus longue ligne telle qu'elle résultait du découpage précédent.
 
re
est ce que tu perds pas ligne 1 du textbox en visuel vérifie
chez moi si les deux avec le même height (label/textbox) le wrap est bon mais je perds la ligne 1 du textbox en visuel obligé de faire plus grand pour le textbox
Code employé
VB:
Private Sub TextBox1_Change()
With sizeur
.AutoSize = False
.Width = TextBox1.Width - 10
.Caption = TextBox1.Value
.AutoSize = True
End With
TextBox1.Height = sizeur.Height '+ 10 + 5
End Sub

Private Sub UserForm_Initialize()
sizeur.Height = TextBox1.Height
End Sub

VISUEL AVEC TEXTBOX PLUS GRAND
demo4.gif


MAINTENANT VISUEL AVEC TEXTBOX DE MEME HEIGHT
memeHEIGHT.gif
 
C'est pour ça que j'ai prévu une hauteur imposée (voir ma démo) afin de lui forcer, lors de la TextBox_Enter, une hauteur maximale, en vue de ne l'ajuster que lors de la TextBox_Exit.
Dans la TextBox_Change je ne l'ajuste pas si c'est le contrôle actif.
 
voila ce qu'il faut chez moi pour que le wrap soit identique et que la ligne soient visible tout le temps
COnclusion il faut toujours que le textbox soit plus grand de une dimension height de base +5
on ne peut donc pas prendre la dim du label pour décaler les controls mais celle résultante du textbox
test fait avec label sans bordure
VB:
Dim plusY#
'
Private Sub TextBox1_Change()
    With sizeur
        .AutoSize = False
        .Width = TextBox1.Width - 10 'si je met pas -10 ca ne colle pas avec le wrap avec bordure ou pas sur le label
        .Caption = TextBox1.Value
        .AutoSize = True
    End With
    TextBox1.Height = sizeur.Height + plusY
End Sub

Private Sub UserForm_Initialize()
    With sizeur
        .Font.Size = TextBox1.Font.Size
        .Font.Name = TextBox1.Font.Name
        .Caption = "A"
        .AutoSize = True
        plusY = .Height + 5 ' si je met pas +5 ou moins ca ne colle pas pour la first ligne  avec bordure ou pas sur le label
    End With
End Sub

demo4.gif
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
139
Réponses
5
Affichages
200
Réponses
3
Affichages
194
Réponses
8
Affichages
255
Réponses
20
Affichages
525
Réponses
18
Affichages
387
Réponses
9
Affichages
198
Retour