FAQ MS-Access
FAQ MS-AccessConsultez toutes les FAQ
Nombre d'auteurs : 140, nombre de questions : 926, dernière mise à jour : 15 juin 2021
- Comment enlever le sélecteur d'enregistrements ?
- Comment enlever les boutons de déplacement ?
- Masquer des champs en mode feuille de données (DataSheet) ?
- Comment rendre des colonnes d'un formulaire invisibles ?
- Comment avoir plusieurs couleurs de contrôle ou de fond dans un formulaire en mode continu ?
- Comment afficher dans un formulaire une image se trouvant dans un dossier ?
- Comment créer des fenêtres de formulaire aux formes personnalisées ?
- Comment afficher un texte d'info-bulle sur plusieurs lignes ?
- Comment mettre un plein écran une fenêtre de formulaire ?
- Comment avoir des formulaires de tailles différentes ?
- Comment remettre la barre tout en haut de mon formulaire, là où il y a la croix ?
- Comment donner automatiquement la même présentation à mes formulaires ?
- Comment ajouter un menu dans un formulaire ?
- Comment faire disparaître les boutons des fenêtres (minimiser/maximiser/fermer) ?
- Comment donner de la couleur à mes boutons ?
- Comment mettre une icône dans la barre de titre d'un formulaire ?
- Comment ouvrir un état ou un formulaire en mode invisible ?
- Comment mettre en surbrillance toute la ligne active d'un formulaire ?
- Peut-on afficher sous forme de mot de passe (******) les caractères saisis dans une InputBox ?
- Comment changer la couleur de fond d'un bouton de commande ?
- Comment mettre du gras dans un MsgBox ?
- Comment importer les barres d'outils ou de menus personnalisées ?
- Comment déployer en VBA les sous-feuilles de données d'un formulaire en mode feuille de données ?
- Comment modifier l'apparence des boutons de commande ? (Faire passer de Windows 98 au style Windows XP Access 2003.)
- Comment créer un effet de relief lorsque la souris survole un contrôle ?
- Comment faire pour que mes nombres soient précédés de 0 ? (01, 02...)
- Comment rendre un formulaire transparent ?
- Comment changer de page dans un onglet en VBA ?
Dans les propriétés du formulaire, mettre à "non" la propriété "Afficher sélecteur".
Dans les propriétés du formulaire, mettre à "non" la propriété "Boutons de déplacement".
Lien : Comment enlever les boutons de navigation d'un formulaire en VBA ?
Dans ce mode, il n'est pas possible d'utiliser la propriété visible. Il faut donc masquer la colonne en mettant sa largeur à 0.
Pour masquer une colonne dans un formulaire en mode feuille de données, il faut utiliser la propriété ColumnHidden du contrôle. Cela marche aussi pour les tables et requêtes en passant par la collection Properties.
Lien : Comment masquer/rendre invisibles toutes les zones de texte vides ?
Une fois le formulaire ouvert, allez dans Format/Mise en forme conditionnelle.
Remarque : cette fonction n'existe pas dans les versions antérieures à MS Access 2000.
Me.Image1.Picture
=
"c:\temp\dessin.jpg"
Cela est possible, mais c'est assez complexe. Il faut faire appel à une API.
Dans la propriété du contrôle il faut appuyer sur Ctrl + Entrer à l'endroit où vous voulez retourner à la ligne.
Lien : Comment avoir un TextBox (zone de texte) multiligne ?
Lorsque vous avez un formulaire ouvert en plein écran et que vous voulez en ouvrir un autre de taille inférieure, cela modifie la taille du premier formulaire.
Il est possible de donner des tailles différentes aux formulaires, ceci en jouant sur la propriété fenêtre indépendante du formulaire.
Changez la propriété Style bordure du formulaire, elle ne doit pas être réglée sur Aucun, sinon elle n'apparaît pas.
Formatez un formulaire comme bon vous semble : police de caractères, couleur de fond, etc.
En mode création, faites : Format / Format automatique.
Puis Personnaliser et cochez Créer un nouveau format automatique basé sur le formulaire "MonFormulaire".
Puis dans les autres formulaires, faites format / format automatique et appliquez le format créé précédemment.
Pour créer un menu dans un formulaire comme sous VB6, il faut recourir à diverses fonctions de l'API Windows. Vous pouvez consulter ce tutoriel pour plus de détails : Ajouter un menu dans un formulaire.
Ouvrez les propriétés de votre fenêtre (formulaire ou état).
Allez dans l'onglet Format, puis mettez Boîte contrôle à Non.
Autre solution par le code en utilisant les API :
Option
Explicit
Private
Declare
Function
SetWindowLongA Lib
"user32"
_
(
ByVal
hWnd As
Long
, ByVal
nIndex As
Long
, _
ByVal
dwNewLong As
Long
) As
Long
Private
Declare
Function
GetWindowLongA Lib
"user32"
_
(
ByVal
hWnd As
Long
, ByVal
nIndex As
Long
) As
Long
Const
WS_MINIMIZEBOX =
&
H20000
Const
WS_MAXIMIZEBOX =
&
H10000
Const
GWL_STYLE =
(-
16
)
Function
RetireRestoreMaximize
(
ByVal
hWndx As
Long
)
' hWndx est le handle de la fenêtre à modifier...
Dim
L As
Long
L =
GetWindowLongA
(
hWndx, GWL_STYLE)
L =
L And
Not
(
WS_MINIMIZEBOX)
L =
L And
Not
(
WS_MAXIMIZEBOX)
L =
SetWindowLongA
(
hWndx, GWL_STYLE, L)
End
Function
Vous devez utiliser une image en guise de bouton, car l'objet bouton de base avec Access ne permet pas de telles fantaisies.
- Prenez un objet "image".
- Définissez l'apparence en relief.
- Sur l'événement "Sur clic" :
- passez l'apparence en "3D enfoncé" [MonImage.SpecialEffect = 2] (ou même changer d'image) ;
- exécutez le code ;
- rétablissez l'apparence en "relief" [MonImage.SpecialEffect = 1].
Utiliser l'argument acHidden de la méthode OpenForm ou OpenReport.
Exemple pour un formulaire :
DoCmd.OpenForm
"MonForm"
,,,,,acHidden
Cette solution ? qui est plus du bricolage mais qui fonctionne bien ? va vous permettre de mettre en surbrillance toute une ligne, et une ligne seulement : celle qui est active.
Attention ! Cette technique implique que vous soyez seul à travailler sur ta table !
Voici comment procéder :
Vous avez besoin d'une table ayant deux champs (tblBackGrounds) :
Active (Oui/Non) => PK
Couleur(Objet OLE) => vous y mettrez, suivant la valeur de Active, un tout petit carré de couleur. Une image bitmap toute petite.
Dans la table que vous affichez actuellement, il vous faut aussi ajouter un champ Active (Oui/Non).
Vous devez modifier la source de votre sous-formulaire :
Select
Tatabl.
*
, tblBackGrounds.Couleur
From Tatabl Inner Join
tblBackGrounds On
TaTabl.Active
=
tblBackGrounds.Active
;
Vous devez modifier votre sous-formulaire :
Ajoutez-y le champ Couleur qui vient d'apparaître dans la liste des champs. Étendez-le sur la largeur de la section détail. Mettez-le en arrière-plan (format/Arrière-plan).
Modifiez sa propriété "mode d'affichage" de découpage à Échelle.
Vous devez mettre un peu de code :
Dans l'événement "Sur Activation", écrivez simplement :
CurrentDb.Execute
"UPDATE TaTabl Set Active=False"
CurrentDb.Execute
"UPDATE TaTabl Set Active=True Where [TonIdentifiant]="
&
Nz
(
Me.TonIdentifiant
, 0
)
Lien : Mise en surbrillance d'un enregistrement dans un formulaire
Non.
Il faut contourner le problème en créant un formulaire personnalisé et en définissant le masque de saisie de la TextBox à Mot de passe.
Lien : Comment masquer ce qui est tapé dans une zone de texte (pour un mot de passe) ?
Il est possible d'utiliser le contrôle ActiveX CommandButton qui fait partie de la "bibliothèque" [Microsoft Forms x.y] (alias MSForms) livrée avec Microsoft Office, donc disponible sur les postes dotés de Word/Excel/PowerPoint/Access. (note : ici x.y dépend de la version d'Office installée sur le PC).
Marche à suivre
La fenêtre du formulaire doit être en mode création.
Dans le menu [Insertion] cliquez sur [Contrôle ActiveX...].
Une boîte de dialogue permet de rechercher dans une liste le contrôle [Microsoft Forms x.y CommandButton].
Sélectionnez la ligne et cliquez sur [OK].
Le contrôle apparaît sur le formulaire.
Comme c'est un contrôle ActiveX, son utilisation demande plus d'efforts et ne se programme qu'avec VBA.
Les propriétés ne sont pas présentées à l'identique d'un contrôle natif d'Access et ne disposent pas d'assistant. Les propriétés [Caption], [BackColor] et [ForeColor] sont visibles dans l'onglet [Autres] de la fenêtre des propriétés. La propriété [Font] n'est accessible que par programmation VBA (cf. l'explorateur d'objets pour inspecter sa structure - touche F2). Astuce : utilisez la fenêtre d'exécution (Ctrl + G) pour paramétrer "directement" ces propriétés qui sont alors correctement enregistrées. Par exemple, pour mettre le texte du bouton en italique, utilisez les propriétés de son objet Font en saisissant dans la fenêtre exécution :
Forms![NomDuForm]![NomDeBoutonActivX]..Font.Italic
=
True
Puis appuyez sur Entrée.
L'événement [_Click] se programme directement dans l'environnement de développement. En effet, la fenêtre de propriétés ne permet pas de voir les événements "internes" d'un contrôle ActiveX. Dans le module du formulaire, il suffit donc d'écrire ceci pour exécuter du code sur clic du bouton :
Private
Sub
NomDuBoutonActivX_Click
(
)
MsgBox
"Vous avez cliqué."
End
Sub
Vous devez dans un premier temps écrire une nouvelle fonction d'affichage de boîte de message (MessageBox) :
Function
FormattedMsgBox
(
_
Prompt As
String
, _
Optional
Buttons As
VbMsgBoxStyle =
vbOKOnly
, _
Optional
Title As
String
=
vbNullString
, _
Optional
HelpFile As
Variant
, _
Optional
Context As
Variant
) _
As
VbMsgBoxResult
If
IsMissing
(
HelpFile) Or
IsMissing
(
Context) Then
FormattedMsgBox =
Eval
(
"MsgBox("""
&
Prompt &
_
""", "
&
Buttons &
", """
&
Title &
""")"
)
Else
FormattedMsgBox =
Eval
(
"MsgBox("""
&
Prompt &
_
""", "
&
Buttons &
", """
&
Title &
""", """
&
_
HelpFile &
""", "
&
Context &
")"
)
End
If
End
Function
Ensuite il ne vous reste qu'à appeler cette fonction depuis votre code :
FormattedMsgBox "Wrong button!@This button doesn't work.@Try Another."
, _
vbOKOnly
+
vbExclamation
, "My Application"
Lien : Source de cette solution
Procédure valable pour une version française d'Access 2000.
- Ouvrir le fichier .mdb dans lequel on souhaite importer les barres personnalisées.
- Dans le menu [Fichier], exécuter la commande [Données externes|Importer...].
- Une boîte de dialogue [Importer] s'affiche pour sélectionner le fichier .mdb dans lequel se trouvent les barres d'outils à récupérer. Sélectionner ce fichier et cliquer sur le bouton [Importer].
- Une nouvelle boîte de dialogue [Importer des objets] s'affiche. Cliquer sur le bouton [Options >>] pour faire apparaître les contrôles permettant de gérer plus finement l'Import.
- Dans le cadre [Importer] cocher la case "Menus et barres d'outils".
- Cliquer sur le bouton [OK].
Remarque :
pour récupérer les paramètres d'import/export de données, ça se passe aussi dans les Options.
Vous avez créé un formulaire contenant dans sa section "Détail" un sous-formulaire lié. Ces deux formulaires sont utilisés en affichage feuille de données, ce qui fait qu'Access les affiche sous forme d'une arborescence : on voit les lignes du formulaire principal et on peut cliquer sur la petite croix pour faire apparaître les sous-enregistrements du sous-formulaire liés à cette ligne.
Ce que vous souhaitez faire : "déplier" chaque ligne au lancement du formulaire pour éviter que l'utilisateur n'ait à le faire à la main en cliquant sur chaque petite croix...
Voici une solution :
Private
Sub
Form_Load
(
)
Me.SubdatasheetExpanded
=
True
End
Sub
Ce code fonctionne avec une arborescence à plusieurs niveaux (plusieurs formulaires imbriqués).
Allez dans Outils > Options, onglet Formulaires/États, cochez Utiliser les contrôles Windows à thèmes sur les formulaires
Cette Fonction n'est applicable que sous Access 2003.
Il y a deux événements dans lesquels nous devons placer du code.
Tout d'abord, occupons-nous de la souris qui survole le contrôle.
Private
Sub
Étiquette_MouseMove
(
Button As
Integer
, Shift As
Integer
, X As
Single
, Y As
Single
)
Me.Étiquette.SpecialEffect
=
0
End
Sub
Où Étiquette est le nom d'un contrôle de type étiquette.
Maintenant, il faut qu'une fois fini de survoler le contrôle, celui-ci récupère son apparence normale.
En fait, il faut que vous placiez le code suivant sur l'événement MouseMove() du contenant du contrôle étiquette.
Dans cet exemple, le contrôle se trouve dans la section Détail du formulaire, nous avons donc :
Private
Sub
Détail_MouseMove
(
Button As
Integer
, Shift As
Integer
, X As
Single
, Y As
Single
)
Me.Étiquette.SpecialEffect
=
0
End
Sub
Pour cela il faut modifier la propriété format de la zone de texte du formulaire qui affiche ces nombres en lui appliquant un format00 (pour un nombre à deux chiffres).
Vous pouvez utiliser cette méthode. Jouez sur le paramètre lAlpha pour augmenter ou diminuer la transparence.
Private
Const
WS_EX_LAYERED =
&
H80000
Private
Const
LWA_ALPHA =
&
H2
Private
Const
GWL_EXSTYLE =
&
HFFEC
Private
Declare
Function
SetWindowLong Lib
"USER32"
Alias "SetWindowLongA"
_
(
ByVal
hWnd As
Long
, _
ByVal
lngWinIdx As
Long
, _
ByVal
dwNewLong As
Long
) As
Long
Private
Declare
Function
GetWindowLong Lib
"USER32"
Alias "GetWindowLongA"
_
(
ByVal
hWnd As
Long
, _
ByVal
lngWinIdx As
Long
) As
Long
Private
Declare
Function
SetLayeredWindowAttributes Lib
"USER32"
_
(
ByVal
hWnd As
Long
, _
ByVal
crKey As
Integer
, _
ByVal
bAlpha As
Integer
, _
ByVal
dwFlags As
Long
) As
Long
Private
Sub
Form_Load
(
)
Dim
lAlpha As
Long
lAlpha =
255
*
(
20
/
100
)
SetWindowLong Me.hWnd
, GWL_EXSTYLE, GetWindowLong
(
Me.hWnd
, GWL_EXSTYLE) Or
WS_EX_LAYERED
SetLayeredWindowAttributes Me.hWnd
, 0
, lAlpha, LWA_ALPHA
End
Sub
Pour que cela fonctionne, le formulaire doit être indépendant.
Une des méthodes consiste à affecter le numéro de la page (cette numérotation commence à 0) à la valeur du contrôle onglet.
Exemple :
Private
Sub
Bascule4_Click
(
)
Me.CtlTab0.Value
=
Index de page
End
Sub
Autre possibilité : utiliser la méthode SetFocus de la page :
Me.NomContrôleOnglet.Pages
(
"NomDeLaPage"
).SetFocus