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).
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]
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.
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 ?
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 ?
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à
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 !
Re : Modifier la police de tous les contrôles d'un userform
Grrrrrrrrrrrrrrr !!!!!!!!!
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 !
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.
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 ! . 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 . 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 !!!!!!
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
....
[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 .
Bon courage
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
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