[VBA/Access] Utilisation de Me dans un module

Résolu
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. J'ai encore trouvé une solution

    ColorGroup "Nom du groupe", "La couelur"

    Ça marche sans les parenthèses :S Bizarre quand même !!
    1. C'est bon j'ai trouvé, il fallait utilise Call Colorgroup(" ", " ")

      Merci encore de ton aide.

      Cordialement.
      1. 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 ;)
        1. 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.
          1. 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 ;)
            1. 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
              1. Color est peut être un privé pour le Vba, change le nom du paramètre.

                Affiche moi l'erreur aussi ;)
                1. 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 :)
                  1. Teste :

                    Function ColorGroup(name_group as String, Color As String)
                    ou
                    Sub ColorGroup(name_group as String, Color As String)
                    1. 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
                      1. 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.
                        1. 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
                          1. 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.
                            1. 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