XL 2010 Centrer VERTICALEMENT un texte dans un TextBox

Magic_Doctor

XLDnaute Barbatruc
Bonsoir,

Centrer horizontalement un texte dans un TextBox, cela ne pose pas de problème. En revanche, centrer ce même texte verticalement, c'est une autre paire de manches... Dans mon cas, le texte est bien centré horizontalement mais tout en haut du TextBox, ce qui n'est pas très esthétique. J'ai bien essayé avec un saut de ligne, et là il se retrouve tout en bas du TextBox.
Comment s'y prendre si c'est possible ?
 

patricktoulon

XLDnaute Barbatruc
Bonjour
centrer automatiquement en vertical sera compliqué
pour centrer une ligne il faut un textbox pouvant afficher 3 lignes minimum
1 ligne au dessus et une ligne en dessous
si le textbox est plus petit que ça ,ça ne sera pas possible

autre possibilité mettre le textbox dans un frame et centrer le textbox dans la frame et ajuster la taille du textbox au nombre de ligne utile
et là on entre dans la difficulté si le textbox est en multiligne et le wordwrap a true car il ajuste lui même
il te faudra l'astuce (bien connue)pour déterminer le nombre de ligne obtenu et faire le calcul

l'astuce pour dimentionner un textbox par rapport au nombre de ligne est bien connue aussi (il y en a deux en fait)
 

job75

XLDnaute Barbatruc
Bonjour Magic_Doctor, cp4, patricktoulon,

Un truc tout à fait capillotracté :
VB:
Private Sub CommandButton1_Click() 'bouton Centrer
Label1.Width = 1000
Label1 = TextBox1
Label1.AutoSize = True
Label1.AutoSize = False
Label1.Top = TextBox1.Top + (TextBox1.Height - Label1.Height) / 2
Label1.Left = TextBox1.Left + (TextBox1.Width - Label1.Width) / 2
TextBox1 = ""
Label1.Visible = True
End Sub

Private Sub Label1_Click()
TextBox1 = Label1
Label1.Visible = False
TextBox1.SetFocus
End Sub

Private Sub TextBox1_Enter()
Label1_Click
End Sub

Private Sub UserForm_Initialize()
Label1 = ""
End Sub
A+
 

Pièces jointes

  • TextBox(1).xlsm
    24.1 KB · Affichages: 20

job75

XLDnaute Barbatruc
Un peu mieux avec ce fichier (2) :
VB:
Private Sub CommandButton1_Click() 'bouton Centrer
With Label1
    .Width = 1000
    .AutoSize = True
    .AutoSize = False
    .Top = TextBox1.Top + (TextBox1.Height - .Height) / 2
    .Left = TextBox1.Left + (TextBox1.Width - .Width) / 2
    .Visible = True
End With
TextBox1.ForeColor = TextBox1.BackColor
End Sub

Private Sub Label1_Click()
Label1.Visible = False
TextBox1.ForeColor = vbBlack
TextBox1.SetFocus
End Sub

Private Sub TextBox1_Enter()
Label1_Click
End Sub

Private Sub TextBox1_Change()
Label1 = TextBox1
End Sub

Private Sub UserForm_Initialize()
Label1 = ""
End Sub
 

Pièces jointes

  • TextBox(2).xlsm
    24.6 KB · Affichages: 28

Magic_Doctor

XLDnaute Barbatruc
Bonsoir,

Merci à tous pour vos réponses et désolé de ne pas avoir pu répondre plus tôt.
J'ai retenu la solution de job (post #5). Le texte est bien centré dans le TextBox. J'ai fait quelques modifications pour obtenir le résultat souhaité (voir PJ). Un problème subsiste.
- On ouvre le formulaire et le TextBox affiche "couleur actuelle" : OK
Mais je voudrais que le TextBox ne soit pas sélectionné (focus out) et que l'on ne puisse rien y rentrer. En somme qu'il soit bloqué avec son affichage ("couleur actuelle").
Comment s'y prendre ?
 

Pièces jointes

  • TextBox(2) (1).xlsm
    20.5 KB · Affichages: 13

Magic_Doctor

XLDnaute Barbatruc
Bonjour,

Je reviens sur ce fil, ayant fortuitement trouvé une solution simplissime ici, même si je n'en ai pas saisi toute la subtilité.
La preuve en image (j'ai pris un Label plutôt qu'un TextBox) : voir PJ.

Bonne journée.
 

Pièces jointes

  • Test2.xlsm
    35.3 KB · Affichages: 21
Dernière édition:

patricktoulon

XLDnaute Barbatruc
Bonjour
AH OUI !!! je connaissais cette astuce de l'image de 1 pixel transparente
merci Magic_doctor pour la piqûre de rappel
on peut le faire dynamiquement aussi avec api en image metafichier
on crée un shape on le laisse transparent et sans bordure
on le sauf en metafichier(qui garde la transparence ) et on le met dans le .picture
tout ça dynamiquement sur DVP me semble t il j'avais mis un exemple
 

patricktoulon

XLDnaute Barbatruc
re
tiens je l'ai retrouvé et je l'ai adapté en macro 4 pour ne pas avoir a déclarer les api
voila le tout dynamique
pour ceux qui ont un PC un peu lent débloquer les lignes en vert
pour info meme une image de 1 point ( soit 1.33333333333333 pixel) en dpi 96(100)) fonctionne

j'avais aussi fait un model avec le picture d'un commandbarbutton dynamique , je vais essayer de retrouver cette version
purée ca me rajeuni pas ça 😂🤣😅😂
 

Pièces jointes

  • centrer verticalement le texte d'un label by patricktoulon.xlsm
    20.5 KB · Affichages: 7

patricktoulon

XLDnaute Barbatruc
re
et allez en fouillant bien dans mes vieux trucs
la méthode sans api avec un commanbarbutton dynamique c'est simplissime

le code de la sub


VB:
Sub centrer_le_text(obj As Object)
 Dim barre, bout, shap
 Set barre = Application.CommandBars.Add("tempo", msoBarPopup, , True)
    Set bout = barre.Controls.Add(Type:=msoControlButton)
    Set shap = ActiveSheet.Shapes.AddShape(msoShapeRectangle, 0, 0, 1, 1)
    With shap
        .Line.Visible = msoFalse
        .Fill.Visible = msoFalse
        .CopyPicture    'copypicture=copie en WMF(garde la transparence)
        .Delete
    End With
    bout.PasteFace
    With Label1
        .Picture = bout.Picture
        .PicturePosition = fmPicturePositionCenter
    End With
    barre.Delete
End Sub

reste plus qu'a l'appeler comme suit dans une sub ou un event
exemple un bouton dans le userform
Code:
Private Sub CommandButton1_Click()
    centrer_le_text Label1
End Sub
voilà comme quoi quand les demandes sont clarifiées c'est tout de suite plus simple ;)
Enjoy
 

Pièces jointes

  • centrer verticalement le texte d'un label by patricktoulon V 2.0 .xlsm
    21.2 KB · Affichages: 18

patricktoulon

XLDnaute Barbatruc
voilà qui est fait
 

Discussions similaires

Statistiques des forums

Discussions
312 305
Messages
2 087 078
Membres
103 455
dernier inscrit
saramachado