Comment ouvrir un fichier Excel VBA et récupérer automatiquement ses données ?

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 Workbook
Set 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 String
valeur = 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 Long
Dim derniereL As Long
derniereL = wb.Sheets("Feuil1").Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To derniereL
' traitement ligne par ligne
Next 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

Femme programmatrice en télétravail utilisant Excel VBA sur deux écrans dans un espace de travail à domicile chaleureux

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 String
Dim fichier As String
chemin = "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.

Articles en vedette