Utiliser ChatGPT pour Écrire des Macros VBA Excel
Premiers Pas : Votre Première Macro VBA Générée par l'IA
ChatGPT peut générer des macros VBA complètes et fonctionnelles à partir de descriptions en langage simple. Pour exécuter une macro, ouvrez Excel, appuyez sur Alt + F11 pour ouvrir l'éditeur VBA, insérez un nouveau module (Insertion > Module), collez le code et exécutez-le avec F5. Votre premier prompt doit être simple et testable — par exemple « Écris une macro VBA qui prend la plage sélectionnée et change la couleur d'arrière-plan en bleu clair. » Cela vérifie que le code généré s'exécute dans votre environnement avant d'aborder des automatisations complexes.
Enregistrez toujours votre classeur en tant que fichier prenant en charge les macros (.xlsm), pas en .xlsx standard. Les classeurs standards suppriment tout le code VBA lors de l'enregistrement. Si vous voyez une barre d'avertissement de sécurité sous le ruban, cliquez sur « Activer le contenu » pour autoriser l'exécution des macros. Pour le code généré par ChatGPT, commencez dans une copie de test de votre classeur jusqu'à ce que vous soyez sûr que la macro se comporte comme prévu.
Macros de Productivité : Exemples Concrets Utilisables Aujourd'hui
Macro 1 : Formater Automatiquement un Tableau de Données
Prompt : « Écris une macro VBA qui prend la sélection actuelle, met en gras la ligne d'en-tête, ajoute des bordures inférieures à toutes les cellules de données, ajuste automatiquement les largeurs de colonnes et fige la ligne supérieure. »
Code généré :
Sub FormatDataTable()
Dim rng As Range
Set rng = Selection
' Formatage de la ligne d'en-tête
With rng.Rows(1)
.Font.Bold = True
.Interior.Color = RGB(68, 114, 196)
.Font.Color = RGB(255, 255, 255)
End With
' Ajouter des bordures à toutes les cellules
With rng.Borders
.LineStyle = xlContinuous
.Weight = xlThin
.Color = RGB(180, 180, 180)
End With
' Ajuster automatiquement les colonnes
rng.EntireColumn.AutoFit
' Figer la ligne supérieure
ActiveWindow.SplitRow = 1
ActiveWindow.FreezePanes = True
MsgBox "Tableau formaté avec succès !", vbInformation
End Sub
Cette macro est sûre et réversible (utilisez Ctrl+Z après l'exécution) et démontre des modèles VBA essentiels : objets Range, blocs With pour une définition efficace des propriétés et retour utilisateur via MsgBox.
Macro 2 : Exporter Chaque Feuille en PDF Séparé
Prompt : « Écris une macro VBA qui exporte chaque feuille du classeur actif en fichier PDF séparé, enregistré dans le même dossier que le classeur, avec des noms de fichiers au format 'NomClasseur_NomFeuille.pdf'. Ignore les feuilles masquées. »
Code généré :
Sub ExportSheetsAsPDF()
Dim ws As Worksheet
Dim folderPath As String
Dim pdfName As String
folderPath = ThisWorkbook.Path & "\"
For Each ws In ThisWorkbook.Worksheets
If ws.Visible = xlSheetVisible Then
pdfName = folderPath & _
Replace(ThisWorkbook.Name, ".xlsm", "") & _
"_" & ws.Name & ".pdf"
ws.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=pdfName, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True
Debug.Print "Exporté : " & pdfName
End If
Next ws
MsgBox "Exportation terminée ! Consultez la fenêtre Exécution (Ctrl+G) pour plus de détails.", vbInformation
End Sub
Cette macro utilise ExportAsFixedFormat, le même moteur qu'Excel utilise pour Fichier > Enregistrer sous > PDF. Elle parcourt la collection Worksheets, ignore les feuilles masquées et construit dynamiquement les noms de fichiers par concaténation de chaînes. Les instructions Debug.Print vous permettent de vérifier la sortie dans la fenêtre Exécution.
Macro 3 : Envoyer des Emails avec Outlook depuis des Données Excel
Prompt : « Écris une macro VBA qui lit les adresses email de la colonne A (à partir de A2), les objets de la colonne B et le corps du message de la colonne C. Pour chaque ligne, envoie un email via Outlook. Arrête-toi quand la colonne A est vide. Ajoute un délai de 2 secondes entre les envois. »
Code généré :
Sub SendBulkEmails()
Dim OutApp As Object
Dim OutMail As Object
Dim i As Long
Dim lastRow As Long
On Error Resume Next
Set OutApp = GetObject(, "Outlook.Application")
If OutApp Is Nothing Then
Set OutApp = CreateObject("Outlook.Application")
End If
On Error GoTo 0
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
If Cells(i, 1).Value = "" Then Exit For
Set OutMail = OutApp.CreateItem(0)
With OutMail
.To = Cells(i, 1).Value
.Subject = Cells(i, 2).Value
.Body = Cells(i, 3).Value
.Send
End With
Application.Wait Now + TimeValue("00:00:02")
Next i
Set OutMail = Nothing
Set OutApp = Nothing
MsgBox "Tous les emails ont été envoyés !", vbInformation
End Sub
La ligne Application.Wait impose un délai de 2 secondes entre les envois, ce qui aide à éviter les limites de débit ou les filtres anti-spam d'Outlook lors d'envois groupés. La gestion d'erreur avec On Error Resume Next et la vérification Nothing gère élégamment le cas où Outlook n'est pas déjà en cours d'exécution.
Ingénierie de Prompts pour un Meilleur Code VBA
La qualité du VBA généré par ChatGPT dépend fortement de la façon dont vous formulez la demande. Utilisez cette approche structurée :
- Définissez le déclencheur : « S'exécute au clic sur un bouton » vs « S'exécute automatiquement à l'ouverture du classeur » vs « S'exécute sur la plage sélectionnée ».
- Spécifiez les emplacements des données : « La colonne A contient les noms des clients à partir de A2, la colonne B contient les adresses email. »
- Décrivez le résultat exact : « Pour chaque ligne, crée une nouvelle feuille nommée d'après le client et copie ses données dedans. »
- Indiquez les exigences de gestion d'erreur : « Ignore les lignes sans adresse email au lieu d'afficher une erreur. »
- Mentionnez les contraintes : « Le classeur a 50 000 lignes, optimise pour la vitesse » ou « Doit fonctionner sous Excel 2016 sur Windows. »
Conseil de pro : Pour les macros complexes, divisez la demande en morceaux plus petits. Demandez d'abord la structure de la boucle principale, puis chaque sous-routine séparément. Demandez à ChatGPT d'ajouter des commentaires en écrivant ; cela facilite considérablement le débogage.
Débogage du Code VBA Généré par l'IA
Les macros générées par l'IA fonctionnent rarement parfaitement du premier coup. Voici un flux de travail de débogage systématique :
- Compilez d'abord : Dans l'éditeur VBA, allez dans Débogage > Compiler VBAProject. Cela détecte les erreurs de syntaxe, les variables non déclarées et les références manquantes avant l'exécution.
- Ajoutez Option Explicit : Si le code généré manque de
Option Expliciten haut du module, ajoutez-le. Cela force la déclaration des variables et détecte les fautes de frappe dans les noms de variables. - Utilisez des points d'arrêt : Cliquez dans la marge gauche à côté d'une ligne pour définir un point d'arrêt, puis appuyez sur F8 pour avancer ligne par ligne. Survolez les variables pour inspecter leurs valeurs actuelles.
- Ajoutez des instructions Debug.Print : Insérez
Debug.Print "Ligne : " & i & " Valeur : " & Cells(i,1).Valueà des points stratégiques pour suivre le flux d'exécution. - Collez les erreurs dans ChatGPT : Copiez le message d'erreur exact et le numéro de ligne, puis demandez « J'ai obtenu 'Erreur d'exécution 1004 : Erreur définie par l'application ou l'objet' à la ligne 12. Voici le code complet. Qu'est-ce qui cause cela ? » L'IA peut souvent s'autocorriger lorsqu'elle reçoit un retour d'erreur spécifique.
Considérations de Sécurité pour les Macros Générées par l'IA
Les macros VBA ont un accès complet à votre système de fichiers, au registre et au réseau. Traitez le code généré par l'IA avec la même prudence que le code téléchargé depuis Internet :
- N'exécutez jamais de macros qui suppriment des fichiers ou modifient les paramètres système sans avoir examiné chaque ligne au préalable. Recherchez les mots-clés :
Kill,RmDir,DeleteFile,Shell,WScript.Shell,RegWrite. - Évitez les macros qui envoient des données sur le réseau à moins de bien comprendre l'URL de destination et les données transmises. Surveillez
XMLHTTP,WinHttp.WinHttpRequest,MSXML2.ServerXMLHTTP. - Vérifiez les déclencheurs d'exécution automatique : Les macros nommées
Auto_OpenouWorkbook_Opens'exécutent automatiquement à l'ouverture du classeur. Examinez-les attentivement. - Utilisez des signatures numériques : Pour les macros que vous prévoyez de distribuer, signez-les avec un certificat numérique (Fichier > Informations > Protéger le classeur > Ajouter une signature numérique).
- Environnements d'entreprise : Si vous êtes sur un appareil géré, votre service informatique peut avoir des stratégies de groupe qui bloquent les macros non signées. Consultez-les avant d'investir du temps dans des solutions basées sur des macros.
Construire une Boîte à Outils VBA Réutilisable
Enregistrez vos macros générées par l'IA les plus fiables dans un classeur de macros personnelles (Personal.xlsb). Ce classeur masqué se charge chaque fois que vous ouvrez Excel, rendant vos macros disponibles dans tous les classeurs. Pour le créer, enregistrez une macro simple et choisissez « Classeur de macros personnelles » comme emplacement de stockage. Ouvrez ensuite l'éditeur VBA, trouvez VBAProject (PERSONAL.XLSB) et ajoutez des modules contenant vos macros sélectionnées.
Organisez les macros en modules par fonction : un pour le formatage, un pour l'exportation de données, un pour l'automatisation des emails et un pour la gestion des feuilles. Ajoutez un onglet de ruban personnalisé (Fichier > Options > Personnaliser le ruban) avec des boutons mappés à vos macros les plus utilisées pour un accès en un clic. Avec le temps, cette boîte à outils remplace des dizaines d'étapes manuelles et garantit la cohérence dans tous vos projets Excel.