Un guide VBA avancé pour MS Excel

Si vous débutez avec VBA , vous voudrez commencer à étudier notre guide VBA pour débutants(VBA guide for beginners) . Mais si vous êtes un expert chevronné de VBA et que vous recherchez des choses plus avancées que vous pouvez faire avec VBA dans Excel , continuez à lire.

La possibilité d'utiliser le codage VBA dans (VBA)Excel ouvre tout un monde d'automatisation. Vous pouvez automatiser les calculs dans Excel , les boutons-poussoirs et même envoyer des e-mails. Il existe plus de possibilités d'automatiser votre travail quotidien avec VBA que vous ne le pensez.

Guide VBA avancé pour Microsoft Excel(Advanced VBA Guide For Microsoft Excel)

L'objectif principal de l'écriture de code VBA dans (VBA)Excel est de pouvoir extraire des informations d'une feuille de calcul, d'effectuer divers calculs dessus, puis de réécrire les résultats dans la feuille de calcul.

Voici les utilisations les plus courantes de VBA dans Excel .

  • Importer(Import) des données et effectuer des calculs
  • Calculer(Calculate) les résultats d'un utilisateur appuyant sur un bouton
  • Envoyer(Email) les résultats des calculs par e-mail à quelqu'un

Avec ces trois exemples, vous devriez être en mesure d'écrire une variété de votre propre code Excel VBA avancé.(Excel VBA)

Importation de données et réalisation de calculs(Importing Data and Performing Calculations)

L'une des choses les plus courantes pour lesquelles les gens utilisent Excel consiste à effectuer des calculs sur des données qui existent en dehors d' Excel . Si vous n'utilisez pas VBA , cela signifie que vous devez importer manuellement les données, exécuter les calculs et générer ces valeurs dans une autre feuille ou un autre rapport.

Avec VBA , vous pouvez automatiser l'ensemble du processus. Par exemple, si un nouveau fichier CSV est téléchargé dans un répertoire de votre ordinateur tous les lundis(Monday) , vous pouvez configurer votre code VBA pour qu'il s'exécute lorsque vous ouvrez votre feuille de calcul pour la première fois le (VBA)mardi(Tuesday) matin.

Le code d'importation suivant s'exécutera et importera le fichier CSV dans votre feuille de calcul Excel .

Dim ws As Worksheet, strFile As String

Set ws = ActiveWorkbook.Sheets("Sheet1")
Cells.ClearContents

strFile = “c:\temp\purchases.csv”

With ws.QueryTables.Add(Connection:="TEXT;" & strFile, Destination:=ws.Range("A1"))
     .TextFileParseType = xlDelimited
     .TextFileCommaDelimiter = True
     .Refresh
End With

Ouvrez l' outil d'édition Excel VBA et sélectionnez l' objet Sheet1 . Dans les listes déroulantes d'objet et de méthode, choisissez Feuille(Worksheet) de calcul et Activer(Activate) . Cela exécutera le code chaque fois que vous ouvrirez la feuille de calcul.

Cela créera une fonction Sub Worksheet_Activate() . Collez le code ci-dessus dans cette fonction.

Cela définit la feuille de calcul active sur Sheet1 , efface la feuille, se connecte au fichier en utilisant le chemin de fichier que vous avez défini avec la variable strFile , puis la boucle With parcourt chaque ligne du fichier et place les données dans la feuille à partir de la cellule A1 .

Si vous exécutez ce code, vous verrez que les données du fichier CSV sont importées dans votre feuille de calcul vierge, dans Sheet1 .

L'importation n'est que la première étape. Ensuite, vous souhaitez créer un nouvel en-tête pour la colonne qui contiendra vos résultats de calcul. Dans cet exemple, supposons que vous souhaitiez calculer les 5 % de taxes payées sur la vente de chaque article.

L'ordre des actions que votre code doit effectuer est :

  1. Créez une nouvelle colonne de résultats appelée taxes .
  2. Parcourez la colonne des unités vendues(units sold) et calculez la taxe de vente.
  3. Écrivez les résultats du calcul dans la ligne appropriée de la feuille.

Le code suivant accomplira toutes ces étapes.

Dim LastRow As Long
Dim StartCell As Range
Dim rowCounter As Integer
Dim rng As Range, cell As Range
Dim fltTax As Double

Set StartCell = Range("A1")

'Find Last Row and Column
LastRow = ws.Cells(ws.Rows.Count, StartCell.Column).End(xlUp).Row
Set rng = ws.Range(ws.Cells(2, 4), ws.Cells(LastRow, 4))

rowCounter = 2
Cells(1, 5) = "taxes"

For Each cell In rng
fltTax = cell.Value * 0.05
Cells(rowCounter, 5) = fltTax
rowCounter = rowCounter + 1
Next cell

Ce code trouve la dernière ligne de votre feuille de données, puis définit la plage de cellules (la colonne avec les prix de vente) en fonction de la première et de la dernière ligne de données. Ensuite, le code parcourt chacune de ces cellules, effectue le calcul de la taxe et écrit les résultats dans votre nouvelle colonne (colonne 5).

Collez le code VBA ci-dessus sous le code précédent et exécutez le script. Vous verrez les résultats apparaître dans la colonne E.

Désormais, chaque fois que vous ouvrirez votre feuille de calcul Excel , elle sortira automatiquement et obtiendra la copie la plus récente des données du fichier CSV . Ensuite, il effectuera les calculs et écrira les résultats sur la feuille. Vous n'avez plus rien à faire manuellement !

Calculer les résultats en appuyant sur le bouton(Calculate Results From Button Press)

Si vous préférez avoir un contrôle plus direct sur le moment où les calculs s'exécutent, plutôt que de s'exécuter automatiquement à l'ouverture de la feuille, vous pouvez utiliser un bouton de contrôle à la place.

Les boutons de contrôle(Control) sont utiles si vous souhaitez contrôler les calculs utilisés. Par exemple, dans le même cas que ci-dessus, que se passe-t-il si vous souhaitez utiliser un taux d'imposition de 5 % pour une région et un taux d'imposition de 7 % pour une autre ?

Vous pouvez autoriser l'exécution automatique du même code d'importation CSV , mais laisser le code de calcul de la taxe s'exécuter lorsque vous appuyez sur le bouton approprié.

À l'aide de la même feuille de calcul que ci-dessus, sélectionnez l' onglet Développeur , puis sélectionnez (Developer)Insérer(Insert) dans le groupe Contrôles(Controls) du ruban. Sélectionnez le bouton-poussoir (push button) Contrôle ActiveX(ActiveX Control) dans le menu déroulant.

Dessinez le bouton-poussoir sur n'importe quelle partie de la feuille loin de l'endroit où les données iront.

Cliquez avec le bouton droit sur le bouton-poussoir et sélectionnez Propriétés(Properties) . Dans la fenêtre Propriétés(Properties) , remplacez la légende par ce que vous souhaitez afficher à l'utilisateur. Dans ce cas, il peut s'agir de Calculate 5% Tax .

Vous verrez ce texte reflété sur le bouton-poussoir lui-même. Fermez la fenêtre des propriétés et double-cliquez sur le bouton-poussoir lui-même. (properties)Cela ouvrira la fenêtre de l'éditeur de code et votre curseur se trouvera à l'intérieur de la fonction qui s'exécutera lorsque l'utilisateur appuie sur le bouton-poussoir.

Collez le code de calcul de la taxe de la section ci-dessus dans cette fonction, en maintenant le multiplicateur du taux de taxe à 0,05. N'oubliez pas d'inclure les 2 lignes suivantes pour définir la feuille active.

Dim ws As Worksheet, strFile As String

Set ws = ActiveWorkbook.Sheets("Sheet1")

Maintenant, répétez le processus à nouveau, en créant un deuxième bouton-poussoir. Créez la légende Calculate 7% Tax .

Double-cliquez sur(Double-click) ce bouton et collez le même code, mais faites en sorte que le multiplicateur de taxe soit de 0,07.

Maintenant, selon le bouton sur lequel vous appuyez, la colonne des taxes sera calculée en conséquence.

Une fois que vous avez terminé, vous aurez les deux boutons poussoirs sur votre feuille. Chacun d'eux lancera un calcul de taxe différent et écrira des résultats différents dans la colonne des résultats. 

Pour envoyer ce texte, sélectionnez le menu Développeur et sélectionnez (Developer)Mode de conception(Design Mode) dans le groupe Contrôles(Controls) du ruban pour désactiver le mode de conception(Design Mode) . Cela activera les boutons-poussoirs. 

Essayez de sélectionner chaque bouton-poussoir pour voir comment la colonne de résultat "taxes" change.

Envoyer les résultats du calcul par e-mail à quelqu'un(Email Calculation Results to Someone)

Que faire si vous souhaitez envoyer les résultats de la feuille de calcul à quelqu'un par e-mail ?

Vous pouvez créer un autre bouton appelé Email Sheet to Boss en utilisant la même procédure ci-dessus. Le code de ce bouton impliquera l'utilisation de l' objet Excel CDO pour configurer les paramètres de messagerie SMTP et l'envoi par e-mail des résultats dans un format lisible par l'utilisateur.

Pour activer cette fonctionnalité, vous devez sélectionner Outils et références(Tools and References) . Faites défiler vers le bas jusqu'à Microsoft CDO pour Windows 2000 Library(Microsoft CDO for Windows 2000 Library) , activez-le et sélectionnez OK .

Il y a trois sections principales dans le code que vous devez créer pour envoyer un e-mail et intégrer les résultats de la feuille de calcul.

La première consiste à configurer des variables pour contenir le sujet, les adresses To et From et le corps de l'e-mail.

Dim CDO_Mail As Object
Dim CDO_Config As Object
Dim SMTP_Config As Variant
Dim strSubject As String
Dim strFrom As String
Dim strTo As String
Dim strCc As String
Dim strBcc As String
Dim strBody As String
Dim LastRow As Long
Dim StartCell As Range
Dim rowCounter As Integer
Dim rng As Range, cell As Range
Dim fltTax As Double
Set ws = ActiveWorkbook.Sheets("Sheet1")
strSubject = "Taxes Paid This Quarter"
strFrom = "[email protected]"
strTo = "[email protected]"
strCc = ""
strBcc = ""
strBody = "The following is the breakdown of taxes paid on sales this quarter."

Bien sûr, le corps doit être dynamique en fonction des résultats dans la feuille, vous devrez donc ajouter ici une boucle qui parcourt la plage, extrait les données et écrit une ligne à la fois dans le corps.

Set StartCell = Range("A1")

'Find Last Row and Column
LastRow = ws.Cells(ws.Rows.Count, StartCell.Column).End(xlUp).Row
Set rng = ws.Range(ws.Cells(2, 4), ws.Cells(LastRow, 4))

rowCounter = 2
strBody = strBody & vbCrLf

For Each cell In rng
     strBody = strBody & vbCrLf
     strBody = strBody & "We sold " & Cells(rowCounter, 3).Value & " of " & Cells(rowCounter, 1).Value _
     & " for " & Cells(rowCounter, 4).Value & " and paid taxes of " & Cells(rowCounter, 5).Value & "."
     rowCounter = rowCounter + 1
Next cell

La section suivante implique la configuration des paramètres SMTP afin que vous puissiez envoyer des e-mails via votre serveur SMTP . Si vous utilisez Gmail , il s'agit généralement de votre adresse e-mail Gmail , de votre mot de passe (Gmail)Gmail et du serveur SMTP Gmail(Gmail SMTP) (smtp.gmail.com).

Set CDO_Mail = CreateObject("CDO.Message") 
On Error GoTo Error_Handling
Set CDO_Config = CreateObject("CDO.Configuration")
CDO_Config.Load -1
Set SMTP_Config = CDO_Config.Fields

With SMTP_Config
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "[email protected]"
.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "password"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465
.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
 .Update
End With

With CDO_Mail
     Set .Configuration = CDO_Config
End With

Remplacez [email protected] et mot de passe par les détails de votre propre compte.

Enfin, pour lancer l'envoi de l'e-mail, insérez le code suivant.

CDO_Mail.Subject = strSubject
CDO_Mail.From = strFrom
CDO_Mail.To = strTo
CDO_Mail.TextBody = strBody
CDO_Mail.CC = strCc
CDO_Mail.BCC = strBcc
CDO_Mail.Send

Error_Handling:
If Err.Description <> "" Then MsgBox Err.Description

Remarque(Note) : Si vous voyez une erreur de transport lorsque vous essayez d'exécuter ce code, c'est probablement parce que votre compte Google bloque l'exécution des "applications moins sécurisées". Vous devrez visiter la page des paramètres des applications moins sécurisées(less secure apps settings page) et activer cette fonctionnalité.

Une fois cette option activée, votre e-mail sera envoyé. Voici à quoi cela ressemble pour la personne qui reçoit votre e-mail de résultats généré automatiquement.

Comme vous pouvez le voir, il y a beaucoup de choses que vous pouvez réellement automatiser avec Excel VBA . Essayez de jouer avec les extraits de code que vous avez découverts dans cet article et créez vos propres automatisations VBA uniques.(VBA)



About the author

Je suis un ingénieur en informatique avec plus de 10 ans d'expérience dans l'industrie du logiciel, plus précisément dans Microsoft Office. J'ai écrit des articles et des tutoriels sur divers sujets liés à Office, y compris des conseils sur la façon d'utiliser ses fonctionnalités plus efficacement, des astuces pour maîtriser les tâches bureautiques courantes, etc. Mes compétences en tant qu'écrivain font également de moi une excellente ressource pour ceux qui souhaitent en savoir plus sur Office ou qui ont simplement besoin de conseils rapides.



Related posts