Travailler avec les opérateurs
Glissez pour afficher le menu
Déclarer des variables permet de stocker des valeurs. Les opérateurs servent à combiner, comparer et tester ces valeurs — c’est ainsi que l’on exprime une règle métier en code. « Le stock est-il inférieur au niveau de réapprovisionnement ? » est un opérateur de comparaison. « Réapprovisionner si le stock est bas ET que le produit est Électronique » est un opérateur logique.
Opérateurs arithmétiques
La plupart se comportent comme sur une calculatrice, mais VBA possède deux opérateurs de division qui font réellement des choses différentes :
Dim total As Double
total = 45 * 3 ' multiplication → 135
total = 100 / 3 ' division → 33.33...
total = 100 \ 3 ' integer division → 33 (drops remainder)
total = 100 Mod 3 ' remainder only → 1
total = 2 ^ 3 ' exponent → 8
Le backslash (\) et Mod sont ceux qui prêtent à confusion, car ils se ressemblent mais répondent à des questions opposées. 100 \ 3 répond à « combien de fois 3 rentre-t-il en entier dans 100 ? » — la réponse est 33, et le reste est ignoré. 100 Mod 3 répond à la question miroir, « que reste-t-il après avoir mis 3 dans 100 autant de fois que possible ? » — la réponse est 1. Ensemble, 33 groupes de 3 plus un reste de 1 donnent 100 — ce n’est pas un hasard, c’est précisément la façon dont ces deux opérateurs sont conçus pour séparer une valeur. Cette paire sert exactement à calculer « combien de boîtes complètes de 3 puis-je emballer, et combien d’unités restent pour une boîte partielle ? » ou à vérifier si un numéro de ligne est pair (i Mod 2 = 0).
Opérateurs de comparaison
Ils renvoient True ou False :
44 > 30 ' True
44 = 44 ' True
"Office" = "office" ' False — VBA's default string comparison IS case-sensitive
44 <> 30 ' True (not equal)
Opérateurs logiques
Ils combinent deux ou plusieurs comparaisons en un seul résultat Vrai/Faux — c’est ainsi qu’une règle métier avec plusieurs conditions s’exprime :
If category = "Electronics" And stock < 30 Then
' triggers only if BOTH are true
End If
If category = "Office" Or category = "Electronics" Then
' triggers if EITHER is true
End If
If Not (stock < reorderLevel) Then
' triggers if stock is NOT below reorder level
End If
And exige que chaque condition reliée soit True pour que l’expression entière soit True — le premier exemple ne s’exécute que pour les produits Électroniques réellement en rupture de stock, pas pour tous les produits en rupture quelle que soit la catégorie. Or nécessite qu’une seule condition soit True, ce qui permet de vérifier l’appartenance à un petit ensemble de valeurs acceptables. Not inverse simplement un résultat True/False — il est souvent utilisé, comme dans le troisième exemple, pour exprimer une règle comme « PAS la mauvaise condition » lorsque cela se lit plus naturellement que de reformuler directement la bonne condition.
Concaténation de chaînes
Permet d’assembler du texte avec & (et non +, que VBA réserve aux nombres) :
Dim message As String
message = "Product: " & productName & " | Stock: " & currentStock
' Product: Wireless Mouse | Stock: 134
Remarquez que currentStock est un nombre (134), pas du texte, mais il est tout de même concaténé dans la chaîne sans conversion — VBA convertit automatiquement un nombre en texte lorsqu’on utilise & dessus. Cette commodité explique pourquoi & est préféré à + pour assembler du texte : si vous écriviez "Stock: " + currentStock, VBA tenterait d’interpréter toute l’expression comme une opération arithmétique et générerait soit une erreur, soit un résultat inattendu selon le contexte. & signifie toujours « assembler en texte », sans ambiguïté.
Exercice
- En utilisant les données du bras d’écran (Prix 89.99, Stock 18, Niveau de réapprovisionnement 10), écrivez une expression qui vérifie si le stock est inférieur ou égal au niveau de réapprovisionnement plus 10 — un avertissement « seuil proche » plutôt qu’une alerte stricte.
- Construisez un message concaténé : « Monitor Arm is at 18 units (reorder at 10) » en utilisant des variables, sans texte codé en dur.
1. L'expression « approche du seuil »
- Trois variables sont nécessaires : une pour le stock (18), une pour le niveau de réapprovisionnement (10), et une expression qui les compare.
- « Inférieur ou égal à » est un opérateur de comparaison unique
<=. - L'expression « niveau de réapprovisionnement plus 10 » signifie que vous ne comparez pas directement le stock à 10 — vous le comparez à une valeur calculée. Écrivez cette addition directement dans la comparaison :
stock <= reorderLevel + 10. - Pour voir le résultat, affectez-le à une variable de type
Boolean. - Calculez manuellement ce que donne
10 + 10avant d'exécuter le code, afin de savoir si18 <= 20doit retournerTrueouFalse, puis vérifiez que votre code donne le même résultat.
2. Construction du message
- L'opérateur qui assemble du texte est
&, et non+. - Analysez le résultat attendu morceau par morceau :
"Monitor Arm is at "+ (le nombre de stock) +" units (reorder at "+ (le niveau de réapprovisionnement) +")". Comptez les éléments — il y en a cinq, alternant entre du texte littéral entre guillemets et une variable. - L'énoncé précise « en utilisant des variables, pas du texte codé en dur » — cela signifie que les
18et10dans votre message final doivent provenir de vos variables stock etreorderLevel, et non être tapés comme des nombres littéraux dans la chaîne. - La concaténation d'un nombre avec
&ne nécessite aucune conversion — VBA le transforme automatiquement en texte, donc vous pouvez joindre une variable numérique directement à la chaîne. - Construisez d'abord le tout dans une variable de type
String(message = ...), puis affichez-la avecMsgBox messagepour vérifier qu'elle correspond exactement au résultat attendu, y compris les parenthèses et les espaces.
Ou utilisez le code suivant
Ouvrez Section_2_VBA_Fundamentals.xlsm, appuyez sur Alt+F11, et utilisez le module sur lequel vous travaillez pour ce classeur (insérez-en un via Insertion → Module si vous n'en avez pas encore — en suivant le même modèle que modIntro dans la Section 1, vous pouvez le nommer modFundamentals).
Sub MonitorArmCheck()
Dim stock As Integer
Dim reorderLevel As Integer
Dim isGettingClose As Boolean
Dim message As String
stock = 18
reorderLevel = 10
' Part 1 — the "getting close" check
isGettingClose = stock <= reorderLevel + 10
MsgBox isGettingClose
' Part 2 — the concatenated message
message = "Monitor Arm is at " & stock & " units (reorder at " & reorderLevel & ")"
MsgBox message
End Sub
Cliquez n'importe où dans la Sub, puis appuyez sur F5. Deux boîtes de dialogue devraient s'afficher successivement — d'abord True (puisque 18 ≤ 20), puis la phrase.
Merci pour vos commentaires !
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion
Travailler avec les opérateurs
Déclarer des variables permet de stocker des valeurs. Les opérateurs servent à combiner, comparer et tester ces valeurs — c’est ainsi que l’on exprime une règle métier en code. « Le stock est-il inférieur au niveau de réapprovisionnement ? » est un opérateur de comparaison. « Réapprovisionner si le stock est bas ET que le produit est Électronique » est un opérateur logique.
Opérateurs arithmétiques
La plupart se comportent comme sur une calculatrice, mais VBA possède deux opérateurs de division qui font réellement des choses différentes :
Dim total As Double
total = 45 * 3 ' multiplication → 135
total = 100 / 3 ' division → 33.33...
total = 100 \ 3 ' integer division → 33 (drops remainder)
total = 100 Mod 3 ' remainder only → 1
total = 2 ^ 3 ' exponent → 8
Le backslash (\) et Mod sont ceux qui prêtent à confusion, car ils se ressemblent mais répondent à des questions opposées. 100 \ 3 répond à « combien de fois 3 rentre-t-il en entier dans 100 ? » — la réponse est 33, et le reste est ignoré. 100 Mod 3 répond à la question miroir, « que reste-t-il après avoir mis 3 dans 100 autant de fois que possible ? » — la réponse est 1. Ensemble, 33 groupes de 3 plus un reste de 1 donnent 100 — ce n’est pas un hasard, c’est précisément la façon dont ces deux opérateurs sont conçus pour séparer une valeur. Cette paire sert exactement à calculer « combien de boîtes complètes de 3 puis-je emballer, et combien d’unités restent pour une boîte partielle ? » ou à vérifier si un numéro de ligne est pair (i Mod 2 = 0).
Opérateurs de comparaison
Ils renvoient True ou False :
44 > 30 ' True
44 = 44 ' True
"Office" = "office" ' False — VBA's default string comparison IS case-sensitive
44 <> 30 ' True (not equal)
Opérateurs logiques
Ils combinent deux ou plusieurs comparaisons en un seul résultat Vrai/Faux — c’est ainsi qu’une règle métier avec plusieurs conditions s’exprime :
If category = "Electronics" And stock < 30 Then
' triggers only if BOTH are true
End If
If category = "Office" Or category = "Electronics" Then
' triggers if EITHER is true
End If
If Not (stock < reorderLevel) Then
' triggers if stock is NOT below reorder level
End If
And exige que chaque condition reliée soit True pour que l’expression entière soit True — le premier exemple ne s’exécute que pour les produits Électroniques réellement en rupture de stock, pas pour tous les produits en rupture quelle que soit la catégorie. Or nécessite qu’une seule condition soit True, ce qui permet de vérifier l’appartenance à un petit ensemble de valeurs acceptables. Not inverse simplement un résultat True/False — il est souvent utilisé, comme dans le troisième exemple, pour exprimer une règle comme « PAS la mauvaise condition » lorsque cela se lit plus naturellement que de reformuler directement la bonne condition.
Concaténation de chaînes
Permet d’assembler du texte avec & (et non +, que VBA réserve aux nombres) :
Dim message As String
message = "Product: " & productName & " | Stock: " & currentStock
' Product: Wireless Mouse | Stock: 134
Remarquez que currentStock est un nombre (134), pas du texte, mais il est tout de même concaténé dans la chaîne sans conversion — VBA convertit automatiquement un nombre en texte lorsqu’on utilise & dessus. Cette commodité explique pourquoi & est préféré à + pour assembler du texte : si vous écriviez "Stock: " + currentStock, VBA tenterait d’interpréter toute l’expression comme une opération arithmétique et générerait soit une erreur, soit un résultat inattendu selon le contexte. & signifie toujours « assembler en texte », sans ambiguïté.
Exercice
- En utilisant les données du bras d’écran (Prix 89.99, Stock 18, Niveau de réapprovisionnement 10), écrivez une expression qui vérifie si le stock est inférieur ou égal au niveau de réapprovisionnement plus 10 — un avertissement « seuil proche » plutôt qu’une alerte stricte.
- Construisez un message concaténé : « Monitor Arm is at 18 units (reorder at 10) » en utilisant des variables, sans texte codé en dur.
1. L'expression « approche du seuil »
- Trois variables sont nécessaires : une pour le stock (18), une pour le niveau de réapprovisionnement (10), et une expression qui les compare.
- « Inférieur ou égal à » est un opérateur de comparaison unique
<=. - L'expression « niveau de réapprovisionnement plus 10 » signifie que vous ne comparez pas directement le stock à 10 — vous le comparez à une valeur calculée. Écrivez cette addition directement dans la comparaison :
stock <= reorderLevel + 10. - Pour voir le résultat, affectez-le à une variable de type
Boolean. - Calculez manuellement ce que donne
10 + 10avant d'exécuter le code, afin de savoir si18 <= 20doit retournerTrueouFalse, puis vérifiez que votre code donne le même résultat.
2. Construction du message
- L'opérateur qui assemble du texte est
&, et non+. - Analysez le résultat attendu morceau par morceau :
"Monitor Arm is at "+ (le nombre de stock) +" units (reorder at "+ (le niveau de réapprovisionnement) +")". Comptez les éléments — il y en a cinq, alternant entre du texte littéral entre guillemets et une variable. - L'énoncé précise « en utilisant des variables, pas du texte codé en dur » — cela signifie que les
18et10dans votre message final doivent provenir de vos variables stock etreorderLevel, et non être tapés comme des nombres littéraux dans la chaîne. - La concaténation d'un nombre avec
&ne nécessite aucune conversion — VBA le transforme automatiquement en texte, donc vous pouvez joindre une variable numérique directement à la chaîne. - Construisez d'abord le tout dans une variable de type
String(message = ...), puis affichez-la avecMsgBox messagepour vérifier qu'elle correspond exactement au résultat attendu, y compris les parenthèses et les espaces.
Ou utilisez le code suivant
Ouvrez Section_2_VBA_Fundamentals.xlsm, appuyez sur Alt+F11, et utilisez le module sur lequel vous travaillez pour ce classeur (insérez-en un via Insertion → Module si vous n'en avez pas encore — en suivant le même modèle que modIntro dans la Section 1, vous pouvez le nommer modFundamentals).
Sub MonitorArmCheck()
Dim stock As Integer
Dim reorderLevel As Integer
Dim isGettingClose As Boolean
Dim message As String
stock = 18
reorderLevel = 10
' Part 1 — the "getting close" check
isGettingClose = stock <= reorderLevel + 10
MsgBox isGettingClose
' Part 2 — the concatenated message
message = "Monitor Arm is at " & stock & " units (reorder at " & reorderLevel & ")"
MsgBox message
End Sub
Cliquez n'importe où dans la Sub, puis appuyez sur F5. Deux boîtes de dialogue devraient s'afficher successivement — d'abord True (puisque 18 ≤ 20), puis la phrase.
Merci pour vos commentaires !