Le grenier Access

Aller au contenu | Aller au menu | Aller à la recherche

vendredi 16 juillet 2010

Redimensionner les formulaires automatiquement à l'aide de ShrinkerStretcher

Access ne redimensionne pas les formulaires en fonction de la résolution écran.

Du coup, quand vous construisez vos formulaires, il est conseillé de définir votre taille écran en fonction de l'utilisateur final. Concrètement, si un utilisateur est en 1024x768 alors que tout le monde travaille en 1900x1200, vous construirez vos formulaires en abaissant votre propre résolution à 1024x768... Sinon, le "redesign" des formulaires peut vous demander pas mal de temps...

Mais dans certaines situations, vous souhaiterez peut-être un redimensionnement automatique. C'est ici qu'intervient ShrinkerStretcher... (jetez un oeil au screencast en bas d'article, pour voir le résultat)

Lire la suite...

vendredi 12 juin 2009

Tester l'existence d'une valeur de clef - Saison 2 !

Je dispose d'un formulaire de saisie. La clef primaire doit être saisie sur ce formulaire (il ne s'agit pas d'un NuméroAuto). Lorsque je tape une clef qui existe déjà dans la table, Access m'affiche un message d'erreur (ce qui est normal). Comment vérifier si la clef existe déjà, pour éviter le message d'erreur d'Access ?



Ce précédent article du blog illustrait une manière de faire. Dans ce nouvel article, nous allons voir la méthode qu'on a tendance à suivre... mais qui n'est pas forcément la plus simple. Voyez plutôt...

Lire la suite...

dimanche 26 avril 2009

Tester l'existence d'une valeur de clef

Je dispose d'un formulaire de saisie. La clef primaire doit être saisie sur ce formulaire (il ne s'agit pas d'un NuméroAuto). Lorsque je tape une clef qui existe déjà dans la table, Access m'affiche un message d'erreur (ce qui est normal). Comment vérifier si la clef existe déjà, pour éviter le message d'erreur d'Access ?

Lire la suite...

lundi 16 mars 2009

Tester si un formulaire est vide avant de l'ouvrir

Généralement, un formulaire est construit sur une table ou sur une requête. Il se peut que cette source de données soit vide, et qu'il ne soit donc pas nécessaire d'ouvrir le formulaire. Comment faire pour gérer cela ?

La solution

Contrairement aux états, le formulaire n'expose pas d'événement Sur aucune donnée. Mais il suffit de compter le nombre d'enregistrements de la table ou requête source, avant l'ouverture. Par exemple :

If DCount("*", "table ou requête source du formulaire") = 0 Then
  Msgbox "Aucun enregistrement !", vbExclamation
Else
  DoCmd.OpenForm "Nom du formulaire", acNormal
End If

Cette portion de code peut être recopiée dans l'événement Sur clic du bouton supposé ouvrir le formulaire.

jeudi 5 mars 2009

Calculatrice simplifiée

Peut-on évaluer une expression "à la volée" dans Access ?
Exemple : je souhaite simuler une calculatrice simple. On taperait 5+8/2 dans une zone de texte, et Access donnerait le résultat automatiquement.

Solution

C'est possible grâce à la fonction Eval() :

  1. Créez une zone de texte sur un formulaire.
  2. Cliquez sur cette zone de texte avec le bouton droit de la souris, puis sélectionnez Propriétés.
  3. Dans la propriété Nom, tapez par exemple : txtCalcul
  4. Créez une seconde zone de texte.
  5. Nommez-la txtResultat.
  6. Toujours dans les propriétés de cette 2ème zone de texte, définissez la source en tapant :
=Eval(txtCalcul)

Repassez en mode Formulaire classique, et tapez par exemple 5+8/2.
Vous obtenez 9 comme résultat (notez qu'Access respecte ici aussi les notions de priorité dans les calculs).

Petite amélioration

Lorsque la zone txtCalcul est vide, le txtResultat est #Erreur (Access ne peut pas évaluer un calcul vide). Pour un affichage plus "joli", remplacez le calcul par :

=Eval(Nz(txtCalcul;0))

La fonction Nz(x;0) convertit la valeur x en valeur 0 si x vaut Null (s'il est vide).
Ainsi, lorsqu'aucun calcul n'a été tapé, le résultat final est Eval(0), soit 0.

Info
D'autres articles du grenier font appel à la fonction Nz(). Cliquez ici pour lister ces articles.

mardi 3 mars 2009

Transférer un calcul dans une table

Dans un formulaire, j'ai un champ calculé. Comment stocker ce calcul dans la table dont dépend le formulaire ?

Etes-vous sûr de vouloir faire ça ?

Avant de démarrer, sachez que l'idée de stocker un calcul dans une table est mauvaise, pour plein de raisons :

  • Le calcul ne se mettra à jour automatiquement que si vous alimentez la table à partir du formulaire.
  • Par conséquent, si la table est alimentée par un autre moyen (saisie directe ou importation de fichier), vous devrez penser à mettre à jour le calcul par vous-même à chaque fois. Vous y penserez toujours ? Et si c'est un collègue qui prend le relais ?
  • En résumé, vous risquez de voir la cohérence de vos données perdue à terme.
  • D'autre part, vous stockez des informations redondantes (donc inutiles) dans la table, ce qui est contraire aux principes de construction d'une base.

Tant pis :-)

Si malgré tout vous ne pouvez faire autrement (je vous aurai prévenu !) :

  1. Ouvrez votre formulaire en mode Création.
  2. Écrivez le code suivant dans l'événement Avant Màj du formulaire :
Me![Nom du champ de la table stockant le calcul] = Me![Nom du champ calculé du formulaire]

Remplacez bien sûr les noms entre crochets par vos noms de champs.

samedi 28 février 2009

Sauvegarder l'enregistrement

Sur un formulaire, je souhaiterais créer un bouton qui puisse valider les données (sauvegarder l'enregistrement)....

Solution manuelle

Vous savez sans doute que pour forcer un enregistrement manuel de la saisie en cours, vous pouvez :

  • Appuyer sur la combinaison de touche Majuscule + Entrée.
  • Sur Access 97 à 2003 : utiliser le menu Enregistrements / Sauvegarder l'enregistrement.
  • Sur Access 2007 : activer l'onglet Accueil du ruban, puis cliquer sur le bouton Enregistrer.

La technique s'applique à tous les objets d'Access où vous pouvez faire de la saisie : tables, requêtes, formulaires.

Solution VBA

Si vous souhaitez automatiser l'opération à l'aide d'un bouton (ça ne peut donc se faire que sur un formulaire) :

  1. Ouvrez votre formulaire en mode Création.
  2. Placez un bouton de commande sur ce formulaire, et faites apparaître ses propriétés.
  3. Dans l'événement Sur clic (Click), tapez le code suivant :
DoCmd.RunCommand acCmdSaveRecord
Conseil
Lorsque vous lancez l'impression d'un état par DoCmd.OpenReport, pensez à placer un DoCmd.RunCommand acCmdSaveRecord avant. De cette manière, vous êtes sûr que les données imprimées sur l'état sont à jour.

lundi 23 février 2009

Etiquette associée à un objet

Comment, en VBA, déterminer quelle étiquette (intitulé) est associée à un objet de formulaire ?

Le problème

  • En fait, il n'est pas possible directement de trouver l'étiquette à partir d'un objet.
  • L'inverse est plus facile : si une étiquette est associée à un objet, la propriété Parent de cette étiquette donne l'objet en question (si l'étiquette est indépendante, son parent est le formulaire himself).

La solution

Si le formulaire est ouvert en mode Création, cette ligne donne l'objet associé à une étiquette (manipulable par une variable objet, donc !) :

Forms![Nom du formulaire]![Nom de l'étiquette].Parent

La ligne suivante donne au contraire le nom de l'objet (variable de type String) :

Forms![Nom du formulaire]![Nom de l'étiquette].Parent.Name

Exemple

Dans le formulaire ci-contre, l'étiquette (pointée par la souris) se nomme lblClients et la zone de liste placée dessous lstClients.

Pour afficher "lstClients" en connaissant "lblClients", vous pouvez écrire :

MsgBox Forms![frm Liste Clients]![lblClients].Parent.Name

lundi 9 février 2009

Assistant Contrôle

Lorsque je crée un formulaire ou un état, les assistants associés à certains objets (bouton de commande, liste déroulante notamment) ne fonctionnent plus. L'objet est bien dessiné sur le formulaire, mais l'assistant ne se déclenche plus automatiquement. Pourquoi donc ?

Sur la boîte à outils, vérifiez que l'icône Assistant Contrôle (la "baguette magique") est bien activée (enfoncée). Faute de quoi, Access suppose que vous souhaitez créer les boutons de commande et autres objets en manuel.

mardi 20 janvier 2009

Une méthode élégante de sélection

Dans une base Access, j'ai une table de clients. Je souhaiterais que l'utilisateur puisse consulter la liste des clients, et en sélectionner certains un par un (par des cases à cocher). Ceci afin d'enchaîner sur un traitement spécifique derrière... Comment faire ?

 

Lire la suite...

- page 1 de 3