Agrandir une textBox selon le texte quelle contient

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

  • test lexique.xlsm
    271.6 KB · Affichages: 32

patricktoulon

XLDnaute Barbatruc
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 :p

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 ;)
 

patricktoulon

XLDnaute Barbatruc
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

  • test lexique (3).xlsm
    263 KB · Affichages: 4

Dranreb

XLDnaute Barbatruc
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.
 

patricktoulon

XLDnaute Barbatruc
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
 

patricktoulon

XLDnaute Barbatruc
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:

patricktoulon

XLDnaute Barbatruc
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

  • test lexique (3).xlsm
    264.7 KB · Affichages: 2
Dernière édition:

Dranreb

XLDnaute Barbatruc
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

  • Test.xlsm
    20.8 KB · Affichages: 4

Dranreb

XLDnaute Barbatruc
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.
 

patricktoulon

XLDnaute Barbatruc
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
 

Dranreb

XLDnaute Barbatruc
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.
 

patricktoulon

XLDnaute Barbatruc
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
 

Discussions similaires

Réponses
2
Affichages
210
Réponses
7
Affichages
279

Statistiques des forums

Discussions
312 497
Messages
2 088 992
Membres
104 000
dernier inscrit
dinelcia