Une classe VBA complète et robuste permettant de lire, écrire et manipuler des fichiers texte ou binaires via ADODB.Stream. Elle offre une interface simple, cohérente et sécurisée pour gérer les fichiers dans vos projets VBA, tout en intégrant des boîtes de dialogue natives et un suivi précis des opérations.
Avertissement : lors de la lecture de fichiers texte, dont la taille dépasse 4 Go, des pertes de données ont été constatées. Certaines parties du fichier sont ignorées par AdoDB.Stream, et par conséquent, ne sont pas restituées par la méthode LireEnregistrement. Ces enregistrements ignorés restent négligeables par rapport à la taille du fichier, mais induisent un manque de fiabilité dans la gestion des fichiers volumineux.
ADODB/
├── ADODB.cls
├── AdoDB_Enum.bas
├── ExempleADODB.bas
├── LICENSE
└── README.md
- Microsoft Excel / VBA
- Référence Microsoft ActiveX Data Objects x.x Library
Projet distribué sous licence MIT.
Les méthodes Open, Input, Line Input, Print sont limitées et peu fiables selon l’encodage.
ADODB.Stream offre une gestion plus stable, plus rapide et compatible avec les encodages modernes.
UTF‑8, UTF‑16, ANSI, binaire… La classe encapsule toute la complexité et vous permet de choisir simplement l’encodage souhaité.
Sélection de fichiers, enregistrement sous, choix de répertoire… Sans API Windows ni code complexe.
Même logique pour le texte et le binaire. Chaque propriété est définie avec un Enum afin de disposer de tous les choix possibles en clair (sans devoir consulter la documentation technique). Plus besoin de jongler entre plusieurs syntaxes VBA.
- Vérification d’existence des fichiers et répertoires
- Gestion propre des flux
- Compteurs d’octets et d’enregistrements
- Détection de fin de fichier
La classe est pensée pour être :
- réutilisable
- stable
- documentée
- facile à intégrer
- TypeFichier : texte ou binaire
- Encodage / EncodageTxt : choix de l'encodage avec une Enum ou saisie libre
- SeparateurLigne : séparateur de lignes (CR, LC, CR/LF)
- ModeAcces : lecture, modification ou écriture
- NomFichier : nom du fichier physique à traiter
- Ouvrir : Ouvrir un fichier via ADODB
- LireFichier : Lire l'intégralité d'un fichier (texte ou binaire)
- LireEnregistrement : Lire un fichier texte jusqu'au prochain séparateur
- FinFichier : Fin du fichier texte atteinte
- Lire : Lire n caractères d'un fichier (texte ou binaire)
- Ecrire : Ecrire des données dans un fichier texte ou binaire
- EcrireEnregistrement : Ecrire un enregistrement dans un fichier texte
- EnregistrerSous : Enregistrer sous le nom de fichier le contenu de l'objet ADODB.Stream
- Fermer : Fermer un fichier
- TitreBoiteDeDialogue : Titre affiché dans les boîtes de dialogue
- LibelleFiltre : Libellé du filtre utilisé pour afficher les fichiers dans une boîte de dialogue
- ExtensionFiltre : Filtre des extensions de fichier utilisé dans une boîte de dialogue
- NomInitialFichier : Nom initial du fichier affiché dans une boîte de dialogue lors d'un enregsitrement sous
- Filtre : Filtre des extensions (parmi celles proposées par Excel) de fichier utilisé dans une boîte de dialogue
- SelectionnerFichier : sélectionner le nom d'un fichier à lire dans une boite de dialogue Excel
- SelectionnerFichierEnregistrerSous : saisir le nom d'un fichier à écrire dans une boite de dialogue Excel
- SelectionnerRepertoire : sélectionner un répertoire à traiter
- NbreEnregLus / NbreEnregEcrits
- NbreOctetsLus / NbreOctetsEcrits
- FichierExiste
- RepertoireExiste
- EstFichierVolumineux
- LongueurFichier
AdoDB.cls(cette classe)AdoDB_Enum.bas(module contenant les Enum)- Référence obligatoire :
Microsoft ActiveX Data Objects x.x Library
ADODB.StreamScripting.Dictionary
-
Importer les fichiers :
AdoDB.clsAdoDB_Enum.bas
-
Activer la référence :
- Microsoft ActiveX Data Objects 6.1 Library (ou version équivalente)
-
Vérifier que les Enum sont bien dans un module standard.
' Déclaration d'un objet ADODB
Dim oFichier As New ADODB
' Enregistrement
Dim sEnreg As String
' Créer un fichier texte
' Ecriture dans le flux ADODB de l'entête du fichier texte
sEnreg = "Marque;Modele;Categorie;Carburant;Puissance" & vbCrLf
' Ouverture du fichier CSV en écriture
With oFichier
.TypeFichier = AD_TYPE_TEXT
.TypeAcces = AD_MODE_WRITE
.Encodage = AD_UTF_8
.Ouvrir
' Ecriture des donnees dans le flux ADODB
.EcrireEnregistrement (sEnreg)
' Sélectionner le nom du fichier
.NomInitialFichier = Environ("OneDrive") & "\Documents\tests.txt"
.ExtensionFiltre = "*.txt"
.TitreBoiteDeDialogue = "Enregistrer le fichier sous"
.SelectionnerFichierEnregistrerSous
' Si le nom du fichier n'a pas été sélectionné alors on quitte
If .NomFichier <> "" Then
' Enregistrement du flux ADODB
.EnregistrerSous
' Fermeture du flux
End If
.Fermer
End With
' Libérer les ressources
Set oFichier = Nothing
' Déclaration d'un objet ADODB
Dim oFichier As New ADODB
' Enregistrement
Dim sEnreg As String
' Ouverture du fichier en lecture
With oFichier
.TypeFichier = AD_TYPE_TEXT
.TypeAcces = AD_MODE_READ
.Encodage = AD_UTF_8
.SeparateurLigne = AD_CR_LF
.NomFichier = sNomFichier
.Ouvrir
End With
' Lecture des enregsitrements
While Not oFichier.FinFichier
sEnreg = oFichier.LireEnregistrement
' Afficher l'enregsitrement lu dans la console VBA
Debug.Print sEnreg
Wend
' Fermeture du fichier
oFichier.Fermer
' Libérer les ressources
Set oFichier = Nothing