Bienvenue dans Access. Le tout-puissant SGBDR* de Microsoft.

* Système de Gestion de Bases de Données Relationnelles

Voyez également mon cours en ligne complet, pour tout comprendre d'Access, des versions 97 à 2003

Access est fascinant. Il est à la fois simple et complexe. Il est simple comparé à de puissants programmes de gestion de bases de données comme SQL Server ou Oracle, mais il devient complexe si on le compare à Word et Excel. Microsoft à donc voulu ajouter une pièce maîtresse dans sa suite Office en incluant Access, mais il ne faut donc pas s'imaginer que sa maîtrise viendra aussi vite que Word ou Excel. En fait, vous allez vraiment apprécier Access dans toute sa quintessence quand vous commencerez à vous sentir "A l'étroit" dans Excel.

Données de test : Cette base de données contient quelques tables comme une table des célébrités, avec une centaine de célébrités fictives, une liste de 350 clients, quelques fournisseurs, la liste de tous les pays du monde, les localités de Genève et leur code postal, ainsi que la liste des 24 cantons suisses.
Liste des mots français - Tous les noms communs du dictionnaire, au singulier et au pluriel, et au féminin
Best of Gestion : Un exemple de base de données professionnelle : La gestion d'une menuiserie.

Testez-votre QI - Pour rire bien sûr, mais votre logique sera mise à rude épreuve avec ce petit programme (Access 2000 minimum)
Dictionnaire d'apprentissage d'Esperanto - Une application Access très sympathique qui utilise deux sous formulaires côte à côte
SpeedList - Une application Access qui va vous permettre de faire des check lists pour ne rien oublier, plus jamais
AllowBypassKey - Base de données montrant par la pratique comment désactiver la touche SHIFT (Majuscuile) au démarrage

NOUVEAU : Les nouveautés d'Access 2007

jaugetresfacile.gif (104 octets)Plus la jauge est verte, plus c'est facile...jaugetresdifficile.gif (104 octets)

Comment faire en sorte qu'un champ NuméroAuto n'ait pas de "trous" ?

Admettons une table avec 1000 enregistrements, mais lors de la saisie des données, il y a eu des annulations, des affacements. Bref, le NuméroAuto de cette table a des trous. Le dernier enregistrement (le millième exactement) porte par exemple le numéro 1045. Attention : l'astuce présentée ne doit PAS s'effectuer si le champ NuméroAuto de cette table est en relation avec d'autres tables, car ça mélangerait tout. (Access refuserait simplement d'effectuer dcette astuce)
1. Supprimez le champ NuméroAuto de cette table
2. Recréez-le
Ce n'est pas plus compliqué que ça.

Comment rendre une table Invisible ?

Vous pouvez, bien entendu, cliquer avec le bouton droit de votre souris sur la table en question, et choisir Propriétés, cocher "Masqué". Mais une autre technique intéressante est simplement de renommer votre table en commençant par USYS. Par exemple Usys_Client. La table sera alors invisible, mais bien réelle. Pour les faire réapparaître, il faudra aller dans le menu Outils/Options, onglet Affichage, cocher "Objets système". Alors que si vous avez opté pour la première technique (Bouton droit/propriétés/Masqué), c'est "Objets masqués" qu'il faudra cocher. Ce préfixe USYS ne fonctionne qu'avec les tables, pas les requêtes, formulaires, etc.

Comment créer une requête qui retourne toutes les valeurs supérieure à la moyenne de tous les enregistrements ?

Admettons une table T_Salarie dans laquelle nous avons un champ Salaire, et qu'il s'agisse d'extraire tous les salaires supérieurs à la moyenne des salaires. Dans une requête, écrivez comme critère du salaire :
>MoyDom("[Salaire]";"T_Salarie")

jaugetresdifficile.gif (104 octets)La sécurité au niveau des utilisateurs, des groupes et des objets - Transformez votre base de données en forteresse
Les différentes relations possibles entre les tables - Avec et sans intégrité, relations de 1 à plusieurs, ou de 1 à 1
Répéter les titres de section dans un état avec le mot "Suite" si nécessaire - Ou un doigt de Visual Basic pour ajouter cette fonctionnalité bien pratique
jaugetresfacile.gif (104 octets)Les grands objets d'Access : Explication succinte mais complète des Tables, Requêtes, Formulaires, Etats
jaugetresdifficile.gif (104 octets)Requête suppression basée sur 2 tables - Ce n'est pas si simple, contrairement aux apparences ! Un doigt de SQL et la clause "IN" seront nécessaires
jaugedifficile.gif (344 octets)Comment créer une liste déroulante restreinte ? - Par exemple, une fois qu'on a choisit un pays, ne pouvoir sélectionner que les villes de CE pays
Utiliser les fonctions Excel au sein d'Access - Par exemple, la fonction NomPropre n'est pas disponible dans Access. Comment faire pour l'utiliser malgré tout
jaugedifficile.gif (344 octets)Les boutons radios et la fonction Choisir - Des boutons radios représentent une alternative esthétique des listes déroulantes. Ils se combinent à merveille avec la fonction Choisir

Comment changer la valeur par défaut d'un champ dans une table ?
CurrentDb.TableDefs("T_Celebrite")("Ville").Properties("DefaultValue").Value = "Caracas"
Attention : Selon les propriétés, elles n'existent pas encore. Par exemple, si vous décidez de changer la propriété Caption (légende) d'un champ, il faut qu'auparavant il y ait eu au moins une fois une légende, sinon une erreur est générée.

Comment fermer Access depuis VBA
Fermer la base en laissant Access ouvert :
Application.CloseCurrentDatabase
Fermer la base et Access
Application.Quit

Créer dynamiquement une requête
CurrentDb.CreateQueryDef "R_1", "SELECT * FROM T_Animal;"
Et l'effacer :
DoCmd.DeleteObject acQuery, "R_1"

jaugedifficile.gif (344 octets)Choisissez un dossier avec VBA : Comment sélectionner un dossier particulier de votre ordinateur ou de votre réseau local. Consultez également cette page qui montre des exemple nettement plus simple avec Application.FileDialog
jaugemoyen.gif (361 octets)Les limites/performance d'Access : Limites de tailles des différents composants (Bases de données, tables, requêtes, objets, Formulaires, états, macros)

jaugedifficile.gif (344 octets)Installation d'Access 2003 : Vous avez un gros message d'erreur à l'ouverture vous enjoignant d'installer le Service Pack le plus récent pour Microsoft Jet. Voici ce que dit Microsoft à ce propos
jaugedifficile.gif (344 octets)Les différences entre Access 2000 et Access 2003
jaugedifficile.gif (344 octets)Comment additionner des heures dont le total excède 24 heures ?
jaugemoyen.gif (361 octets)Requêtes : l'opérateur Comme
jaugefacile.gif (240 octets)Base de données MDB endommagée ? Essayez ceci ... (Je n'ai pas testé)
jaugefacile.gif (240 octets)Lors d'un nouveau développement, suivez les étapes dans l'ordre
jaugetresdifficile.gif (104 octets)Programmation : Accédez à Outlook, et envoyez un E-Mail à vos contacts qui se trouvent dans une table
jaugetresdifficile.gif (104 octets)Programmation : Comment importer toutes les feuilles d'un classeur en une seule opération
jaugetresdifficile.gif (104 octets)Programmation avec ADO - ActiveX Data Objects : Seulement pour programmeurs VBA expérimentés
Les commutateurs de démarrage Access

jaugetresfacile.gif (104 octets)Comment retrouver un mot de passe perdu sous Access ?

Accès à des champs de sous-formulaire : Soit un sous-formulaire nommé SFCommande avec un champ DateCommande :

MsgBox [SFCommande].[Form]![DateCommande]
MsgBox [SFCommande].Form("DateCommande")
MsgBox SFCommand.Form("DateCommande")


jaugetresdifficile.gif (104 octets)Créez vos menus contextuels personnalisés
jaugetresdifficile.gif (104 octets)VBA : Gestion des utilisateurs et des groupes
Les raccourcis-clavier
jaugetresdifficile.gif (104 octets)Utilisation d'une table-système (Exemple : Compter le nombre de fois qu'une base de données a été ouverte)
jaugemoyen.gif (361 octets)Jongler avec différentes version d'Access
jaugemoyen.gif (361 octets)Lorsque vous avez de graves problèmes-système avec votre base de données

Comment changer le mot de passe de plusieurs bases de données en même temps ?

Il faut que vous vous trouviez dans une autre base de données, qui n'a pas besoin d'avoir son mot de passe changé (On ne peut pas changer le mot de passe d'une base de données ouverte). Dans VBA, vous allez dans Outils/Références/ cochez : "Microsoft ActiveX Data Objects 2.1 Library"

Essayez ce code :

Sub ChangerMotDePasse()
  Dim objConn As ADODB.Connection
  Set objConn = New ADODB.Connection
  objConn.Mode = adModeShareExclusive
  objConn.Provider = "Microsoft.Jet.OLEDB.4.0"
  objConn.Properties("Jet OLEDB:Database Password") = "ancien"
  objConn.Open "Data Source=D:\Mes documents\Compta.mdb"
  objConn.Execute "ALTER DATABASE PASSWORD [nouveau] [ancien]"
  objConn.Close
  Set objConn = Nothing
End Sub

jaugefacile.gif (240 octets)Créez vos listes déroulantes
jaugefacile.gif (240 octets)Plus de puissance avec les listes déroulantes
jaugetresfacile.gif (104 octets)C'est quoi, une clé primaire ?
jaugedifficile.gif (344 octets)Ca sert à quoi, les requêtes UNION ?
jaugetresdifficile.gif (104 octets)Comment faire commencer le NuméroAuto par autre chose que par 1 ?
jaugefacile.gif (240 octets)Etats : Comment gérer des champs trops larges ?

Et à part Info 3000, il y a quoi ?

Access Monster - Un énorme site consacré à Access, en anglais
Tout plein de liens externes concernant Access
Chez Stucki : Un excellent site de trucs et astuces Access avancés et très utiles
SQL - Syntaxe avancée en détail
Liste de toutes les fonctions Access


A partir d'ici, ce sont plus des notes personnelles que de véritables pages web :

Les objets de base Access

Tables : Réinitialiser le numéro automatique, diverses astuces
Tables liées - Retrouver le chemin et le fichier d'ou elles
sont issues
Requêtes : Action (mise à jour, suppression, création de table), Regroupement, paramètres, champs calculés, union, à tables multiples, premières valeurs, relations, requêtes imbriquées, analyse croisée, Create Table
SQL : Utilisation et explication de SQL, Innenr Join, Inner Join imbriqués, DistinctRow, Top, Appel SQL depuis VBA comparaison avec les requêtes faites avec le QBE (Query By Example)
Graphiques : Dans les formulaires
Formulaires : Extrait du fichier : Gestion de la dimension, événements, plusieurs instances, verrouillage d'enregistrements, listes modifiables, sous-formulaires, clavier, événement ToucheAppuyée, barre d'état, jauge de progression, FindRecord (trouver un enregistrement), filtre, cancelEvent, Control
Etats : Cumul, Dessin de lignes, Regroupement, Evénement AuFormatage, Colonnes, Ouverture en VBA en mode création, Ecriture de texte dynamiquement, Numérotation des lignes, Utilisation avancée
Macros : Fonctionnement, Conditions, Sous-Macros, Interaction avec VBA, macros automatiques AutoExec et AutoKeys

Programmation VBA : DAO - ADO

DAO : Référence complète et exhaustive des méthotes et propriétés
DAO  : (Data Access Object) - sauf les RecordSets - Versions de Jet, Création d'objets (Tables, utilisateurs, Bases de données, propriétés, formulaires, EventProcedure), Notion de collection, For Each, Count, Object, Workspace, DBEngine, Traitement des requêtes, Refresh, With, Objets par défaut...
DAO : Recordsets : RecordSetClone, FindFirst, CurrentDb, OpenDataBase, MoveFirst, Dynaset, Snapshot, EOF, Edit, Update, AddNew, GetRows, Index, Seek, NoMatch, Delete, Close...
ADO - ActiveX Data Object : la nouvelle alternative de Microsoft remplaçant DAO pour les accès aux données

Programmation VBA : Divers

Création de fonctions, procédures et types personnalisés - Exemple simple, Paramètres optionnels, préservation des variables, nombre variable d'arguments, Call, Types
Fonctions existantes dans Access : Tableaux, Conversion, Dates et heures, Regroupement de domaine, Financières, Inspection (IsNuméric, IsDate, ..., ), mathématiques, Iif, Switch, Traitement de textes, Retours des fonctions, Explications et astuces
Fonctions personnalisées prêtes à l'emploi Récupérer le nom de l'ordinateur, de l'utilisateur, Déterminer la langue d'Access, Chercher le dernier jour du mois, Qui fait partie de quel groupe (sécurité), Transformer un montant en toutes lettres, calculer un barême horaire, arrondissement à 5 centimes, calcul d'un montant sans TVA, etc.
DDE : Les liaisons DDE (Dynamic Data Exchange), principalement avec Word et Excel : DEPUIS ACCESS : Insérer du texte dans Word, Ajouter une feuille dans Excel, Exploitation d'une fonction Excel, 
Débuggage : Débuggage Express, Raccourcis Clavier, Points d'arrêts, Visualisation des variables
Fichiers et dossiers : accès en Lecture/écriture à un fichier texte, Dir, EOF, BOF, FileAttr, FreeFile, Input, Seek, ChDir, MKDIR, Kill, Input, Write, Print, ...
ActiveX : (Principalement CommonDialog) Utilisation et importation, Common Dialog, RTF, InitDir, ShowOpen...
API : Comportement et utilisation, DLL les plus usités, marche à suivre, Exemple simple, Analyse détaillée, Fonctions API intéressante : GetTickCount, mciExecute, sndPlaySound, GetWiindowsDirectory, GetComputerName, GetUserName...
OLE : (Object Linking and Embedding) - Liaison et incorporation d'objets divers par VBA, insertion de feuilles Excel
Assistant : Programmation de l'assistant Office : Exemple
Visual Basic : Déclaration de variables et de tableaux : Dim, General/Declaration, Tableaux dynamiques, Taille des types
Visual Basic : Opérations globales sur les objets d'Access : Ouverture-Fermeture de formulaires, d'états, Recherche d'un enregistrement dans un formulaire, Importation de fichier texte dans une table
Visual Basic : Utilisation de mots-clé de base : Do, Until, Loop, For, Next
Visual Basic : Remarques générales : Variables système, Opérateurs mathématiques et logiques, Echo, Option Explicit, F5, Collection personnalisée, Exécution d'un menu, Case Sensitive, Scinder le code en 2 lignes, Guillemets entre guillements, Msgbox, InputBox, Dsum, Dcount, Variables-Objets, Types de données...
L'objet "Application"

Divers

Progiciel : Conseils pour la finalisation d'une base de données destinées à être distribuées au grand public, Barres d'outils et menus personnalisés, Menus contextuels, Fonctions personnalisées, .MDE, Options de démarrage, Kit de développement, Compactage et réparation automatique
Compléments : Utilisation des compléments Access, et Compléments personnalisés (.MDA), Gestionnaire, Analyseur, Attaches, Importation,
Configuration nécessaire à Access : Installation d'Office, Matériel, Logiciel, Réseau, Espace disque, Composants optionnels
Conseils personnels : Normalisation des noms de tables, de champs, d'objets, Abréviations, Création d'une base de données classique, Marche à suivre
Les fichiers d'aide (.HLP). Je m'appuie sur ForeHelp (logiciel indépendant d'Access)
Formats d'affichage complexes : Multi-Format selon la valeur, Dates, Texte, Valeur vide, format en couleur
Généralités globales d'Access (notamment le paramètre Command), Compactage, réparation, Lancement d'Access, Rendre un objet invisible...
Internet : Interaction Access avec Internet : Liens hypertexte, Télécommander un moteur de recherche, Envoyer par E-Mail
.LDB : (Log Data Base) Utilité et accès : accès par VBA

Menus et barres d'outils : Création et utilisation de menus et barres d'outils personnalisées
Réplication : Théorie, Utilité, fonctionnement, marche à suivre, gestion des conflits, Réplica-Maître : Création, récupération, cas pratique, Multi-Réplicas, Gestion des clés primaires, Réplica créé depuis un réplica, Réplication partielle, Réplication par DAO...
Ressources systèmes : Fichiers attachés à Access, base de registres, Tables systèmes, Accès par DAO, System.MDA, Utility.MDA, Wzbldr.MDA, Wzfrmrpt,.MDA, Wzlib.MDA, Wvquery.MDA, WzTable.MDA, Msacc2.ini, Install.stf
Sécurité : Les utilisateurs, les groupes, les groupes de travail .MDW (notamment System.MDW), premières démarches, l'administrateur, Codage/Décodage, Mots de passe, Propriétaires (Par défaut, Engine, Inconnu), Utilisateurs et groupes prédéfinis, Invités, Sécurité absolue, Sécurité par DAO...
Réseau local : Utilisation d'Access en réseau local, Intervalle d'actualisation
Utilisation de l'utilisateur courant et du domaine courant Windows NT

Le code suivant remplit une table qui doit être existante (T_TableChamp, pourvue des champs texte NomTable et NomChamp) avec les noms de tous les champs de toutes les tables de la base de données courante :

Sub StatistiqueTableChamps()
  Dim MaTable As New ADODB.Recordset
  MaTable.Open "T_TableChamp", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
  For Ctr = 0 To CurrentDb.tabledefs.Count - 1
    If Left(CurrentDb.tabledefs(Ctr).Name, 4) <> "MSYS" Then
      For C2 = 0 To CurrentDb.tabledefs(Ctr).Fields.Count - 1
        MaTable.AddNew
        MaTable("NomTable") = CurrentDb.tabledefs(Ctr).Name
        MaTable("NomChamp") = CurrentDb.tabledefs(Ctr).Fields(C2).Name
        MaTable.Update
      Next
    End If
  Next
  MaTable.Close
  Set MaTable = Nothing
End Sub

Liens

Un excellent site de trucs et astuces Access | Liste des bugs connus sous Access

Office Systeème Access - Utilisation d'ActiveX, mais aussi des tonnes d'astuces avancées

Glossaire | Testez vos connaissances | Un autre excellent site

Si vous-même êtes formateur Access, voici une liste non exhaustive de chapitres à traiter lors de cours donnés à des débutants :

 


Le saviez-vous ?  | Archives Le saviez-vous
MDB Veut dire Microsoft Data Base, et LDB : Log Data Base