L'administration système moderne exige une gestion rigoureuse des tâches récurrentes. Visual Basic for Applications (VBA), bien qu'historiquement associé à la bureautique, constitue un moteur d'automatisation robuste pour les environnements Windows. Son intégration native avec la suite Microsoft Office et l'accès aux API COM (Component Object Model) permettent de créer des utilitaires légers pour la surveillance, l'extraction de données et la génération d'alertes sans nécessiter d'infrastructure de déploiement complexe.
Architecture et Capacités Techniques
VBA s'exécute au sein d'une application hôte et interagit directement avec les objets du système d'exploitation. Ses caractérsitiques techniques le rendent particulièrement adapté aux opérations de maintainance :
- Interopérabilité COM : Possibilité de piloter d'autres applications (comme Outlook ou Excel) depuis un script unique.
- Manipulation de données : Intégration native avec les moteurs de base de données via ADO (ActiveX Data Objects) et DAO.
- Interaction avec le système de fichiers : Utilisation de l'objet
Scripting.FileSystemObjectpour lire, écrire et analyser des fichiers journaux.
Applications Pratiques en Infrastructure
L'automatisation via VBA permet d'éliminer les interventions manuelles sujettes aux erreurs et de standardiser les processus d'exploitation.
1. Analyse Automatisée des Fichiers Journaux
Le traitement des logs système est crucial pour la détection proactive d'incidents. En utilisant l'objet FileSystemObject, il est possible d'analyser de volumineux fichiers texte et d'en extraire des métriques spécifiques.
Sub AnalyserJournalSysteme()
Dim fso As Object
Dim fichierTexte As Object
Dim cheminJournal As String
Dim ligneCourante As String
Dim nbErreurs As Long
Dim nbCritiques As Long
cheminJournal = "D:\Logs\Systeme\app_events.log"
nbErreurs = 0
nbCritiques = 0
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FileExists(cheminJournal) Then
Set fichierTexte = fso.OpenTextFile(cheminJournal, 1)
Do Until fichierTexte.AtEndOfStream
ligneCourante = fichierTexte.ReadLine
If InStr(1, ligneCourante, "ERROR", vbTextCompare) > 0 Then
nbErreurs = nbErreurs + 1
ElseIf InStr(1, ligneCourante, "CRITICAL", vbTextCompare) > 0 Then
nbCritiques = nbCritiques + 1
End If
Loop
fichierTexte.Close
End If
MsgBox "Analyse terminée." & vbCrLf & "Erreurs: " & nbErreurs & vbCrLf & "Critiques: " & nbCritiques, vbInformation, "Rapport"
End Sub
Ce script parcourt le fichier ligne par ligne, évalue la présence de mots-clés spécifiques insensibles à la case et consolide les résultats dans une boîte de dialogue, prêt à être planifié via le Planificateur de tâches Windows.
2. Extraction et Formatage de Données de Base de Données
Les opérations de sauvegarde nécessitent souvent l'exportation de données brutes vers des formats lisibles. L'utilisation de la bibliothèque ADODB offre une méthode optimisée pour extraire des données d'Access et les structurer dans Excel sans boucle d'itération lente.
Sub ExporterDonneesAccess()
Dim conn As Object
Dim rs As Object
Dim chaineConnexion As String
Dim requeteSql As String
Dim appExcel As Object
Dim classeur As Object
Dim feuille As Object
chaineConnexion = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Data\Infra.accdb;"
requeteSql = "SELECT * FROM HistoriqueServeurs"
Set conn = CreateObject("ADODB.Connection")
conn.Open chaineConnexion
Set rs = CreateObject("ADODB.Recordset")
rs.Open requeteSql, conn
Set appExcel = CreateObject("Excel.Application")
appExcel.Visible = False
Set classeur = appExcel.Workbooks.Add
Set feuille = classeur.Sheets(1)
Dim i As Integer
For i = 0 To rs.Fields.Count - 1
feuille.Cells(1, i + 1).Value = rs.Fields(i).Name
Next i
feuille.Cells(2, 1).CopyFromRecordset rs
classeur.SaveAs "C:\Data\Export_Serveurs.xlsx", 51
classeur.Close False
appExcel.Quit
rs.Close
conn.Close
End Sub
L'instruction CopyFromRecordset transfère l'intégralité du jeu de résultats en une seule opération, optimisant considérablement les performances lors du traitement de milliers d'enregistrements.
3. Système de Notification par Courriel
La communication des états de service peut être déléguée à un processus en arrière-plan. En instanciant l'application Outlook, un script peut compiler et distribuer des rapports d'infrastructure.
Sub NotifierEquipeSupport()
Dim corpsMessage As String
Dim destinataire As String
destinataire = "sysadmin@entreprise.com"
corpsMessage = "Rapport Quotidien d'Infrastructure" & vbCrLf & _
"------------------------------" & vbCrLf & _
"État du cluster: Actif" & vbCrLf & _
"Utilisation CPU: 32%" & vbCrLf & _
"Incidents détectés: Aucun"
EnvoyerEmailAutomatique destinataire, "Mise à jour Infrastructure", corpsMessage
End Sub
Private Sub EnvoyerEmailAutomatique(pDest As String, pSujet As String, pCorps As String)
Dim outlookApp As Object
Dim mailItem As Object
On Error Resume Next
Set outlookApp = GetObject(, "Outlook.Application")
If Err.Number <> 0 Then
Set outlookApp = CreateObject("Outlook.Application")
End If
On Error GoTo 0
Set mailItem = outlookApp.CreateItem(0)
With mailItem
.To = pDest
.Subject = pSujet
.Body = pCorps
.Send
End With
End Sub
Cette implémentation tente d'abord de se lier à une instance existante d'Outlook pour éviter de multiplier les processus en mémoire, avant d'en créer une nouvelle si nécessaire.
Pratiques de Développement et Débogage
Pour maintenir des scripts d'administration fiables, l'environnement de développement intégré (IDE) de VBA offre plusieurs outils natifs :
- Explorateur d'objets (F2) : Indispensable pour découvrir les propriétés et méthodes exposées par les bibliothèques externes.
- Gestion des erreurs : L'utilisation structurée de
On Error GoTopermet d'intercepter les défaillances de connexion réseau ou d'accès aux fichiers. - Points d'arrêt et exécution pas à pas : Facilite l'inspection des variables en temps réel lors de la manipulation d'objets COM complexes.