# Macros-commandes VBA/Lectures et écritures
## Manipulation de répertoires

Pour connaitre le répertoire courant, la fonction dépend du logiciel utilisé :
Pour créer un répertoire, il faut préalablement vérifier son inexistence :
Pour détruire un répertoire, il faut préalablement vérifier son existence :
Pour connaitre le statut d'un objet (répertoire, fichier caché...), utiliser GetAttr :
Pour parcourir un répertoire il faut l'ouvrir et analyser son contenu :

## Manipulation de fichiers
### Rechercher des fichiers

Pour rechercher des fichiers Excel en VB 6.3 depuis un fichier .xls :
Pour passer au fichier .xls suivant dans le répertoire, il suffit de rappeler Dir sans paramètre :
* Si le chemin dans la commande Dir contient deux étoiles, elle retrouvera le même fichier lors de son rappel
La version postérieure propose un autre mode de recherche.

### Copier des fichiers

Avec la date du jour pour éviter d'écraser :

### Déplacer des fichiers

PS : cela sert aussi à les renommer.

### Propriétés des fichiers

Pour modifier les propriétés d'un fichier, utiliser SetAttr :
| Paramètre | Valeur alternative | Description |
| vbNormal | 0 | Fichier normal |
| vbReadOnly | 1 | Lecture seule |
| vbHidden | 2 | Fichier caché |
| vbSystem | 4 | Fichier système |
| vbArchive | 32 | Archive |
| vbAlias | 64 | Lien symbolique |
Exemple :

### Fichier texte

Si le fichier text.txt n'existe pas le programme le crée, sinon il l'écrase :
* Line Input est limité à 250 caractères par ligne si on ne déclare pas la variable. Pour éviter qu'elle soit limitée en type String il faut donc spécifier un type :
* Dim Ligne as Variant
* De plus, si le fichier texte lu est au format UNIX, la fonction Line Input lira tout le fichier en une seule fois, sans pouvoir distinguer les lignes. Il faut donc le convertir (généralement depuis PC ANSI) au format PC DOS au préalable, par exemple avec le freeware Textpad, ou en appliquant sur chaque ligne Replace(Ligne, Chr(10), vbCrLf).
Pour ajouter une ligne à la fin sans tout relire :

### Tableau Excel

Avant de procéder à l'une des deux opération de lecture ou d'écriture, il faut ouvrir le fichier en spécifiant le mode d'ouverture avec la fonction fileopen.
Autre solution, en appelant une macro depuis un fichier Excel, il n’est pas nécessaire rouvrir le fichier :
Pour recherche plusieurs occurrences d'une chaine sur la même feuille, il faut enregistrer l'adresse de la première sans quoi le programme tourne en boucle.
Attention : la fonction Find cherche un code contenu dans une cellule, même si elle est plus longue. Pour que la cellule contienne exactement le code recherché, ni plus ni moins, utiliser FindNext en plus :
Sinon pour manipuler un autre fichier dans un deuxième processus Excel en même temps :
* La communication inter-processus est 10 fois plus longue que si les deux fichiers sont ouverts avec Application.Workbooks.Open.

## Accès aux bases de données

Sous Excel, il faut au préalable cocher dans le menu Outils\Références, la bibliothèque ActiveX Data Objects, pour pouvoir stocker les extractions des bases de données dans des objets Recordset (littéralement "jeu d'enregistrement"), comme dans un tableau 2D.
On peut ensuite se connecter en utilisant différents pilotes.
Les propriétés BOF et EOF d'un Recordset signifient "beginning of file" (début de fichier) et "end of file" (fin de fichier). Ils s'appliquent aussi aux jeux d'enregistrement (non sérialisés).

### Lancer une procédure stockée

On lance ici une procédure stockée avec une chaine de caractères et un entier en paramètres :

### Importer un fichier texte dans une BDD

Le fichier doit être au format PC DOS. La commande dépend ensuite du SGBD, par exemple avec MS-SQL c'est BULK INSERT.
Pour afficher une simple sélection de table sans paramètre, la liaison de données d'Excel est une solution plus rapide.