VB : Tables, requêtes, ... : Effacer, renommer, ouvrir, fermer, importer, exporter
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
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 linstruction TransferText, il est nécessaire de pouvoir donner un nom à lensemble des paramnètres dune 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 dimportation 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
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 dutiliser les commandes DDE, il est parfois préférables dexporter une table ou une requête à laide de linstruction 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 nexiste pas, il est créé
Sil existe, il est écrasé sans avertissement
Par contre, comme on peut définir le nom de longlet, Access se contente de renvoyer les données dans ce même onglet, sans se soucier sil 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