Il est de bon ton de se souhaiter la bonne année. Mais vous, et vous seul, pourrez faire en sorte que cette année soit bonne, meilleure que celle qui vient de s'écouler. Apprenez à ne compter que sur vous, car personne n'est plus qualifié que vous-même pour bâtir, réparer ou améliorer votre propre vie. Personne ne fera les choses à votre place. D'ailleurs, tout ce que les autres peuvent faire, c'est souhaiter que vous le fassiez. Et ne croyez pas que tout ceux qui vous entourent vous apporteront des solutions : certains font juste partie de vos problèmes. Transformez vos résolutions en actes, et dans douze mois, retournez-vous et souriez-vous fièrement : C'était long. C'était difficile. Mais ça y est : 2017 était une bonne année, merci Moi.

VBOperationGlobale

VB : Tables, requêtes, ... : Effacer, renommer, ouvrir, fermer, importer, exporter

Ouvertures et fermetures d'objets

Fermeture : DoCmd Close simplement ferme l'objet actif

Ouverture formulaire : DoCmd OpenForm "NomForm"
Fermeture formulaire : DoCmd Close A_FORM, "NomForm"
Ouverture Etat DoCmd OpenReport "NomEtat",A_PREVIEW
Fermeture Etat DoCmd Close A_REPORT, "NomEtat"
Ouverture Table DoCmd OpenTable "NomTable"
Fermeture Table DoCmd Close A_TABLE, "NomTable"
Ouverture requête DoCmd OpenQuery "NomRequête"
Fermeture requête DoCmd Close A_QUERY, "NomRequête"

Il est possible d'ouvrir un formulaire et immédiatemment rechercher un tel enregistrement :

Exemple :

DoCmd OpenForm "F_Article", , , "[IDArticle] = " & VARIDArticle

Effacer / Renommer / Copier

Action Mot-Clé Exemple
Effacer DeleteObject DoCmd DeleteObject A_TABLE, "T_Client"
Renommer Rename DoCmd Rename "NouveauNom", A_TABLE, "AncienNom"
Copier CopyObject DoCmd.CopyObject , "Bakup", acTable, "T_Jouet"

Importation ou exportation de données externes :

Il s'agit par programmation de faire ce que l'on peut faire manuellement avec FICHIER/IMPORTER ou FICHIER/EXPORTER

Access 97

Afin de pouvoir utiliser l’instruction TransferText, il est nécessaire de pouvoir donner un nom à l’ensemble des paramnètres d’une importation de table.

Ce nom d'importation contient le caractère de séparation des données, les formats de date, et surtout, la définition des noms d'accueil des champs (si le fichier à importer n'a pas de noms de champs, on va se retrouver sinon avec des champs comme Field1, Field2, etc.)

Voici la marche à suivre pour définir un nom d’importation personnalisé sous Access 97 :

Fichier/Données externes/Importer

Choisir le type de fichier à importer (.TXT p.ex.)
ATTENTION : Si on essaie d'importer de l'Excel, non seulement, on n'a pas le bouton "Avancé" qui permet de sauvegarder le modèle d'importation, mais en plus, Access force la définition de certains champs comme étant de type numérique alors qu'en fait il existe certains enregistrements dont le type est de texte. Résultat : Plein d'erreurs d'importation, et on ne peut apparemment rien y faire.

Choisir le fichier à importer, et cliquer sur Importer

Cliquer sur Avancé

Définir les options souhaitées

Cliquer sur Enregistrer sous, et donner le nom souhaité

Suppression des tables d'erreurs

Lorsqu'on importe des fichiers, il est possible qu'il se passe quelques erreurs d'importation. Ces erreurs sont consignées dans des tables qui contiennt le signe $. Voici une routine qui permet d'effacer d'un seul coup toutes les tables qui contiennent ce signe $ :

Private Sub EffaceTableErreurImport()
Dim MaTable As TableDef
Dim Ctr
Dim Effacer As Boolean
For Each MaTable In CurrentDb.TableDefs
Effacer = False
For Ctr = 1 To Len(MaTable.Name)
If Mid$(MaTable.Name, Ctr, 1) = "$" Then Effacer = True
Next
If Effacer = True Then DoCmd.DeleteObject acTable, MaTable.Name
Next
End Sub

Importation de fichier texte

DoCmd TransferText A_IMPORTFIXED, "FormatEssai", "T_Client", "C:\NomFichier"

A_IMPORTFIXED Désigne le type des données à importer (ici, des champs à longueur fixe)
FormatEssai Désigne le format personnalisé que l'on désire utiliser. Pour le définir la première fois, il faut aller dans FICHIER/IMPORTER ou FICHIER/EXPORTER (Fichier/Paramètres import export pour le définir)
T_Client Désigne le nom de la table dans laquelle les données vont être ajoutées
C:\NomFichier Désigne le chemin et le nom de fichier qui sera suivant les cas la source ou la cible des données à importer ou à exporter.

Importation/Exportation depuis/dans une feuille Excel

Plutôt que d’utiliser les commandes DDE, il est parfois préférables d’exporter une table ou une requête à l’aide de l’instruction TransferSpreadsheet :

Importation

DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel97, "NomTableOuRequete", "C:\Chemin\NomFichier.xls", True, "NomOngletEtOuPlageDeDonnees"

True = Noms de champs sur la première ligne

ATTENTION : Si la table d'accueil n'existe pas, elle est créée, mais si elle existe, elle n'est pas écrasée, et les nouvelles données sont ajoutées aux anciennes

ATTENTION : J'ai constaté que lors de l'importation d'un fichier Excel, et que dans un champs sont mélangés des données numériques et alphanumériques, il peut arriver que l'importation du champ en question se fasse en numérique et point. Sans aucun espoir de pouvoir le changer en texte. Moralité : Une table d'erreurs d'importations est alors créée. Conclusion : Il est mille fois préférable d'importer des .TXT qui sont, eux., paramétrables à souhait (pour s'en persuader, il suffit d'importer manuellement un tableau excel, et ensuite un .TXT délimité. On voit alors immédiatement dans les boîtes de dialogues la souplesse accrue.)

OBSERVATION : Lors de l'importation d'un fichier Excel sans ligne de titre, il n'est pas question de préparer une table avec des noms de champs différents à F1, F2, F3, etc. Ce qui peut être gênant. Pour contourner simplement cet état de fait, il suffit simplement de créer une requête sélection avec la table ainsi importée, et d'écrire un alias (DateArrivee:F3 par exemple)... MAIS ATTENTION : car en donnant des noms d'alias, j'ai constaté que les états basés sur ces requêtes posaient des problèmes au niveau des utilisation de fonctions ou de chaînes concaténées. Par exemple, une zone de texte qui contiendrait =CodePostal & " " & Ville renvoie une erreur uniquement parce qu'il s'agit d'un alias (mais seulement parce que codepostal est du texte apparemment)

Exportation

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel97, "NomTableOuRequete", "C:\Chemin\NomFichier.xls", True, " NomOngletEtOuPlageDeDonnees "

Si NomFichier n’existe pas, il est créé

S’il existe, il est écrasé sans avertissement

Par contre, comme on peut définir le nom de l’onglet, Access se contente de renvoyer les données dans ce même onglet, sans se soucier s’il existe ou pas (soit il le remplit, soit il le crée)

Il commence à écrire les données en A1, sauf si on lui spécifie une plage de cellules particulière dans NomOnglet