[VBA ACCESS] objets introuvables dans Sub

Résolu/Fermé
panda - 19 juin 2013 à 15:30
 panda - 21 juin 2013 à 10:42
Bonjour,

j'ai une table [Options] ou je stocke des preferences utilisateurs, dont les couleurs de l'interface.
les valeurs des couleurs sont dans le champs "Paramètre" de cette table.

je voulais donc une Sub qui extrait ces couleurs de la Table et les assigne aux éléments concernés. pour cela j'ai bien sûr uniformisé le nom des éléments en question sur tous les formulaires.

ma Sub placée dans un module est la suivante:
-------------------------------------------------------------------------------------------------------
Sub MiseAuxCouleurs()

Dim coul1 As String, coul2 As String, coul3 As String

coul1 = DLookup("[Paramètre]", "Options", "[N°] = 2")
coul2 = DLookup("[Paramètre]", "Options", "[N°] = 3")
coul3 = DLookup("[Paramètre]", "Options", "[N°] = 4")

LblEntete.ForeColor = coul3
EntêteFormulaire.BackColor = coul1
Détail.BackColor = coul2

End Sub
------------------------------------------------------------------------------------------------------------
au début j'avais mis des Me. , mais je sais qu'il ne reconnait pas Me dans une Sub qui vient d'un module.
cependant même sans, il ne reconnait pas les objets et bloque sur "LblEntete.ForeColor = coul3" avec une erreur 424, objet requis.
comment faire pour qu'il reconnaisse bien LblEntete.ForeColor, EntêteFormulaire.BackColor et Détail.BackColor qui sont bien présents sur chaque formulaire ou je veux appeler ma Sub?

9 réponses

j'ai une solution même si elle ne me satisfait pas. j'ai transformé ma Sub en Function et rajouté le nom de la Form en argument:

----------------------------------------------------------
pagencours = Form.Name
MiseAuxCouleurs (pagencours)
-----------------------------------------------
Function MiseAuxCouleurs(pagencours)

Dim coul1 As String, coul2 As String, coul3 As String

coul1 = DLookup("[Paramètre]", "Options", "[N°] = 2")
coul2 = DLookup("[Paramètre]", "Options", "[N°] = 3")
coul3 = DLookup("[Paramètre]", "Options", "[N°] = 4")

Forms(pagencours).LblEntete.ForeColor = coul3
Forms(pagencours).EntêteFormulaire.BackColor = coul1
Forms(pagencours).Détail.BackColor = coul2

End Function
--------------------------------------------------------------------------------------

ça ne me satisfait qu'à moitié, il doit bien y avoir un moyen pour que "Forms(pagencours)" soit implicite.
j'ai essayé :
Me..LblEntete.ForeColor = coul3
ou
ActiveForm.LblEntete.ForeColor = coul3

mais sans succès.
je précise que mon appel a la function se trouve dans le form_load

auriez vous une autre solution s'il vous plait?
1
Chris 94 Messages postés 50978 Date d'inscription mardi 8 janvier 2008 Statut Modérateur Dernière intervention 17 février 2023 7 323
19 juin 2013 à 15:33
0
bonjour,

peut-être n'ai je pas suffisamment mis les formes, cependant il ne me semble pas avoir été incorrect.
je n'exige rien, n'utilise pas l'impératif... et le "Bonjour" y est.

cependant,je prends note de ta remarque et en tiendrai compte à l'avenir.

d'ailleurs, merci d'avance à tous ceux qui répondront où prendront le temps de lire ce sujet.
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
19 juin 2013 à 16:46
Bonjour,

si le code est dans un module, mettez le nom du formulaire devant les objets:

form_mom_formulaire.LblEntete.ForeColor = coul3

etc..

bonne suite
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
merci pour la réponse.
c'est un peu la solution que j'ai trouvé.
sauf que le but est d'appeler cette function de n'importe quel formulaire pour lui mettre les bonnes couleurs.
donc je ne peux y mettre un nom de formulaire en particulier.
il faudrait que ça s'applique automatiquement aux objets du formulaire en cours de chargement.
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
19 juin 2013 à 17:46
Re,

Application.Screen.ActiveForm ne peut etre utilise que si le formulaire est deja ouvert.
0
bizarrement lorsque j'utilise le code dans mon formulaire:

pagencours = Form.Name
MiseAuxCouleurs (pagencours)

et que je mets entre les 2 une

msgbox pagencours

il me retourne bien le nom du formulaire en train de charger.
alors dans la fonction MiseAuxCouleurs, il doit bien y avoir quelque chose de générique utilisable pour identifier mes objets quels que soit le formulaire en cours.
activeform, current form?
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
20 juin 2013 à 19:10
Re,

avoir le nom du formulaire dans un code du formulaire (ouverture, chargement) c'est normal, mais le formulaire n'est actif, il l'est a la fin du code.
0
ma solution reste donc la seule viable, c'est dommage.

merci pour toutes vos réponses, et votre aide.
0