[VBA/Access] Utilisation de Me dans un module

Résolu/Fermé
nirG95 Messages postés 292 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 15 décembre 2010 - 1 sept. 2009 à 22:14
nirG95 Messages postés 292 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 15 décembre 2010 - 2 sept. 2009 à 11:06
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.

18 réponses

nirG95 Messages postés 292 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 15 décembre 2010 32
1 sept. 2009 à 22:37
Une petite aide s'il vous plait :)
0
Utilisateur anonyme
2 sept. 2009 à 00:50
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
nirG95 Messages postés 292 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 15 décembre 2010 32
2 sept. 2009 à 09:37
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
CaPiT Messages postés 609 Date d'inscription lundi 7 janvier 2008 Statut Membre Dernière intervention 21 avril 2010 51
2 sept. 2009 à 09:39
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

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

Posez votre question
nirG95 Messages postés 292 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 15 décembre 2010 32
2 sept. 2009 à 09:44
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
nirG95 Messages postés 292 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 15 décembre 2010 32
2 sept. 2009 à 09:47
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
CaPiT Messages postés 609 Date d'inscription lundi 7 janvier 2008 Statut Membre Dernière intervention 21 avril 2010 51
2 sept. 2009 à 09:58
Teste :

Function ColorGroup(name_group as String, Color As String)
ou
Sub ColorGroup(name_group as String, Color As String)
0
nirG95 Messages postés 292 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 15 décembre 2010 32
2 sept. 2009 à 10:03
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
CaPiT Messages postés 609 Date d'inscription lundi 7 janvier 2008 Statut Membre Dernière intervention 21 avril 2010 51
2 sept. 2009 à 10:06
Color est peut être un privé pour le Vba, change le nom du paramètre.

Affiche moi l'erreur aussi ;)
0
nirG95 Messages postés 292 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 15 décembre 2010 32
2 sept. 2009 à 10:10
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
CaPiT Messages postés 609 Date d'inscription lundi 7 janvier 2008 Statut Membre Dernière intervention 21 avril 2010 51
2 sept. 2009 à 10:17
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
nirG95 Messages postés 292 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 15 décembre 2010 32
2 sept. 2009 à 10:20
Pourquoi tu ne peux pas tester ? :)
0
CaPiT Messages postés 609 Date d'inscription lundi 7 janvier 2008 Statut Membre Dernière intervention 21 avril 2010 51
2 sept. 2009 à 10:22
Je n'ai pas ta base de données ^^
0
nirG95 Messages postés 292 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 15 décembre 2010 32
2 sept. 2009 à 10:30
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
CaPiT Messages postés 609 Date d'inscription lundi 7 janvier 2008 Statut Membre Dernière intervention 21 avril 2010 51
2 sept. 2009 à 10:52
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
nirG95 Messages postés 292 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 15 décembre 2010 32
2 sept. 2009 à 10:52
C'est bon j'ai trouvé, il fallait utilise Call Colorgroup(" ", " ")

Merci encore de ton aide.

Cordialement.
0
CaPiT Messages postés 609 Date d'inscription lundi 7 janvier 2008 Statut Membre Dernière intervention 21 avril 2010 51
2 sept. 2009 à 10:55
Ok, je ne connaissais pas ce Call ;)

Bonne continuation !
0
nirG95 Messages postés 292 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 15 décembre 2010 32
2 sept. 2009 à 11:06
J'ai encore trouvé une solution

ColorGroup "Nom du groupe", "La couelur"

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