[Résolu] Harmoniser tous les boutons

alias_2003

XLDnaute Occasionnel
Bonjour à tous,
J'ajoute souvent des images aux boutons de mes userforms et un détail me gêne... Ne peut-on pas harmoniser la position de l'image et du texte pour tous les boutons ?
En effet, l'image peut se retrouver au centre ou totalement à gauche selon la taille du texte du bouton... Je peux rajouter des espaces mais je ne sais jamais combien en ajouter...
Ci-joint un exemple !
Si quelqu'un avait une idée...
Merci beaucoup,
Amicalement
 

Pièces jointes

  • Bouton.xlsm
    16.8 KB · Affichages: 43
  • Bouton.xlsm
    16.8 KB · Affichages: 37
Dernière édition:

Lone-wolf

XLDnaute Barbatruc
Re : Harmoniser tous les boutons

Bonjour alias,

Je peux rajouter des espaces mais je ne sais jamais combien en ajouter...

Si dans les propriétés des boutons - Caption - tu arrive à inserer des éspaces, à toi ensuite d'en rajouter ou d'en enlever; puis ensuite tout dépend de la grandeur de l'image et de la longueur du texte. De plus nous on ne peux rien faire, parce que c'est à toi de decider; on ne peux pas mettre 3 espaces si toi tu en veux 6, si tu comprend ce que je veux dire.


Regarde si ceci te convient.

Code:
Private Sub UserForm_Initialize()
Me.CommandButton1.Caption = "Enregistrer" & Chr(10) & "  une demande"
Me.CommandButton2.Caption = "   Ajouter une" & Chr(10) & "   demande"
End Sub



A+ :cool:
 
Dernière édition:

alias_2003

XLDnaute Occasionnel
Re : Harmoniser tous les boutons

Bonjour Lone-wolf, le Forum,
Merci beaucoup de ta réponse ! C’est ce que je fais actuellement, mais selon la résolution du pc, l’affichage varie…
Il n’y a peut-être pas de solution !
Un moment, j’avais pensé transférer le caption dans une cellule d’une feuille, puis calculer le nombre de caractère du(ou des mots) du caption. Et avec ce nombre, calculer le nombre d’espaces à ajouter…
Mais ça devient très compliqué avec les noms très longs (comme « enregistrer une demande ») pour lesquels on aura forcément un retour à la ligne…
Merci beaucoup
Amicalement
 

Modeste geedee

XLDnaute Barbatruc
Re : Harmoniser tous les boutons

Bonsour®
Il n’y a peut-être pas de solution !

:rolleyes:
il ne faut pas désespérer...

mais il y a 5 grosses contraintes
- le texte affiché reprend l'alignement de l'objet picture
- le texte affiché doit être en police à pas fixe
- le texte affiché ne doit pas etre en passage à la ligne auto (Wordwrap=false)
- les boutons doivent permettre l'affichage du texte le plus long
- si la largeur du bouton est insuffisante : la picture et la police seront déformés
Capture.JPG

VB:
Private Sub UserForm_Initialize()
Dim texte As String
Dim MaxL As Integer
MaxL = 30 '--------------- valeur à adapter

With Me.CommandButton1
        '*=*=*=*=*=*=*=*=
        ' on pourra supprimer cette partie de code  si l'on fixe lors de la conception ces paramétres
                            .Font.Size = 8
                            .Font = "Courier new"
                            .Width = .Font.Size * MaxL
                            .WordWrap = False
        '*=*=*=*=*=*=*=*=
         texte = "Enregistrer une demande"
         .Caption = Left(texte & String(MaxL - Len(texte) / 2, Chr(32)), MaxL)
 End With
 
 With Me.CommandButton2
  '*=*=*=*=*=*=*=*=
        ' on pourra supprimer cette partie de code  si l'on fixe lors de la conception ces paramétres
                            .Font.Size = 8
                            .Font = "Courier new"
                            .Width = .Font.Size * MaxL
                            .WordWrap = False
        '*=*=*=*=*=*=*=*=
         texte = "Ajouter une demande"
         .Caption = Left(texte & String(MaxL - Len(texte) / 2, Chr(32)), MaxL)
 End With
 
 With Me.CommandButton3
  '*=*=*=*=*=*=*=*=
        ' on pourra supprimer cette partie de code  si l'on fixe lors de la conception ces paramétres
                            .Font.Size = 8
                            .Font = "Courier new"
                            .Width = .Font.Size * MaxL
                            .WordWrap = False
        '*=*=*=*=*=*=*=*=
         texte = "AbcdefGhijklMnopqrStuvwxy"
         .Caption = Left(texte & String(MaxL - Len(texte) / 2, Chr(32)), MaxL)
 End With
End Sub
 

Pièces jointes

  • Bouton.xlsm
    23.2 KB · Affichages: 36
  • Bouton.xlsm
    23.2 KB · Affichages: 31
  • Capture.JPG
    Capture.JPG
    99.2 KB · Affichages: 29

alias_2003

XLDnaute Occasionnel
Re : Harmoniser tous les boutons

Bonjour à tous,
La réponse de Modeste geedee est vraiment parfaitement adaptée à mon besoin !
@ Modeste geedee : serait-il envisageable d'avoir une boucle qui applique cette macro tous les boutons de l'userform ? On n'aurait besoin de de renseigner le texte dans l'userform_initialize ??
Merci mille fois !
Bonne journée ;)
 

Modeste geedee

XLDnaute Barbatruc
Re : Harmoniser tous les boutons

Bonsour®
La réponse est vraiment parfaitement adaptée à mon besoin !
serait-il envisageable d'avoir une boucle qui applique cette macro tous les boutons de l'userform ? On n'aurait besoin de de renseigner le texte dans l'userform_initialize ??
une boucle basée sur le plus long texte contenu(lors la conception) dans un bouton
on pourra cependant affecter une longueur minimale :rolleyes:
VB:
Private Sub UserForm_Initialize()
Dim texte As String
Dim MaxL As Integer
Dim cmdb As MSForms.Control
MaxL = 10 '--------------- valeur mini à adapter
'--------------------------------------
' on balaie une premiere fois les CommandButtons
' pour récuper la longueur maxi (MaxL) épurée des espaces redondants
For Each cmdb In UserForm1.Controls
  If TypeOf cmdb Is MSForms.CommandButton Then
        MaxL = IIf(Len(Application.Trim(cmdb.Caption)) > MaxL, Len(Application.Trim(cmdb.Caption)), MaxL)
  End If
 Next
 '------------------------------------
' on balaie une seconde fois pour uniformiser la taille des commandbuttons
For Each cmdb In UserForm1.Controls
  If TypeOf cmdb Is MSForms.CommandButton Then
        With cmdb
                '*=*=*=*=*=*=*=*=
                ' on pourra supprimer cette partie de code  si l'on fixe lors de la conception ces paramétres
                .Font.Size = 8
                .FontName = "Courier new"
                .Width = .Font.Size * MaxL
                .WordWrap = False
                '*=*=*=*=*=*=*=*=
                 texte = Application.Trim(.Caption)
                 .Caption = Left(texte & String(MaxL - Len(texte) / 2, Chr(32)), MaxL)
         End With
 End If
 Next
end sub
 

Statistiques des forums

Discussions
312 329
Messages
2 087 334
Membres
103 520
dernier inscrit
Azise