Nom d'un formulaire en paramètre

zouf31 Messages postés 10 Date d'inscription vendredi 26 juin 2009 Statut Membre Dernière intervention 18 juillet 2009 - 25 juin 2009 à 17:14
zouf31 Messages postés 10 Date d'inscription vendredi 26 juin 2009 Statut Membre Dernière intervention 18 juillet 2009 - 29 juin 2009 à 10:19
Bonjour à tous,
J'aimerai, à partir d'un formulaire, rendre visible ou non d'autres formulaires, en fonction du profil connecté.

voici mon code :

Private Sub Form_Load()
    Me.Caption = "Menu - connecté en tant que " & [Forms]![Droits_Acces]![lst_groupe]
   
    Dim datab As Database
    Dim table As Recordset

    Set datab = DBEngine(0)(0)
    Set table = datab.OpenRecordset("Droits_Acces")
    table.MoveFirst
       
    Do Until table.EOF
        If table![Lecture] = False Then
            Dim f As String
            f = table![Fomulaire]
            [Forms]!f.Visible = False
        End If
        If table![Ecriture] = False Then
            '[Forms]!table![Formulaire].Enabled = False
        End If
        table.MoveNext
    Loop
    table.Close
    datab.Close
End Sub

Voilà, le problème vient du bout de code en orange : comment passer le nom du formulaire en paramètre ?

En espérant avoir été assez clair, merci d'avance =)

Cordialement.

4 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
25 juin 2009 à 17:37
salut,

forms est une collection, il faut donc l'utiliser

néanmoins elle n'est utilisable que par un numériqué et non le nom de la form. il faut donc tricher en passant par une petite fonction perso du genre :






Function 
getFormByName(
ByVal 
sName 
As String
)
As
Form

    Dim fRet As Form
    Set fRet = Nothing
    
    Dim f As Form
    For Each f In Forms
        If f.Name = sName Then
            Set fRet = f
            Exit For
        End If
    Next f
    
    Set f = Nothing
    Set getFormByName = fRet
End Function





<small>
[../code.aspx?ID=39466 Coloration VB6, VBA,
VBS]
</small>












ton code :


        If table![Lecture] = False Then
            Dim f As String
            f = table![Fomulaire]
            [Forms]!f.Visible = False
        End If







devient donc :





        If not(table![Lecture]) Then
            getFormByName(table![Fomulaire]).Visible = False
        End If






<small>
[../code.aspx?ID=39466 Coloration VB6, VBA,
VBS]
</small>







NB :
tu codes


apparemment en



VB6!
tu as classé en VB.NET
tu as une syntaxe plus proche de VBA que de VB6. (quoi que, après tout c'est peut être du VBA....à
tu utilises DAO au lieu d'ADO (si VB6)

attention aux thèmes du forum, merci
0
zouf31 Messages postés 10 Date d'inscription vendredi 26 juin 2009 Statut Membre Dernière intervention 18 juillet 2009
26 juin 2009 à 09:26
Bonjour,
merci de la réponse rapide !
pour info, je code bien en VBA ! (Access 2003)...

L'idée de passer par une fonction est très judicieuse et répondrait à mon problème, cependant l'expression

For Each f In Forms

ne répertorie que les formulaires ouverts.
Je voudrais récupérer l'ensemble des formulaires.
J'ai essayé "AllForms" mais ça ne marche pas non plus.

Merci

Cordialement.
0
CTAC Messages postés 133 Date d'inscription mardi 24 décembre 2002 Statut Membre Dernière intervention 8 juin 2012 5
26 juin 2009 à 18:59
Salut,

Tiré de l'aide

Pour répertorier tous les formulaires dans la base de données, ouverts ou fermés, énumérez la collection AllForms de l'objet CurrentProject. Vous pouvez ensuite utiliser la propriété Name de chaque objet AccessObject individuel pour renvoyer le nom d'un formulaire.

ctac
0
zouf31 Messages postés 10 Date d'inscription vendredi 26 juin 2009 Statut Membre Dernière intervention 18 juillet 2009
29 juin 2009 à 10:19
J'ai essayé cette dernière méthode mais un objet AccessObject ne permet pas de renvoyer un form, il ne renvoie que le nom.
Est-ce possible de caster un accessobject en Form ?

Help !

et merci :)
0
Rejoignez-nous