Modifier la police de tous les contrôles d'un userform

GeoTrouvePas

XLDnaute Impliqué
Bonsoir tout le monde,

Je suis désolé de faire un post pour une histoire aussi basique que ça mais voilà plusieurs heures que je me prends la tête sur ce problème sans avancer d'un poil.

Je m'explique :

J'ai créée une procédure qui sera lancée à l'initialisation de chacun de mes userform pour y changer la police de tous les contrôles.

J'utilise donc :
Code:
Private Sub UserForm_Initialize()

    Call ChangerPolice(Me.Name)

End Sub

pour lancer directement cette procédure :
Code:
Sub ChangerPolice(NomUSF As String)

Dim Ctl As Control
Dim TaillePolice As Byte
Dim NomPolice As String

TaillePolice = 12
NomPolice = "Arial"

[COLOR="Red"]For Each Ctl In UserForms(NomUSF).Controls[/COLOR]
       
    If Ctl.Name <> "Titre" Then
        Ctl.Font.Size = TaillePolice
        Ctl.Font.Name = NomPolice
    End If

Next

End Sub

Mais voilà, tout ce que j'obtiens c'est une "incomptabilité de type" à la ligne marquée en rouge. Je me doute que c'est un problème de type de variable pour NomUSF ou que c'est mon expression Userforms(NomUSF) qui n'est pas correcte mais impossible de corriger ça.

Auriez vous une idée ?

Je mets un fichier exemple en pièce jointe au cas où (dans cet exemple, ma procédure se lance en cliquant sur le bouton, sinon on ne voit pas où se produit l'erreur).

Merci d'avance
 

Pièces jointes

  • ChangerPolice.xls
    27.5 KB · Affichages: 82

ROGER2327

XLDnaute Barbatruc
Re : Modifier la police de tous les contrôles d'un userform

Bonsoir GeoTrouvePas
Peut-être ainsi ?
Code:
[COLOR="DarkSlateGray"][B]Private Sub UserForm_Initialize()
    Call ChangerPolice([COLOR="Sienna"]Me[/COLOR])
End Sub


Sub ChangerPolice(NomUSF [COLOR="Sienna"]As UserForm[/COLOR])

Dim Ctl As Control
Dim TaillePolice As Byte
Dim NomPolice As String

TaillePolice = 12
NomPolice = "Arial"

For Each Ctl In [COLOR="Sienna"]NomUSF.Controls[/COLOR]
       
    If Ctl.Name <> "Titre" Then
        Ctl.Font.Size = TaillePolice
        Ctl.Font.Name = NomPolice
    End If

Next

End Sub[/B][/COLOR]
ROGER2327
#4046


Lundi 23 Phalle 137 (Lazare, gare, SQ)
16 Fructidor An CCXVIII
2010-W35-4T21:31:03Z
 
Dernière édition:

GeoTrouvePas

XLDnaute Impliqué
Re : Modifier la police de tous les contrôles d'un userform

Ben mince alors !

Je suis persuadé d'avoir déjà utilisé cette méthode là mais que ça ne marchais pas. J'ai pas du faire exactement comme ça.

Merci beaucoup Roger2327 et bonne soirée (nuit ? :D) !
 

GeoTrouvePas

XLDnaute Impliqué
Re : Modifier la police de tous les contrôles d'un userform

Ah bien vu Banzaï !

Je n'avais pas pensé à utiliser le numéro d'ordre pour désigner le userform. Intéressant mais ça risque juste d'être plus long suivant le nombre de userform.
En tout cas merci beaucoup pour cette solution très intéresante.

Bonne soirée
 

GeoTrouvePas

XLDnaute Impliqué
Re : Modifier la police de tous les contrôles d'un userform

Je relance le sujet car j'ai un soucis d'application de cette macro.

En fait sur certains userform, j'ai des contrôles multipages qui eux mêmes comprennent des frames. Apparement la macro ne "descend" pas jusqu'à modifier les contrôles compris dans ces groupes. Comment puis je faire pour boucler également sur ces contrôles ?
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : Modifier la police de tous les contrôles d'un userform

Bonjour le fil :),
En fait sur certains userform, j'ai des contrôles multipages qui eux mêmes comprennent des frames. Apparement la macro ne "descend" pas jusqu'à modifier les contrôles compris dans ces groupes. Comment puis je faire pour boucler également sur ces contrôles ?
J'ai fait un test avec la macro de Roger (en PJ) avec du multi page, des frames, groupés, etc., pas de soucis chez moi :confused:...
A + :cool:
 

Pièces jointes

  • Géo.xls
    39.5 KB · Affichages: 100
  • Géo.xls
    39.5 KB · Affichages: 104
  • Géo.xls
    39.5 KB · Affichages: 110

GeoTrouvePas

XLDnaute Impliqué
Re : Modifier la police de tous les contrôles d'un userform

ah ben euh effectivement, preuve à l'appui, ça marche.

Bon ben c'est que j'ai du foirer dans l'adaptation de la macro alors.

Merci JNP et désolé de t'avoir dérangé. J'ai fait le boulet sur ce coups là :p

D'habitude je prend toujours le temps de repartir d'un cas basique pour tester et faire évoluer une macro mais là je me suis un peu précipité et j'étais trop sur de mon coup. A retenir !
 

GeoTrouvePas

XLDnaute Impliqué
Re : Modifier la police de tous les contrôles d'un userform

Grrrrrrrrrrrrrrr !!!!!!!!! :mad:

Je reviens encore sur ce sujet.

J'ai voulu utiliser la méthode de Banzaï pour boucler sur tous les userforms de mon fichier mais ça ne marche pas.

Banzaï utilise cette méthode dans son exemple :

Code:
For I = 0 To UserForms.Count - 1

En fait, quoi que je fasse, "UserForms.Count" renvoi toujours la valeur 0. Après quelques recherches sur le net, on dirait que UserForms.Count ne renvoi que le nombre de Userform ajoutés par macro.

J'ai donc parcouru un excellent tuto de SilkyRoad et j'ai trouvé cette méthode :

Code:
[COLOR="Green"]Dim VBCmp As VBComponent[/COLOR]
Dim Ctrl As Control

[COLOR="Red"]For Each VBCmp In ThisWorkbook.VBProject.VBComponents[/COLOR]
    If VBCmp.Type = 3 Then
        For Each Ctl In VBCmp.Designer.Controls
....


mais ça me renvoi une type non défini par l'utilisateur sur la ligne verte et si je la court circuite, j'ai une "incomptabilité de type sur la ligne rouge.

Est ce que quelqu'un pourrait m'éclairer ?

Merci d'avance et bon week end à tous les Exceliens !
 

YANN-56

XLDnaute Barbatruc
Re : Modifier la police de tous les contrôles d'un userform

Bonsoir Geo finira par trouver, et à tous,

Le souci doit venir de l'identification préalable des Contrôles de l'USF

Code:
Dim MES_OUTILS_DANS_USF1 As Control

For Each MES_OUTILS_DANS_USF1  In Me.Controls  

   If TypeName(MES_OUTILS_DANS_USF1) = "Label" Then
         'Tu peux changer la Caption, et son Format
   End If
Sinon:

Code:
  If TypeName(MES_OUTILS_DANS_USF1) = "TextBox" Then
         'Tu peux changer la Value et son Format  (Ou le Text, je n'ai pas testé!)
   End If
Pour ces contrôles, la définition de leur texte est différente.

Mais,peut-être n'ai-je pas tout compris par flemme d'avoir tout lu comme d'hab. :)

Amicalement.

Yann
 

ROGER2327

XLDnaute Barbatruc
Re : Modifier la police de tous les contrôles d'un userform

Bonsoir à tous
Je suis presque d'accord avec Banzai64 à ceci près que je dirais plutôt que Userforms.Count renvoie le nombre d'UserForm chargés.​
ROGER2327
#4048


Mardi 24 Phalle 137 (Sainte Orchidée, aumonière, SQ)
17 Fructidor An CCXVIII
2010-W35-5T17:14:02Z
 

GeoTrouvePas

XLDnaute Impliqué
Re : Modifier la police de tous les contrôles d'un userform

Merci Banzaï, Yann et Roger !

@Yann :

Gagné ! Tu es à coté de la plaque ! :D. Le sujet initial était de savoir "comment boucler sur tous les contrôles d'un userform" et vient de basculer vers "comment boucler sur tous les userform d'un projet". En tout cas, ça n'a jamais été de savoir comment faire pour adapter le code au type de contrôle ^^

@Banzaï et Roger :

Je suis Roger, il me semble bien que c'est le nombre de Userform chargé, mais vu que j'ai regardé en vitesse, je ne garantie rien.

@tout le monde :

Mais bon, tout ça ne fait pas avancer ma recherche :p. Il doit quand même bien y avoir un moyen de boucler sur tous les userforms dès l'ouverture d'un application quand même !!!!!!:mad::mad::mad:

Edit : Ce qui m'étonne le plus dans tout ça, c'est que la méthode donnée par Silkyroad sur un tuto de développez.com ne fonctionne pas. C'est quand même pas n'importe qui ;). Je rappelle la boucle qui paraît pourtant correcte :

Code:
Dim VBCmp As VBComponent
Dim Ctrl As Control

For Each VBCmp In ThisWorkbook.VBProject.VBComponents
    If VBCmp.Type = 3 Then
        For Each Ctl In VBCmp.Designer.Controls
....
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : Modifier la police de tous les contrôles d'un userform

Re :),
Code:
[COLOR=green]Dim VBCmp As VBComponent[/COLOR]
Dim Ctrl As Control
[COLOR=red]For Each VBCmp In ThisWorkbook.VBProject.VBComponents[/COLOR]
    If VBCmp.Type = 3 Then
        For Each Ctl In VBCmp.Designer.Controls
....
mais ça me renvoi une type non défini par l'utilisateur sur la ligne verte et si je la court circuite, j'ai une "incomptabilité de type sur la ligne rouge.
Ce type de message me faisait penser à une référence non ouverte, et en ouvrant "Microsoft Visual Basic for Application Extensibility 5.3", ça fonctionne :p.
Bon courage :cool:
 

GeoTrouvePas

XLDnaute Impliqué
Re : Modifier la police de tous les contrôles d'un userform

Gagné JNP !!!

ça change quelque chose ! En fait j'ai trouvé ça dans le courant de la nuit en lisant un peu plus en détail le tuto. Mais ça ne veut pas dire que ça marche :p

Maintenant j'ai une erreur sur :

Code:
For Each VBCmp In ThisWorkbook.VBProject.VBComponents

Mais pas toujours la même. Des fois l'accès au programme n'est pas fiable et des fois la méthode VBProject de n'objet workbook échoue :D
 

Discussions similaires

Statistiques des forums

Discussions
312 389
Messages
2 087 899
Membres
103 675
dernier inscrit
axona