centrer verticalement le texte de la caption d'un control Label dans un userform

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 !

patricktoulon

XLDnaute Barbatruc
Mise a jour le 18/11/2025

Bonjour a tous

cette question vient de ressortir dans le forum j'ai pensé que ca devait etre mis dans les astuces
en effet le text dans un label ne peut etre centré qu'horizontalement avec la properties(textalign)
il existe plusieurs astuces simples


méthode 1 avec une commandbars

Elle qui consiste à mettre une image de 1 pixel (même 1 point ca fonctionne aussi) transparente dans le .picture et de mettre le picture aligné au centre.
reste que l'on doit avoir cette image dispo dans le disque dur
je vous propose une astuce dans l'astuce
le jeu consiste a fabriquer cette image dynamiquement

à savoir utiliser le picture d'un commandbarcontrolbutton
et là les choses deviennent tout de suite plus simples

Cela consiste à.
  1. Créer une shape
  2. la copier
  3. La coller dans le commandbarbutton avec pasteFace
  4. Utiliser son .picture qui renvoie un ipicturedisp

et voila le tour est joué votre texte dans le label est centré horizontalement et verticalement

VB:
    'date:10/11/2021
    'auteur: patricktoulon sur exceldownloads
    'version:2.1 (2021) sans créeation de commandbars mais en utilisant la commandbars (1)
    ''******************************************
    Private Sub CommandButton1_Click()
        centrer_le_text Label1
    End Sub


    Sub centrer_le_text(obj As msforms.Label)
        Dim bout As CommandBarControl, shap As Shape
        Set bout = CommandBars(1).Controls.Add(Type:=msoControlButton)
        Set shap = ActiveSheet.Shapes.AddShape(msoShapeRectangle, 0, 0, 1, 1)
        With shap: .Line.Visible = msoFalse: .Fill.Visible = msoFalse: .CopyPicture: .Delete: End With 'copypicture=copie en WMF(garde la transparence)
        bout.PasteFace
        With obj
            .Picture = bout.Picture
            .PicturePosition = fmPicturePositionCenter
            .TextAlign = 2
        End With
        CommandBars(1).Reset
    End Sub

La méthode 2

On opte pour un renderer automatique excité en interne avec un stdpicture
Je pense que le code parle de lui-même pas la peine d'en dire plus
Avantage (rapidité,pluri compatible 2007 à 2024)
Utilisation de librairie interne sans ref a activer

Depuis la version 2007, un Label affiche son texte verticalement centré automatiquement dès qu’une image (même vide) est définie dans sa propriété .Picture.
Il suffit donc d’assigner n’importe quelle instance de StdPicture, même vide, pour activer le centrage interne du teste dans les labels

Comment ca marche
En fait si l'on devait utiliser une vraie image loadée sur le disque dur il faudrait que l'image mesure exactement la dimension au pixel près du label
le moteur du rendu interne de l'activX renvoie le texte au centre par-dessus l’image car il considère que comme aucune data se trouve dans l'image ,il l'interprète à la dimension du conteneur en l'occurrence le contrôle Label (sans même régler le pictureposition(cest pas la peine)

Et voici la simplicité même

VB:
    Private Sub UserForm_Activate()
    Dim stdp As New StdPicture
    Label1.Picture = stdp
    End Sub


Et diverses autres avec les api par exemple

modèle avec les api en macro 4 pour ceux que ça intéresse


Patrick
 

Pièces jointes

Dernière édition:
petite mise a jour
pour que la mémoire n'est pas a prendre en charge la création de la command bars( qui se produit apres l'ouverture du fichier et à la premiere création) on se sert d'une qui existe déjà en l’occurrence ici la commandbars(1)
c'est encore plus rapide
VB:
'******************************************
'sujet: centrer verticalement le texte de la caption d'un label dans un userform
'       a l'aide d'un bouton dans une commandbarre temporaire et dynamique
'date:10/11/2021
'auteur: patricktoulon sur exceldownloads
'version:2.1 (2021) sans créeation de commandbars mais en utilisant la commandbars (1)
''******************************************

Private Sub CommandButton1_Click()
    centrer_le_text Label1
End Sub

Sub centrer_le_text(obj As msforms.Label)
    Dim bout As CommandBarControl, shap As Shape
    Set bout = CommandBars(1).Controls.Add(Type:=msoControlButton)
    Set shap = ActiveSheet.Shapes.AddShape(msoShapeRectangle, 0, 0, 1, 1)
    With shap: .Line.Visible = msoFalse: .Fill.Visible = msoFalse: .CopyPicture: .Delete: End With 'copypicture=copie en WMF(garde la transparence)
    bout.PasteFace
    With obj
        .Picture = bout.Picture
        .PicturePosition = fmPicturePositionCenter
        .TextAlign = 2
    End With
    CommandBars(1).Reset
End Sub
Bonjour,
Je reviens sur cette discussion, qui date, afin de vous demander si il est possible de centrer le texte sans passer par un bouton de commande ?
Merci par avance et merci à M. TOULON pour son exemple
 
Bonjour @NONO14
Tu mets simplement "centrer_le_text Label1" dans le activate du userform

Bien sûr tu changes "Label1" pour le nom de ton Label ; je le dis au cas ou 😉

Patrick
Bonjour Patrick
Toutes mes excuses d'avoir tardé à te répondre, mais j'ai rencontré quelques soucis.
Merci pour ta réponse, cependant j'ai opté pour une autre solution que j'ai trouvé plus facile (je ne me rappelle plus de l'auteur, mais je le remercie également). Je pense avoir terminé mon application et je vais la joindre à une nouvelle discussion pour avis. Je suis convaincu qu'il doit y avoir des codes à améliorer.
Encore merci et je réitère mes excuses.
 
Bonjour @NONO14
Tu constateras que je l'ai mise à jour en post #1
Et que j'ai donné une solution encore plus simple
Voilà comment j'ai fait :
J'ai créé une Frame dans laquelle j'ai mis un Label puis ce code et ça fonctionne bien.
VB:
'On centre le texte dans le Label
    With Me.Lbl_NbreSaisie
        .Width = 1000
        .AutoSize = True
        .AutoSize = False
        .Top = (Frame1.Height - .Height) / 2 - 2
        .Left = (Frame1.Width - .Width) / 2
 
a ce n'est pas la même chose :
Là c'est centrer un contrôle dans un autre
Ce qui implique un encadré type (autres label ou frame ou userforms
Ça rien a voir avec un vrai centrage de texte
 
- 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
Retour