XL 2010 Centrer VERTICALEMENT un texte dans un TextBox

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 !

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

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

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

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

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

voilà qui est fait
 
- 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

Retour