Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > IHM
IHM Ce forum est dédié aux questions relatives à la création de formulaires et d'états, avec ou sans code VBA, et macros.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/11/2011, 18h31   #1
Membre régulier
 
Inscription : novembre 2010
Messages : 151
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : novembre 2010
Messages : 151
Points : 89
Points : 89
Par défaut Masquer tables et requêtes au démarrage

Bonsoir,

1. Masquer tables
J'ai trouvé le code :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Function HiddenTable(strTable As String, boHidden As Boolean)
 
    '//
    '// Usage :
    '// HiddenTable "LaTable", True or False
    '//
    Dim tdf As TableDef
    For Each tdf In CurrentDb.TableDefs
        If tdf.Name = strTable Then
            If boHidden Then
                    tdf.Attributes = dbHiddenObject
                Else
                    tdf.Attributes = 0
            End If
        End If
    Next
    '// Si vous faites le test dans la fenêtre d'exécution directe
    '// il faut rafraichir la fenêtre Access pour observer l'effet
    Application.RefreshDatabaseWindow
 
End Function
qui permet de masquer ou d'afficher une table. L'inconvénient est qu'il faut mettre la fonction autant de fois qu'il y a de tables.
Comment faire une boucle pour masquer ou afficher toutes les tables?

2. Masquer les requêtes
Lorsque je remplace "Table" par "Query" pour masquer/afficher les requêtes, j'ai une erreur sur :
Code :
tdf.Attributes = dbHiddenObject
Comment faire?

Jean-Pierre
jeanpierre78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2011, 20h22   #2
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonsoir,

1. Je ne sais pas s'il est prudent de jouer avec la propriété Attributes.
Par ailleurs, j'ai constaté que ça ne fonctionnait pas avec des tables liées.

2. Pour les requêtes, il n'y a pas de propriété Attributes.

Il y a une autre façon de masquer des objets base de données, avec Application.SetHiddenAttribute.
On peut cependant les afficher si on coche l'option "Afficher les objets masqués".

Exemple de code pour les tables :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub MasquerTables(bMasquer As Boolean)
Dim db As DAO.Database, td As DAO.TableDef
Dim lgAttr As Long
 
Set db = CurrentDb
For Each td In db.TableDefs
    If (td.Attributes And dbSystemObject) = 0 And _
       (Left(td.Name, 1) <> "~") Then
       Application.SetHiddenAttribute acTable, td.Name, bMasquer
    End If
Next
Application.RefreshDatabaseWindow
End Sub
Exemple de code pour les requêtes :
Code :
1
2
3
4
5
6
7
8
9
10
11
Sub MasquerRequetes(bMasquer As Boolean)
Dim db As DAO.Database, qd As DAO.QueryDef
 
Set db = CurrentDb
For Each qd In db.QueryDefs
    If (Left(qd.Name, 1) <> "~") Then
       Application.SetHiddenAttribute acQuery, qd.Name, bMasquer
    End If
Next
Application.RefreshDatabaseWindow
End Sub
A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2011, 21h46   #3
Membre régulier
 
Inscription : novembre 2010
Messages : 151
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : novembre 2010
Messages : 151
Points : 89
Points : 89
Bonsoir,

Merci pour la réponse.

Masquer les tables avec la propriété Attribute fonctionne avec des tables liées, tout au moins chez moi.

MàJ : 21-11-2011
En créant une fonction MasquerTables et une fonction MasquerRequetes, en les placant dans la macro Autoexec (Exécuter code; MasquerTables(true) et Exécuter code; MasquerRequetes(true)) ça fonctionne nickel.

Jean-Pierre
jeanpierre78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 16h06   #4
Membre régulier
 
Inscription : novembre 2010
Messages : 151
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : novembre 2010
Messages : 151
Points : 89
Points : 89
Bonjour,

Après avoir appliqué ta méthôde à trois BD toutes avec des tables liées, je constate que :
  • la fonction MasquerRequetes fonctionne à chauqe fois,
  • la fonction MasquerTables ne fonctionne pas toujours (1 fois sur 3)!!
Lorsque ça ne fonctionne pas, j'ai l'erreur sur :
Code :
            Application.SetHiddenAttribute acTable, td.Name, bMasquer
Jean-Pierre
jeanpierre78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 17h07   #5
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonjour,

Citation:
Envoyé par jeanpierre78 Voir le message
Masquer les tables avec la propriété Attributes fonctionne avec des tables liées, tout au moins chez moi.
J'avais codé différemment, en mettant à 1 ou 0 le bit dbHiddenObject.
Je ne voulais pas mettre 0 dans Attributes pour une table liée, de peur d'effacer le bit dbAttachedTable.
En effet, Attributes est une combinaison de plusieurs attributs.
Il s'avère que la propriété Attributes fonctionne d'une manière particulière :
Si on affecte 0 à la propriété Attributes d'une table liée, cela n'efface pas dbAttachedTable.

Donc tu as raison, ça fonctionne avec des tables liées.

J'ai remarqué que mon code (Application.SetHiddenAttribute) ne fonctionnait pas sur des tables dont l'attribut dbHiddenObject était à 1.
Erreur N° 2016 : Impossible de modifier les attributs des tables système.
C'est pour cela que je me demandais s'il était prudent de modifier cet attribut.

Quelle erreur as-tu lorsque ça ne marche pas avec Application.SetHiddenAttribute sur une table ?

A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 19h18   #6
Membre régulier
 
Inscription : novembre 2010
Messages : 151
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : novembre 2010
Messages : 151
Points : 89
Points : 89
Bonsoir,

Lorsque ça ne fonctionne pas j'ai l'erreur :

Erreur d'éxécution '2016' :
Impossible de modifier les attributs des tables système.


Jean-Pierre
jeanpierre78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 20h32   #7
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonjour,

Ça ressemble à ce que j'ai constaté lorsque l'attribut dbHiddenObject est mis.

Exécute cette fonction avec False pour enlever dbHiddenObject.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Function MasquerTablesDAO(bMasquer As Boolean)
Dim db As DAO.Database, td As DAO.TableDef
Dim lgAttr As Long, bMasquable As Boolean
 
Set db = CurrentDb
For Each td In db.TableDefs
    lgAttr = td.Attributes
    ' On ne touche pas les tables systèmes ni les tables commençant par ~
    bMasquable = ((lgAttr And dbSystemObject) = 0) And (Left(td.Name, 1) <> "~")
    If bMasquable Then
       If bMasquer Then
          td.Attributes = dbHiddenObject
       Else
          td.Attributes = 0
       End If
    End If
Next
Application.RefreshDatabaseWindow
End Function
Après ça, la méthode Application.SetHiddenAttribute devrait fonctionner.

A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 23h41   #8
Membre régulier
 
Inscription : novembre 2010
Messages : 151
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : novembre 2010
Messages : 151
Points : 89
Points : 89
Bonsoir,

Merci la nouvelle fonction MasquerTablesDAO fonctionne avec le 3 BD avec tables liées et avec les 3 BD contenant les tables.

Jean-Pierre
jeanpierre78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h36.


 
 
 
 
Partenaires

Hébergement Web