[VBA ACCESS] objets introuvables dans Sub

Résolu
panda -  
 panda -
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. panda
     
    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
  2. panda
     
    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
  3. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. panda
     
    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
  6. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,

    Application.Screen.ActiveForm ne peut etre utilise que si le formulaire est deja ouvert.
    0
  7. panda
     
    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
  8. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
  9. panda
     
    ma solution reste donc la seule viable, c'est dommage.

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