Ouvrir un fichier Excel en VBA ne se résume pas à une ligne de code. Entre le chemin du fichier, les paramètres de la méthode Workbooks.Open, les restrictions de sécurité Windows et le choix de la plage à lire, plusieurs variables déterminent si la récupération des données fonctionne ou échoue silencieusement. Voici ce que les différentes approches impliquent concrètement.
Paramètres de Workbooks.Open : ce que chaque argument contrôle
La méthode Workbooks.Open accepte plusieurs arguments qui modifient le comportement à l’ouverture. Les ignorer revient à laisser Excel décider à votre place, ce qui peut produire des résultats inattendus selon le contexte.
| Argument | Type | Rôle |
|---|---|---|
| FileName | String | Chemin complet du fichier à ouvrir |
| UpdateLinks | Variant | Mise à jour des liaisons externes (0 = non, 3 = oui) |
| ReadOnly | Variant | Ouvrir en lecture seule pour éviter les verrous |
| Password | Variant | Mot de passe si le classeur est protégé |
| CorruptLoad | Variant | Comportement en cas de fichier corrompu |
Pour une récupération automatique de données, ouvrir le fichier source en lecture seule (ReadOnly:=True) et sans mise à jour des liens (UpdateLinks:=0) réduit les risques d’interaction involontaire avec le classeur source.
Un code minimal fonctionnel ressemble à ceci :
Dim wb As WorkbookSet wb = Workbooks.Open(FileName:="C:\Données\source.xlsx", ReadOnly:=True, UpdateLinks:=0)
Récupérer des données Excel via VBA : lire une cellule ou une plage
Une fois le classeur ouvert et affecté à une variable objet, la lecture des données suit une syntaxe directe. L’accès se fait par la hiérarchie Workbook > Worksheet > Range.
Pour lire la valeur d’une cellule précise :
Dim valeur As Stringvaleur = wb.Sheets("Feuil1").Range("B2").Value
Pour parcourir une colonne et récupérer toutes les lignes renseignées, une boucle sur la dernière cellule non vide est plus robuste qu’une plage fixe :
Dim i As LongDim derniereL As LongderniereL = wb.Sheets("Feuil1").Cells(Rows.Count, 1).End(xlUp).RowFor i = 2 To derniereL ' traitement ligne par ligneNext i
Utiliser End(xlUp) pour détecter la dernière ligne évite les erreurs quand le nombre de lignes varie d’un fichier à l’autre, ce qui est fréquent dans les workflows d’automatisation.
Après extraction, fermer le classeur source sans le sauvegarder :
wb.Close SaveChanges:=False

Ouvrir plusieurs fichiers Excel dans un dossier avec VBA
Quand la récupération porte sur un ensemble de fichiers stockés dans un même dossier, parcourir le dossier automatiquement évite de coder chaque chemin en dur. La fonction Dir() de VBA permet de lister les fichiers selon un filtre d’extension.
Structure type pour traiter tous les fichiers .xlsx d’un dossier :
Dim chemin As StringDim fichier As Stringchemin = "C:\Données\sources\"fichier = Dir(chemin & "*.xlsx")Do While fichier <> "" Set wb = Workbooks.Open(chemin & fichier, ReadOnly:=True, UpdateLinks:=0) ' extraction ici wb.Close SaveChanges:=False fichier = Dir()Loop
Cette approche est adaptée aux cas où de nouveaux fichiers arrivent régulièrement dans le dossier. La macro s’exécute sur tout ce qu’elle trouve, sans modification du code.
Sécurité Windows et macros bloquées : un point distinct de l’ouverture
Un fichier peut s’ouvrir correctement et pourtant refuser d’exécuter ses macros. Sous Windows, Office bloque par défaut les macros des fichiers marqués comme provenant d’Internet – typiquement un fichier téléchargé par navigateur ou reçu en pièce jointe. Ce marquage est indépendant de l’extension .xlsm ou .xlsx.
- Zone de confiance par emplacement : déclarer un dossier réseau ou local comme emplacement approuvé dans les paramètres du Centre de gestion de la confidentialité d’Excel permet d’éviter le blocage pour tous les fichiers de ce dossier, sans désactiver globalement la sécurité des macros.
- Déblocage fichier par fichier : pour un fichier unique d’origine vérifiée, cocher « Débloquer » dans les propriétés du fichier sous Windows (onglet Général) supprime le marqueur de zone Internet.
- OneDrive et SharePoint : un fichier synchronisé via le client OneDrive bureau peut contourner le marqueur associé à un téléchargement direct par navigateur, selon la façon dont il a été reçu.
Microsoft recommande de traiter la confiance au niveau du fichier ou de l’emplacement, plutôt que de désactiver l’ensemble des protections macros.
VBA ou Power Query : deux approches pour récupérer des données Excel
Pour une récupération ponctuelle ou très personnalisée, VBA reste pertinent. Pour une consolidation régulière de fichiers d’un même dossier, Power Query propose un connecteur de dossier natif qui combine et transforme les fichiers, puis actualise les résultats quand de nouveaux fichiers arrivent.
| Critère | VBA | Power Query |
|---|---|---|
| Automatisation planifiée | Oui (macro déclenchée) | Actualisation manuelle ou via macro |
| Transformation complexe | Oui (code libre) | Oui (interface graphique) |
| Nouveaux fichiers détectés automatiquement | Oui avec Dir() | Oui (connecteur dossier) |
| Compétence requise | VBA / programmation | Faible (interface) |
| Dépendance à l’activation des macros | Oui | Non |
La principale différence opérationnelle : Power Query ne nécessite pas l’activation des macros, ce qui simplifie le déploiement dans des environnements où les politiques de sécurité sont restrictives. VBA garde l’avantage dès que la logique de traitement dépasse la simple consolidation de colonnes.
Pour les flux où le chemin du dossier, les noms de feuilles ou la structure des données varient d’un fichier à l’autre, VBA reste la solution la plus adaptable. La clé est de construire la macro autour de variables (chemin, nomFeuille, plage) plutôt que de valeurs codées en dur, pour qu’elle reste utilisable quand les sources évoluent.

