Format automatique d'une TextBox

Bonjour à tous,

Est-il possible de demander à une TexBox de s'agrandir en fonction du texte quelle contient? Dans l'affirmative, comment procéder?

Merci

Bonjour,

Avec TextBox.Height property (Access) | Microsoft Learn vous pouvez modifier la hauteur d'une textbox (vers le bas).

Le vrai problème est de calculer quand ajouter une ligne. En effet avec les polices de caractère par défaut (tahoma, calibri), les caractères ont des largeurs variables. De fait on reviendra plus vite à la ligne en écrivant "mmmm" que "llll".

Cependant, vous pouvez calculer grosso-modo combien de caractères vous pouvez rentrer avant de faire un retour à la ligne. Disons pour l'exemple 10.

En écrivant quelque chose comme ceci vous devriez redimensionner correctement :

With TextBox
  .Height = WorksheetFunction.RoundUp(len(.Text) / 10#) * .Height
End With

Bonjour,

Je vous remercie et fais un test au plus tôt

Salut Djodjo, Saboh

une façon de faire qui serait plus facile à calculer serait d'utiliser une fonte MONOSPACE où chaque caractère occupe le même espace.
Ainsi, tu calcules à coup sûr quand tu dois agrandir ta TextBox.

A+

JE n'y arrive pas , alors je vous joint mon fichier

Dans la CombBox, je sélectionne Syndic, la définition étant longue, j'aimerai que la TextBox s'agrandisse beaucoup plus.

Merci

14test-lexique.zip (409.19 Ko)

Salut Djodjo,

j'ai un début de commencement de solution très empirique mais cela passe par :
- la fonte de TextBox3 doit être une fonte MONOSPACE : j'ai choisi ici 'Consolas' en size 12
- revoir absolument tes définitions et y enlever tous les sauts de lignes inutiles. Laisse les phrases sans les couper!
Introduis les paragraphes que tu veux mais ne coupe pas les phrases : la fonction 'Multiline' de la TextBox s'en chargera!

Private Sub TextBox3_Change()
'
Dim iIdx%
'
For X = 1 To Len(TextBox3.Text)
    iIdx = iIdx + 1
    If iIdx > 60 Or Mid(TextBox3.Text, X, 1) = Chr(10) Then
        iRow = iRow + 1
        iIdx = 0
    End If
Next
TextBox3.Height = ((iRow + 1) * 20) + 25
'
End Sub

À tester mais je n'aurai pas grand'chose de mieux en magasin, je pense!

A+

11djodjo.xlsm (774.09 Ko)

Salut Djodjo,

version améliorée.
J'y tiens compte de longueur du texte pour déterminer la taille de fonte afin que tout tienne à l'écran, autant que faire se peut, évidemment!
Sur la largeur de la TextBox et selon la taille de fonte, on peut y coller 130 ou 170 caractères = petit calcul empirique à affiner, sans doute.

Private Sub TextBox3_Change()
'
Dim iRow%, iLen%, iIdx%, iStep%
'
iRow = 1
iLen = Len(TextBox3.Text)
TextBox3.Font.Size = IIf(iLen > 1500, 10, 12)
'
For X = 1 To Len(TextBox3.Text)
    iIdx = iIdx + 1
    If iIdx > IIf(iLen < 1500, 120, 160) Or Mid(TextBox3.Text, X, 1) = Chr(10) Then
        iRow = iRow + 1
        iIdx = 0
    End If
Next
'
iStep = IIf(iLen > 1500, 12, 20)
TextBox3.Height = iRow * iStep
'
End Sub

Déjà pas si mal, non?

A+

17djodjo-v2.xlsm (775.94 Ko)

Effectivement c'est super et je vous en remercie

Un grand merci à vous

Salut Djodjo,

tu peux mettre ceci à la place. Tout compte fait, ça calcule moins de lignes pour moins d'espace vide sous le texte.
Avec '130' et '170' au lieu de '120' et '160'.

If iIdx > IIf(iLen < 1500, 130, 170) Or Mid(TextBox3.Text, X, 1) = Chr(10) Then

A+

Et une petite dernière qui calcule tout ça en tenant compte également d'un changement de largeur de la TextBox elle-même.
On ne sait jamais!

Pour un calcul "optimal", vu la "technique de pointe" utilisée , il faudrait que tu aies la patience et la rigueur lors de la rédaction de tes articles de ne pas laisser d'espace entre les ":" et autres "; - ! - ?,..." et le mot qui les précède.

Bon, cette fois, sauf problème, je te laisse à tes occupations!

A+

12djodjo-v3.xlsm (776.01 Ko)

Bonjour à tous,

Félicitations @curulis,

Par contre l'espace avant les doubles ponctuations est une règle de ponctuation en langue française. En théorie c'est un espace insécable. C'est celui qu'insère Word par défaut si omis. Mais j'imagine que sur Excel, si tapé à la main, ce sont des espaces normaux. Un contournement pourrait etre d'ajouter un raccourci clavier comme MAJ+ESPACE pour insérer un espace insécable, ou bien dans les règles d'autocorrection de Excel transformer les "[espace]:" par "[espace insecable]:".

Salut Saboh,

...pensais plus à l'espace insécable! Bonne idée autant que logique!
Si Djodjo applique tout ce qui est mentionné ci-dessus, ça devrait passer crème!

Bonne journée!

Merci à vous deux je vais essayé de comprendre et vous tiens au courant.

Les espaces insécable je ne connaissais pas

Merci dans l'immédiat

Rechercher des sujets similaires à "format automatique textbox"