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

patricktoulon

XLDnaute Barbatruc
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 une astuce simple qui consiste a mettre une image de 1 pixel (meme 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
on a avec les api la possibilité de le faire (voir lexemple que j'ai donné de la discussion ci dessous )
mais on a une autre possibilité
a savoir utiliser le picture d'un commandbarcontrolbutton
et là les choses deviennent tout de suite plus simples
ca consiste a ;
  1. créer une shape transparente et sans contour
  2. la copier(copypicture)
  3. la supprimer
  4. creer une commandbar popup temporaire(sans l'afficher)
  5. ajouter un controlbutton dans cette barre et faire un paste face pour mettre l'image dans le bouton
  6. et bien il ne reste plus qu'a mettre l'image du bouton dans le label .picture=le bouton.picture
  7. aligner au centre le picture
et voila le tour est joué votre texte dans le label est centré horizontalement et verticalement


demo.gif


le code utilisé dans la demo
VB:
'******************************************
'sujet: centrer verticalement le texte de la caption d'un label dans un userform
'date:10/11/2021
'auteur: patricktoulon sur exceldownloads
'version:2.0
' a l'aide d'un bouton dans une commandbarre temporaire et dynamique
'******************************************

Private Sub CommandButton1_Click()
    centrer_le_text Label1
End Sub

Sub centrer_le_text(obj As msforms.Label)
 Dim barre As CommandBar, bout As CommandBarControl, shap As Shape
 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 obj
        .Picture = bout.Picture
        .PicturePosition = fmPicturePositionCenter
    End With
    barre.Delete
End Sub

model avec les api en macro 4 pour ceux que ça intéresse
 

Pièces jointes

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

patricktoulon

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

Statistiques des forums

Discussions
315 096
Messages
2 116 175
Membres
112 677
dernier inscrit
Justine11