formateur informatique

Créer un répertoire d'archives s'il n'existe pas

Accueil  >  Bureautique  >  Access  >  Access VBA  >  Créer un répertoire d'archives s'il n'existe pas
Livres à télécharger


Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :


Inscription Newsletter    Abonner à Youtube    Vidéos astuces Instagram
Sujets que vous pourriez aussi aimer :


Créer des dossiers en VBA

Nous poursuivons le perfectionnement d'une petite application. A l'occasion des volets précédents et par le biais d'un formulaire Access, nous avons permis à l'utilisateur d'exporter les données de tables dans un fichier Csv. Et pour que chaque exportation n'écrase pas les données précédemment écrites, nous avions adapté la méthode d'écriture. Dans ce nouveau volet, nous souhaitons laisser à l'utilisateur le choix du sous-dossier dans lequel doivent se produire ces exportations. Si ce sous-dossier n'existe pas, il doit naturellement être créé à la volée par le code VBA Access.

Base de données Access à télécharger
Pour la mise en place de cette astuce, il est opportun d'appuyer l'étude sur les travaux aboutis à l'occasion des volets précédents. En consultant le volet de navigation sur la gauche de l'écran, vous constatez que nous retrouvons les quatre tables et le formulaire du volet précédent. Ces tables sont toutes structurées de la même façon. Elles embarquent des enregistrements qui se suivent et qu'il convient de consolider dans un fichier externe unique.
  • Dans le volet de navigation, double cliquer sur le formulaire fExport pour l'exécuter,
Formulaire Access pour exporter des données dans un dossier

Une liste déroulante se charge automatiquement des noms des tables présentes dans cette base de données. L'utilisateur n'a plus qu'à choisir l'une d'entre elles et à cliquer sur le bouton Exporter pour procéder à l'extraction CSV des données, potentiellement à la suite d'une précédente exportation de table. La nouveauté réside dans la présence d'une zone de texte au-dessus des boutons. Pour information, elle porte le nom sDossier. L'opérateur doit y indiquer le nom du sous dossier local dans lequel doit être produite cette extraction. Il est donc libre d'organiser les exportations à sa guise. Et c'est précisément ce bout de code VBA qui manque pour parfaire cette solution.

La procédure d'extraction
Pour débuter, nous proposons d'accéder à la procédure de code existante et attachée au bouton Exporter. C'est elle qui réalise déjà l'exportation CSV des données de la table choisie. Mais pour l'instant, cette extraction se fait sur un emplacement absolument statique.
  • Dans le ruban Accueil, cliquer sur la flèche du bouton Affichage,
  • Dans les propositions, choisir le mode Création,
  • Sur le formulaire en conception, cliquer sur le bouton Exporter pour le sélectionner,
  • Dès lors, activer l'onglet Evénement de sa feuille de propriétés,
  • Puis, cliquer sur le petit bouton situé à droite de son événement Au clic,
De fait, nous basculons dans l'éditeur VBA Access entre les bornes de la procédure événementielle exporter_Click. Le code VBA accède aux enregistrements de la table définie. Il ouvre l'accès en écriture (For Append) à un fichier CSV (consolidation.csv), placé statiquement dans un sous dossier nommé export. C'est cela que nous devons adapter. Pour chaque enregistrement passé en revue, il reconstruit les informations de tous ses champs, séparées par des délimiteurs (;) pour exporter ces enregistrements reconstitués les uns en dessous des autres, dans ce format universel de communication.

La variable du nom de dossier
Nous devons donc tout d'abord déclarer une variable pour réceptionner le nom de dossier choisi par l'utilisateur par le biais de la zone de texte qui rappelons-le, se nomme sDossier.
  • Dans la partie déclarative de la procédure, ajouter la déclaration suivante :
Private Sub exporter_Click()
Dim base As Database: Dim enr As Recordset
Dim nomTable As String: Dim ligne As String
Dim nomF As String: Dim nomD As String

If (listeTables.Value <> "") Then
...


Avant d'affecter cette variable, nous devons déjà nous assurer que l'utilisateur a bien renseigné un nom de dossier. Donc tout le traitement existant doit désormais être encapsulé dans une instruction conditionnelle à imbriquer elle-même dans celle qui teste si l'utilisateur a bien choisi un nom de table avec la liste déroulante.
  • Dans la première condition, avant l'affectation de la variable nomF, créer le critère suivant :
...
Dim nomF As String: Dim nomD As String

If (listeTables.Value <> "") Then
nomTable = listeTables.Value
If (sDossier <> "") Then
nomF = CurrentProject.Path & "\export\consolidation.csv"
...


Il s'agit d'une ébauche car cette instruction doit être bornée. Cette instruction vérifie simplement que l'utilisateur a bien renseigné un nom de dossier (sDossier <> ""). Le cas échéant en effet, il n'est pas nécessaire de poursuivre le traitement. Et ce que nous devons indiquer désormais.
  • A la fin du code et avant le End If, ajouter la branche contraire comme suit :
...
enr.Close
base.Close
Set base = Nothing
Set enr = Nothing
Else
MsgBox "Vous devez spécifier un nom de sous dossier pour l'exportation!", vbCritical
End If

End If
End Sub


Si aucun nom de dossier n'est renseigné, le traitement est avorté et l'utilisateur en est informé grâce à un message explicite par le biais de la fonction VBA MsgBox.
  • Enregistrer les modifications (CTRL + S) et basculer sur le formulaire (ALT + Tab),
  • Exécuter ce dernier avec la touche F5 du clavier,
  • Choisir une table avec la liste déroulante puis cliquer sur le bouton Exporter,
Exportation des données refusée car dossier nom spécifié en VBA Access

En l'absence de nom de dossier, c'est la branche Else de la seconde instruction conditionnelle qui se déclenche. En conséquence, le traitement pour l'exportation des données est ignoré et le code est terminé.

Le chemin d'accès au dossier
Nous le savons, c'est la propriété Path de l'objet CurrentProject qui renvoie le chemin d'accès au dossier de l'application. Si la zone sDossier n'est pas vide, nous devons lui concaténer le nom du dossier mentionné par l'utilisateur.
  • Dans les bornes de la nouvelle instruction conditionnelle, ajouter l'affectation suivante :
...
nomTable = listeTables.Value
If (sDossier <> "") Then
nomD = CurrentProject.Path & "\" & sDossier & "\"
nomF = CurrentProject.Path & "\export\consolidation.csv"
...


Les antislashs sont très importants pour entrer dans le sous dossier.

Vérifier si le dossier existe
Si ce sous dossier existe, il doit être exploité pour y procéder à l'exportation des données de tables au format Csv. S'il n'existe pas, il doit d'abord être créé. Et ce sont des instructions et fonctions empruntées au DOS que nous allons utiliser pour tester l'existence du dossier dans un premier temps et le créer le cas échéant.
  • Juste en-dessous de l'affectation précédente, ajouter l'instruction conditionnelle suivante :
...
If (sDossier <> "") Then
nomD = CurrentProject.Path & "\" & sDossier & "\"
If Dir(nomD, vbDirectory) = vbNullString Then
MkDir nomD
End If

nomF = CurrentProject.Path & "\export\consolidation.csv"
...


Grâce à lafonction Dir et à son second paramètre vbDirectory, nous testons si le dossier passé en premier argument (nomD) n'existe pas (vbNullString). Dans ces conditions, nous engageons la commande MkDir sur ce nom de dossier pour le créer. Dans le cas contraire, nous considérons qu'il existe déjà et nous l'exploiterons naturellement.

Le chemin de l'exportation
Il ne nous reste plus qu'à adapter le chemin du fichier pour l'exportation dans la variable nomF. Cette exportation ne doit plus se produire dans le sous dossier fixe nommé export. Elle doit tenir compte du nom du sous dossier indiqué par l'utilisateur et potentiellement fraîchement créé par le code VBA Access.
  • Adapter l'affectation de la variable nomF comme suit :
...
nomF = nomD & "consolidation.csv"
...


Exporter dans un nouveau sous dossier
Il est désormais temps de tester cette exportation et consolidation des données dans un sous dossier défini à la volée par l'utilisateur.
  • Enregistrer les modifications (CTRL + S) et basculer sur le formulaire (ALT + Tab),
  • Avec la liste déroulante, choisir la table societes1,
  • Dans la zone de texte, saisir par exemple le nom de sous-dossier suivant : archives,
  • Puis, cliquer sur le bouton Exporter,
Aucune alerte ne surgit semblant confirmer que l'exportation dans le nouveau dossier s'est convenablement réalisée.

Exporter les données Access dans un nouveau dossier créé par le code VBA

Effectivement, si vous accédez au dossier de décompression dans l'explorateur Windows, vous notez la présence du nouveau sous-dossier. Si vous l'ouvrez, vous remarquez la présence du fichier Csv d'exportation. Et si vous l'éditez, vous constatez que tous les enregistrements de la première table y figurent bien. Chaque donnée de champ est séparée d'une autre par un délimiteur, ici le point-virgule (;) en l'occurrence. Enfin, si vous exportez les données d'une autre table depuis le formulaire Access, vous avez le plaisir de constater que ses informations sont ajoutées à la suite des précédentes dans le fichier d'exportation CSV.

 
Sur Facebook
Sur Youtube
Les livres
Contact
Mentions légales



Abonnement à la chaîne Youtube
Partager la formation
Partager sur Facebook
Partager sur Twitter
Partager sur LinkedIn