[VBA ACCESS] objets introuvables dans Sub

Résolu
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

  1. ma solution reste donc la seule viable, c'est dommage.

    merci pour toutes vos réponses, et votre aide.
    1. 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.
      1. 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?
        1. Re,

          Application.Screen.ActiveForm ne peut etre utilise que si le formulaire est deja ouvert.
          1. 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.
            1. 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
              1. 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. 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.