-
- Bascule du CRM Excel vers Access.
-
Multi-Utilisateurs :
- Créer Une base Dorsale avec les Tables seulement.
- Unique pour tous le monde => accessible réseau par tous les utilisateurs.
- Créer Une base Frontale avec les Formulaires, Macros, Requêtes, Vue
- Une copie par poste installée sur le bureau (ou ailleurs sur le disque Utilisateur)
- Mise à jour auto par batch => Xcopy Frontale « matrice » sur le DD Utilisateur.
- Créer Une base Dorsale avec les Tables seulement.
-
Base Dorsale :
- Uniquement des tables
-
Base Frontale :
- Uniquement tout le reste (Procédures VBA, États, Requêtes, Formulaires)
- Les tables de la Dorsale sont liées automatiquement au démarrage par une procédure spécifique et sous condition que l’utilisateur soit vérifié.
-
Mise à jour Frontale :
- Une copie de la Frontale est automatiquement mise à jour à chaque lancement par un Batch DOS qui copie (xcopy) la matrice de la Dorsale vers le Desktop de l’utilisateur si une version plus récente existe.
- Placer fichier .bat dans le répertoire de Démarrage.
- Ainsi chaque utilisateur est en exclusif sur sa frontale (pas de conflit) et les données sont mises à jour sur la dorsale (Access gère les conflits)
-
Liaisons de tables Dorsales => Frontale:
- DONNEES EXTERNES => ACCESS => Path vers la Dorsale + Lié à la Source => Sélection de la base => sélection de la table à lier.
- ATTENTION :
- Si modification des champs dans la Dorsale en particulier si ajout de menus déroulant pour la sélection des valeurs, alors détruire la liaison … et la recréer.
-
RAZ Clé NumAuto / AutoIncrement 😕
Détruire le champs de cléLe recréer avec le même nom en clé principale- Supprimer les enregistrements de la table
- Menu : OUTIL DE BASE DE DONNEES => COMPACTER UNE BASE DE DONNEES.
-
Passage en mode Admin/Création :
- [Maj] + double clic sur le fichier pour ACCESS < 2013
- ACCESS 2013 : c’est la compil en exécutable .accde qui remplace cela.
- Vérifier que les modules VB compil bien :
- VBA => Débogage => Compiler ‘Nom Projet’
- Vérifier que les modules VB compil bien :
-
Création d’un exécutable :
- FICHIER=> ENREGISTRER SOUS => Créer ACCDE
-
Suppression des menus Outils:
- FICHIER=> OPTIONS=> PERSONNALISER CE RUBAN:
- Sélectionner « Onglets Principaux » => tout désélectionner
- Import/Export => Enregistrer le modèle « vide » (dans rep perso)
- Recharger ce modèle avant export en .accde
- Conserver à la sauvegarde et à l’export
- FICHIER=> OPTIONS=> PERSONNALISER CE RUBAN:
-
Ruban Personnalisé :
- Après ajout du code XML du ruban (Cf Biblio)
- Propriété =>Formulaire => Autres=>Nom du Ruban
-
SplashScreen :
-
Afficher/Masquer Volet Navigation :
- FICHIER => OPTION => BASE ACTIVE => Rubrique « Navigation »
- Soit toute la Barre, soit une sélection d’éléments ou de groupe.
- Conserver à la sauvegarde et à l’export
- Soit toute la Barre, soit une sélection d’éléments ou de groupe.
- FICHIER => OPTION => BASE ACTIVE => Rubrique « Navigation »
-
Activer le Mode Données des Formulaires :
- En mode création => Propriétés => Formulaire => Format => Autoriser le Mode Feuille.
-
Formulaires : Trucs :
- Les champs qui ne sont pas dans la section ‘détail’ du formulaire ne sont pas repris dans les champs du format DONNÉES du formulaire. Mais ils peuvent êtres copié d’en l’en tête.
- Les champs peuvent être indiqués Propriétés => Format=> Visibles = Non dans ce cas ils n’apparaissent pas non plus dans le format données.
- Pour déplacer indépendamment les champs de leurs étiquettes :
- Sélectionner le champs (passe en orange)
- déplacer le carré gris en haut à gauche du champs.
- Pour verrouiller la modification d’un champs (NE LAISSER modifiable que ce qui doit VRAIMENT l’être => sinon change les données dans toutes les tables initiale) :
- Sélectionner le contrôle + Clic Droit
- Propriétés => Données=> Verrouillé => Oui
- Transformer un Champs Texte en Liste Déroulante :
- Sélectionner le contrôle + Clic Droit
- Remplacer par >
- Pour ajouter une champs d’une requête dans un Formulaire :
- Sélectionner l’onglet du Formulaire + Clic Droit
- Mode Saisie
- Onglet CREATION
- Ajouter des Champs existants
- Sélectionner le champs + Clic Glisser
- Si erreur ?#Nom => sauvegarder la base et la rouvrir.
-
Activer Lien Hypertexte :
- En mode création => Propriétés => Formulaire => Autres => Avec Module
- Propriété => (le contrôle) => Événement => On Clic =>
- Dans VBA : Sub
- Application.FollowHyperlink Cible avec Cible au format http:// ou C:/ pour un fichier sur disque
-
Connexion EXCEL :
- DONNEES => AUTRES SOURCES => Provenance ASSISTANT CONNEXION DONNEES => DSN ODBC=>MS ACCESS DATABASE=> Sélectionner la base => Choisir la Table ou le Requête à importer => Enregistrer le Nom de la connexion.
- Sélectionner la cellule d’importation et dans PROPRIETE les modalités de mise à jour (Auto => Fréquence/ Manuelle /A l’ouverture)
- Une table incluse dans une requete dont un champs comporte des ERREUR rendent la requête invisible dans EXCEL (même si ce champs n’est pas appelé par la requête) => Bien vérifier les fonctions de calculs incluses dans les requêtes imbriquées (requêtes qui appellent une autre requête)
-
Pourquoi des ! dans VBA ?
- Sous VB les Objets ont des propriétés : Exemple
- OpenRecodset va avoir une propriété Field qui permet de choisir un champs parmi ceux retournés par la requête.
- CurrentDB.OpenRecordset(« SELECT [Champs1],[Champs2] FROM BASE_TEST », DbOpenForwardOnly) retourne les résultats de 2 champs. Si l’on veut spécifiquement les valeurs du Champs_2 il faut écrire :
- CurrentDB.OpenRecordset(« SE…..Only).Field(« [Champs2] »)
- Ou bien, si il ne risque pas d’y avoir confusion entre les références des différentes propriétés :
- CurrentDB.OpenRecordset(« SE…..Only)![Champs2]
- Plus rapide …. mais plus risqué !
- Sous VB les Objets ont des propriétés : Exemple
-
Code :
-
Ouvertures de bases
- Généralités :
- En SQL les clauses (SELECT/UPDATE/INSERT…) font appelles à des champs de tables. Les champs peuvent être précédés du nom de leur table (préférable au cas ou 2 tables présenteraient chacune un champs portant le même nom). Ce nom doit être entre crochets.
- Exemple : sélection des champs Prenom et Nom de tous les champs de la Base [DATAS] pour les enregistrements dont le champs NOM est égale « Einstein ». Pour les valeurs de Texte encadrer celles ci avec des ‘ (apostrophes) est préférable au » (guillemets). le séparateur de valeur est , (Virgule).
- SELECT [DATAS].Prenom, [DATAS].Nom FROM DATAS WHERE [DATAS].Nom = ‘Einstein’
-
[vb collapse= »True »]
Dim dbs As DAO.Database
Dim rsTable As DAO.Recordset
Dim rsQuery As DAO.Recordset
Dim rsSQL As DAO.Recordset
Dim strSQL As String
‘
Set dbs = CurrentDb
‘
‘Open a table-type Recordset
Set rsTable = dbs.OpenRecordset("Table1", dbOpenTable)
‘
‘Open a dynaset-type Recordset using a saved query
Set rsQuery = dbs.OpenRecordset("qryMyQuery", dbOpenDynaset)
‘
‘Open a snapshot-type Recordset based on an SQL statement
strSQL = "SELECT * FROM Table1 WHERE Field2 = 33"
Set rsSQL = dbs.OpenRecordset(strSQL, dbOpenSnapshot)
‘Cleanup
rsTable.close
rsQuery.close
rsSQL.close
Set rsTable = Nothing
Set rsQuery = Nothing
Set rsSQL = Nothing
[/vb] -
Lecture de bases :
-
[vb collapse= »True »]
‘Extrait de la Table _STATIC la valeur du Path stockée dans le Champs Static_Value
‘pour la valeur ‘DIR_CLT’ de Static_Name (noter les apostrophes, pratique
‘pour éviter le conflit avec les Guillements dans VB.
Dim dbs As DAO.Database
Dim strSQL As String
Dim PathTemp As String’extraction du Path Fiche Client
strSQL = "SELECT * FROM _STATIC WHERE [_STATIC].Static_Name = ‘DIR_CLT’"
Set dbs = CurrentDb
Set rsSQL = dbs.OpenRecordset(strSQL, dbOpenSnapshot)
‘selectionne le premier enregistrement
rsSQL.MoveFirst
PathTemp = rsSQL("Static_Value")
‘Clean
rsSQL.Close
Set rsQuery = Nothing
[/vb] -
Manipulations avec les commandes SQL :
-
- INSERT :
- INSERT [
- UPDATE :
- INSERT :
[vb]
db=CurrentDb()
DoCmd.SetWarnings False
DoCmd.RunSQL ("Requête SQL")
DoCmd.SetWarnings True
[/vb][pastacode lang= »sql » manual= »UPDATE%20%20%20dbo.VENTES%20%0ASET%20%20%20MONTANT%20%3D%202000%20%0AWHERE%20%20%20MOIS%20%3D%20’Janvier’%20%0AIF%20%40%40ROWCOUNT%20%3D%200%20%0ABEGIN%20%0AINSERT%20INTO%20dbo.VENTES%20(%20MOIS%2C%20MONTANT%20)%20%20%0AVALUES%20%20(%20N’Janvier’%2C%202000)%20%0AEND%20%0A » message= »INSET UPDATE » highlight= » » provider= »manual »/]
-
-
Listes Déroulantes Liées :
- Quand un Programme est sélectionné dans la liste déroulante Programme, seuls les lots du programme apparaissent dans la liste déroulante Lots
- http://grenier.self-access.com/access/formulaires/formulaires-listes/listes-deroulantes-liees/
-
Formulaire « Flottant »
- Propriété : Formulaire => Autres => Fenêtre contextuelle : Oui
- Le formulaire devient un Pop-Up
- Propriété : Formulaire => Autres => Fenêtre modale : Ou
- Le formulaire à la main sur le reste de l’appli tant qu’il est ouvert. On ne peut pas aller ailleurs.
- Propriété : Formulaire => Autres => Fenêtre contextuelle : Oui
- ByVal, ByRef
- Si un argument est déclaré ByRef dans une Procédure_1 (Sub ou Function), Sa valeur sera toujours celle passée à l’origine par une Procédure_2 quelque soit les modifications appliquées sur cette variable dans la Procédure_1. Elles pourra y être changée si elle est déclarée ByVal.
-
Jointures :
- En cas de jointure entre 2 tables : METTRE les 2 champs Joints dans la REQUETE (quitte à ne pas les utiliser ou les afficher)
-
Style Word :
- objword.Selection.Paragraphs(1).Style = « Normal »
- objword.Selection.Paragraphs(1).Style = « Titre 2 »
-
-
Biblio :
- Filtre sur État Access :
- Tuto basic :
- http://www.top-assistante.com/bureau/access/table.php
- http://www.info-3000.com/access/index.php (Très complet, Formulaire et sous-formulaire)
- Tuto Multi-utilisateurs :
- Tuto Menus spécifiques :
- Formats des champs :
- Tuto : Boites de saisies :
- Liste des images Mso :
- Tuto XML basic :