Les variables sont des espaces en mémoire qui permettent de stocker des données temporaires pendant l'exécution d'un programme. Leur utilisation est essentielle pour manipuler des valeurs, interagir avec l'utilisateur et effectuer des calculs.
En VBA, il est recommandé de déclarer explicitement les variables à l’aide du mot-clé Dim (abréviation de Dimension).
Dim NomDeLaVariable As Type
NomDeLaVariable : Le nom choisi pour la variable (doit être explicite et ne pas contenir d’espace ou de caractères spéciaux).Type : Le type de donnée que la variable peut stocker (voir ci-dessous).Dim Nom As String
Nom = "Marie"
Dim Message As String
Message = "Bonjour, monde !"
MsgBox Message
Dim Age As Integer
Age = 25
MsgBox "Votre âge est " & Age
Dim Prix As Double
Prix = 19.99
MsgBox "Le prix est " & Prix & " €"
True ou False).Dim EstValide As Boolean
EstValide = True
If EstValide Then
MsgBox "La valeur est valide."
Else
MsgBox "La valeur n'est pas valide."
End If
Dim Feuille As Worksheet
Set Feuille = ThisWorkbook.Sheets("Feuil1")
Feuille.Range("A1").Value = "Bonjour"
Dim Classeur As Workbook
Set Classeur = Workbooks.Open("C:\\MonClasseur.xlsx")
Classeur.Sheets(1).Range("A1").Value = "Données Importées"
Classeur.Close
Variables locales :
Sub ExempleLocal()
Dim x As Integer
x = 10
MsgBox x
End Sub
Variables globales :
Dim Total As Double ' Variable globale
Sub InitTotal()
Total = 100
End Sub
Sub AfficherTotal()
MsgBox "Le total est : " & Total
End Sub
Variables privées :
Private au niveau d’un module.Private Compteur As Integer
Toujours déclarer vos variables :
Choisissez des noms explicites :
PrixUnitaire, NombreArticles au lieu de x, y.Libérez les objets :
Workbook ou Worksheet, libérez-les après utilisation :Set Classeur = Nothing
Utilisez des types appropriés :
Variant sauf si nécessaire (type par défaut en VBA).Sub CalculPrixTotal()
Dim Quantite As Integer
Dim PrixUnitaire As Double
Dim Total As Double
Quantite = 5
PrixUnitaire = 19.99
Total = Quantite * PrixUnitaire
MsgBox "Le total est : " & Total & " €"
End Sub
Sub RemplirFeuille()
Dim Feuille As Worksheet
Set Feuille = ThisWorkbook.Sheets("Données")
Feuille.Range("A1").Value = "Nom"
Feuille.Range("B1").Value = "Âge"
Feuille.Range("A2").Value = "Alice"
Feuille.Range("B2").Value = 30
End Sub
Sub VerifierStock()
Dim EnStock As Boolean
Dim Stock As Integer
Stock = 0
EnStock = (Stock > 0)
If EnStock Then
MsgBox "Produit disponible"
Else
MsgBox "Produit en rupture de stock"
End If
End Sub
Objectif :
Integer) et un prix unitaire (Double) via des InputBox.Solution :
Sub CalculerTotal()
Dim Quantite As Integer
Dim PrixUnitaire As Double
Dim Total As Double
Quantite = InputBox("Entrez la quantité :")
PrixUnitaire = InputBox("Entrez le prix unitaire :")
Total = Quantite * PrixUnitaire
MsgBox "Le total est : " & Total & " €"
End Sub
En VBA, la manipulation des cellules et des plages est fondamentale. Cette section couvre l'utilisation des objets Cells() et Range(), leurs propriétés essentielles (comme Offset, Value), ainsi que la variabilisation des classeurs (Workbooks), feuilles (Worksheets) et cellules. Ces concepts sont indispensables pour écrire du code VBA dynamique et robuste.
Cells() et Range()Cells()Cells(Ligne, Colonne)
Exemple :
Cells(1, 1).Value = "A1" ' Écrit "A1" dans la cellule A1
Cells(2, "B").Value = "B2" ' Écrit "B2" dans la cellule B2
Range()Range("Adresse")
"A1", "A1:B10").Exemple :
Range("A1").Value = "A1" ' Écrit "A1" dans la cellule A1
Range("B1:B5").Value = "Plage" ' Écrit "Plage" dans toutes les cellules B1 à B5
ValueRange("A1").Value = 100 ' Écrit 100 dans A1
MsgBox Cells(1, 1).Value ' Affiche la valeur de A1
OffsetOffset(NbLignes, NbColonnes)
Exemple :
Range("A1").Offset(1, 0).Value = "A2" ' Écrit "A2" dans la cellule en dessous de A1
Cells(1, 1).Offset(0, 1).Value = "B1" ' Écrit "B1" dans la cellule à droite de A1
AddressMsgBox Range("B3").Address ' Affiche "$B$3"
Interior.Color : Modifie la couleur de fond d'une cellule.
Range("A1").Interior.Color = vbYellow ' Colore A1 en jaune
Font.Bold : Met le texte en gras.
Range("A1").Font.Bold = True
Worksheets() et Workbooks()Worksheets()Worksheets("NomFeuille") ou Worksheets(Index)Exemple :
Worksheets("Feuil1").Range("A1").Value = "Feuil1" ' Écrit dans Feuil1
Worksheets(2).Range("A1").Value = "Deuxième feuille" ' Écrit dans la 2e feuille
Workbooks()Workbooks("NomFichier.xlsx")Exemple :
Workbooks("Classeur1.xlsx").Worksheets("Feuil1").Range("A1").Value = "Bonjour"
Pour rendre le code plus dynamique, vous pouvez stocker les objets Workbook et Worksheet dans des variables.
Exemple :
Dim MonClasseur As Workbook
Dim MaFeuille As Worksheet
Set MonClasseur = Workbooks("Classeur1.xlsx")
Set MaFeuille = MonClasseur.Worksheets("Feuil1")
MaFeuille.Range("A1").Value = "Dynamique"
Les cellules et plages peuvent également être variabilisées pour plus de flexibilité.
Exemple :
Dim MaCellule As Range
Set MaCellule = Worksheets("Feuil1").Range("B2")
MaCellule.Value = "Cellule Dynamique"
Pour travailler avec plusieurs cellules :
Dim Plage As Range
Set Plage = Worksheets("Feuil1").Range("A1:A5")
Plage.Font.Bold = True ' Met en gras toutes les cellules de la plage
OffsetSub RemplirColonne()
Dim i As Integer
For i = 1 To 10
Range("A1").Offset(i - 1, 0).Value = i
Next i
End Sub
Résultat :
Sub CopierDonnées()
Dim Source As Worksheet, Destination As Worksheet
Set Source = Worksheets("Feuil1")
Set Destination = Worksheets("Feuil2")
Source.Range("A1:A10").Copy Destination.Range("B1")
End Sub
Résultat :
Sub SommePlage()
Dim Somme As Double
Dim Plage As Range
Set Plage = Worksheets("Feuil1").Range("A1:A5")
Somme = WorksheetFunction.Sum(Plage)
Worksheets("Feuil1").Range("A6").Value = "Somme : " & Somme
End Sub
Résultat :
Références dynamiques :
Dim DerniereLigne As Long
DerniereLigne = Worksheets("Feuil1").Cells(Rows.Count, 1).End(xlUp).Row
Évitez les sélections inutiles :
Range("A1").Select
Selection.Value = "Texte"
Range("A1").Value = "Texte"
Boucles pour les plages :
For Each pour parcourir une plage.Dim Cellule As Range
For Each Cellule In Range("A1:A5")
Cellule.Value = Cellule.Row
Next Cellule
Objectif :
Solution :
Sub CalculerCarres()
Dim i As Integer
For i = 1 To 10
Cells(i, 2).Value = Cells(i, 1).Value ^ 2
Cells(i, 2).Interior.Color = vbYellow
Next i
End Sub