[VBA/Access] Utilisation de Me dans un module

Résolu
nirG95 Messages postés 319 Statut Membre -  
nirG95 Messages postés 319 Statut Membre -
Bonjour,

Dans un module j'ai le code suivant :

Function hiddengroup(name_group As String)
Dim ctl As Control

For Each ctl In Form_Formulaire1.Controls
        If Left(ctl.Name, 3) = name_group Then
            ctl.Visible = False
        End If
Next ctl
End Function


cependant, je voudrai que ce module fonctionne sur plusieurs types de formulaires. Mais quand je met :

Function hiddengroup(name_group As String)
Dim ctl As Control

For Each ctl In Me.Controls
        If Left(ctl.Name, 3) = name_group Then
            ctl.Visible = False
        End If
Next ctl
End Function


J'ai une erreur qui me dit : Erreur de compilation / Utilisation incorrect du mot clé me.

Si vous pouvez me mettre dans la voie :)

Merci d'avance.

Cordialement.
Configuration: Windows Vista Internet Explorer 8.0

18 réponses

  1. nirG95 Messages postés 319 Statut Membre 32
     
    Une petite aide s'il vous plait :)
    0
  2. Utilisateur anonyme
     
    Bonjour,

    Je ne suis pas expert de VBA Access mais je puis vous proposer ceci :

    1.) L'utilisation de l'instruction [ Forms.Count ] retourne le nombre de formes "chargé(s)".
    .....Vous devez donc gérér la propriété [ Forms.Item(Boucle).Name ] pour valider le nom
    ..... du formulaire ciblé ...

    2.) Le formulaire est passé en paramètre comme objet de type "Form" en deuxième argument.

    3.) La fonction retourne un booléen à vrai si et seulement si un contrôle du formulaire est rendu invisible.

    Option Compare Database
    Option Explicit
    
    Sub CacheControle()
    
        Dim Etiquette As String
        Dim Reponse As Boolean
        Dim Texte As String
        Dim Limite As Long, Boucle As Long
        
        Reponse = False
        Etiquette = "cmd"
        
        Limite = (Forms.Count - 1)
        
        For Boucle = 0 To Limite
            Reponse = HiddenGroup(Etiquette, Forms.Item(Boucle))
        Next Boucle
    
        If (Reponse) Then
            Texte = "Réussi."
        Else
            Texte = "Échec."
        End If
        MsgBox Texte
    
    End Sub
    '
    
    
    Private Function HiddenGroup(ByVal name_group As String, _
                                 ByRef Frm As Form) As Boolean
    
        Dim Ctl As Control
        
        On Error GoTo HiddenGroup_Err
    
        HiddenGroup = False
        For Each Ctl In Frm.Controls
            If Left(Ctl.Name, 3) = name_group Then
                Ctl.Visible = False
                HiddenGroup = True
            End If
        Next Ctl
        
    
    HiddenGroup_Exit:
        Exit Function
    
    HiddenGroup_Err:
        MsgBox Error$
        Resume HiddenGroup_Exit
    
    End Function
    '
    


    Ais-je bien compris votre demande ?

    Lupin
    0
  3. nirG95 Messages postés 319 Statut Membre 32
     
    Merci de ta réponse, mais ce que je cherche a faire c'est un module qui récupère automatiquement le nom du formulaire en cour ... Donc normalement on utilise Me si j'ai bien compris.

    Mais l'utilisation de Me, dans mon exemple ne marche pas ! Je voudrai savoir pourquoi.

    Cordialement.
    0
  4. CaPiT Messages postés 622 Statut Membre 51
     
    Bonjour,

    tu as la possibilité de passer le formulaire en paramètre :
    Function hiddengroup(name_group As String, mon_fom As Form)
    Dim ctl As Control
    
    For Each ctl In mon_fom.Controls
            If Left(ctl.Name, 3) = name_group Then
                ctl.Visible = False
            End If
    Next ctl
    End Function
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. nirG95 Messages postés 319 Statut Membre 32
     
    Merci de ta réponse, on vient de me donner une réponse qui me convient.

    Function hiddengroup(name_group As String)
    Dim ctl As Control
    
    For Each ctl In Screen.ActiveForm.Controls
            If Left(ctl.Name, 3) = name_group Then
                ctl.Visible = False
            End If
    Next ctl
    End Function


    Cordialement.
    0
  7. nirG95 Messages postés 319 Statut Membre 32
     
    Mais pour revenir au passage de plusieurs paramêtres.

    Je voudrai faire passer deux strings
    ex : Function ColorGroup(name_group, Color As String)

    Mais quand je fais l'appel
    ColorGroup ("gr1", "2")

    Il ne l'accepte pas il me dit erreur de compilation / = attendu

    Si tu peux me mettre dans la voie :p

    Cordialement
    0
  8. CaPiT Messages postés 622 Statut Membre 51
     
    Teste :

    Function ColorGroup(name_group as String, Color As String)
    ou
    Sub ColorGroup(name_group as String, Color As String)
    0
  9. nirG95 Messages postés 319 Statut Membre 32
     
    C'est la même chose ! Je te joins mon code pour que tu puisse comprendre :)

    Sub ColorGroup(name_group As String, Color As String)
    Dim ctl As Control
    
    ' Pour chaque contrôle du formulaire
    For Each ctl In Screen.ActiveForm.Controls
            ' On vérifie le contenu du contrôle
            If Right(ctl.Name, 3) = name_group Then
                ' On lui change la couleur de fond
                ctl.BackColor = QBColor(Color)
            End If
    Next ctl
    End Sub


    Merci encore :)
    0
  10. CaPiT Messages postés 622 Statut Membre 51
     
    Color est peut être un privé pour le Vba, change le nom du paramètre.

    Affiche moi l'erreur aussi ;)
    0
  11. nirG95 Messages postés 319 Statut Membre 32
     
    Donc j'ai essayé avec Gcolor, popol c'est toujours pareil ...

    L'erreur c'est :

    Quand je l'appel avec ColorGroup("fn1", "3") il me marque :

    Erreur de compilation
    "=" attendu

    Cordialement
    0
  12. CaPiT Messages postés 622 Statut Membre 51
     
    Ca vient surement de ta condition If Right(ctl.Name, 3) = name_group Then

    Mais je ne peux pas tester ton code donc galère pour trouver pourquoi il y a erreur ;)
    0
  13. nirG95 Messages postés 319 Statut Membre 32
     
    Pourquoi tu ne peux pas tester ? :)
    0
  14. CaPiT Messages postés 622 Statut Membre 51
     
    Je n'ai pas ta base de données ^^
    0
  15. nirG95 Messages postés 319 Statut Membre 32
     
    Tu créés un bouton et 2 textes listes. Les 2 textes listes tu les nommes '1fn1' et '2fn2'

    Tu créés le module !

    Sur l'événement clique du bouton tu mets :

    GroupColor("fn1", "2")


    Sinon pour voir le résultat sans le Color tu supprimes Color As String et tu remplaces le Color par un nombre de 0 à 14.

    Cordialement.
    0
  16. CaPiT Messages postés 622 Statut Membre 51
     
    Je n'ai pas créér la base^^

    Par contre je n'ai pas vu tout de suite, mais essaie ça :

    ctl.BackColor = QBColor("3")
    et
    ctl.BackColor = QBColor(3)

    Dis moi si les 2 marchent ou explique moi les erreurs ;)
    0
  17. nirG95 Messages postés 319 Statut Membre 32
     
    C'est bon j'ai trouvé, il fallait utilise Call Colorgroup(" ", " ")

    Merci encore de ton aide.

    Cordialement.
    0
  18. CaPiT Messages postés 622 Statut Membre 51
     
    Ok, je ne connaissais pas ce Call ;)

    Bonne continuation !
    0
  19. nirG95 Messages postés 319 Statut Membre 32
     
    J'ai encore trouvé une solution

    ColorGroup "Nom du groupe", "La couelur"

    Ça marche sans les parenthèses :S Bizarre quand même !!
    0