Aller au contenu principal
Retour au blog

Devenez le pilote de vos macros avec la condition VBA If

21 janvier 202620 min de lecture
Devenez le pilote de vos macros avec la condition VBA If

Tu passes des heures à trier, filtrer ou mettre en couleur des cellules selon des critères bien précis ? C'est une perte de temps monumentale. La condition If en VBA est l'arme secrète pour automatiser ces tâches et reprendre le contrôle. C'est le cerveau de tes macros, leur permettant de prendre des décisions et d'exécuter une action uniquement si une condition que tu définis est vraie. En clair, tu vas transformer Excel en un assistant intelligent qui travaille pour toi.

Homme stressé devant un ordinateur portable affichant une feuille de calcul, avec le texte "Automatisez vos TACHÉS" en surimpression.

L'objectif est simple : passer du statut d'utilisateur qui subit ses fichiers à celui de pilote qui leur dit exactement quoi faire, et quand.

Mais concrètement, pourquoi automatiser avec des conditions ?

Pense à toutes ces petites actions que tu fais manuellement chaque jour. Chacune est une occasion de gagner un temps précieux et de fiabiliser tes process.

  • Gestion de factures : Mettre automatiquement en rouge une facture dont la date d'échéance est dépassée.
  • Reporting RH : Afficher une alerte si un salarié pose plus de jours de congé que son solde ne le permet.
  • Suivi de stocks : Déclencher un email de réapprovisionnement dès qu'un produit passe sous un seuil critique.
  • Contrôle de gestion : Marquer une ligne comme "À vérifier" si un écart budgétaire dépasse 5 %.

Toutes ces règles métier reposent sur une logique ultra simple : "SI telle condition est remplie, ALORS fais cette action". C'est le cœur même de l'instruction If en VBA.

Le véritable pouvoir du VBA, ce n'est pas d'écrire des milliers de lignes de code. C'est d'automatiser intelligemment les petites tâches qui, mises bout à bout, te font perdre des heures chaque semaine. La condition If est ton premier pas vers cette efficacité.

Une compétence bien plus accessible que tu ne le penses

Ne te laisse pas intimider par les mots "code" ou "VBA". Ce guide est conçu pour aller droit au but, avec des exemples concrets du monde de l'entreprise et un langage simple. Ma mission est de démystifier l'automatisation pour la rendre accessible à tous les professionnels, même sans bagage technique.

Pour des tâches récurrentes comme la gestion de rapports ou la facturation, l'automatisation via VBA est une solution redoutable. Pour aller plus loin, un bon logiciel de compte rendu d'activité peut venir compléter ce travail en structurant la collecte des données en amont.

Dans les sections qui suivent, nous allons décortiquer ensemble, pas à pas, comment construire ces instructions. Si tu es un parfait débutant, je te recommande de lire d'abord notre guide sur comment faire une macro Excel pour te familiariser avec les bases.

Prêt à transformer ta façon de travailler et à voir un gain de productivité immédiat ? Alors, c'est parti !

Mettre en place une logique solide avec le If Then

Allez, c'est parti, on plonge dans le code ! On commence par le pilier de toute logique en VBA : la structure If...Then. Imagine-la comme un aiguillage de chemin de fer : SI une condition est vraie, ALORS le train (ton code) prend une voie précise. Sinon, il continue simplement sur sa lancée.

Écran d'ordinateur affichant du code, carnet de notes et stylo sur un bureau en bois, avec le texte "logique if...then".

C’est cette instruction qui va transformer tes macros, les faisant passer de simples exécutants "bêtes et disciplinés" à des outils réactifs et intelligents. Maîtriser ce concept de base est tout simplement indispensable pour qui veut automatiser son travail efficacement.

La syntaxe de base sur une seule ligne

Pour une action simple et directe, tu peux écrire ta condition sur une unique ligne. C'est parfait pour la clarté quand il n'y a qu'une seule instruction à exécuter.

La structure est on ne peut plus simple : If [TaCondition] Then [TonAction]

Disons que tu veux colorer en rouge une cellule si son montant est négatif. Le code est immédiat :

' Si la valeur en A1 est inférieure à 0, colorer l'intérieur de la cellule en rouge
If Range("A1").Value < 0 Then Range("A1").Interior.Color = vbRed

C'est propre, rapide, et idéal pour ces petits cas de figure. Mais comment faire si tu as besoin d'exécuter plusieurs actions ? C'est là que le bloc If...End If entre en scène.

Gérer plusieurs actions avec le bloc If End If

Dès que ton scénario implique une suite d'instructions, tu dois les encadrer entre If...Then et End If. Cette structure permet à VBA de comprendre précisément où commence et où se termine le bloc de code à exécuter si la condition est remplie.

Voici comment procéder, étape par étape :

  1. Ouvre ta structure : Commence par écrire Sub NomDeTaMacro() puis End Sub.
  2. Déclare tes variables (bonne pratique) : Dim cellule As Range et Set cellule = Range("A2").
  3. Écris ta condition : If cellule.Value = "En retard" Then
  4. Ajoute tes actions :
    • cellule.Interior.Color = RGB(255, 192, 0)
    • cellule.AddComment "Action : Contacter le service comptable pour relance."
  5. Ferme ton bloc : Ajoute End If juste après tes actions.

Prenons un exemple concret de gestion. Si une facture, dont le statut est en cellule A2, est marquée "En retard", tu veux non seulement colorer la cellule en orange, mais aussi y ajouter un commentaire pour qu'un collègue fasse la relance.

Sub VerifierFacture()
    ' On vérifie si la cellule A2 contient le texte "En retard"
    If Range("A2").Value = "En retard" Then
        ' Action 1 : On colore le fond de la cellule en orange
        Range("A2").Interior.Color = RGB(255, 192, 0)

        ' Action 2 : On ajoute un commentaire d'action
        Range("A2").AddComment "Action : Contacter le service comptable pour relance."
    End If
End Sub

Tu vois le End If à la fin ? Il est crucial. Sans lui, VBA ne saurait pas où s'arrêter et déclencherait une erreur. C'est une étourderie classique quand on débute, alors prends l'habitude de toujours fermer tes blocs !

Astuce bonus de coach : Un If sans son End If (quand on utilise un bloc), c'est comme ouvrir une parenthèse sans jamais la fermer. C'est la garantie d'un code qui plante. Mon conseil : tape If...Then et End If en même temps, puis écris ton code entre les deux.

Combiner les conditions avec les opérateurs logiques

La vraie puissance du If se révèle quand on commence à jongler avec plusieurs critères. Souvent, il ne suffit pas de savoir si une facture est en retard, mais si elle est en retard ET si son montant dépasse 1 000 €. Pour ces logiques plus fines, VBA nous offre trois opérateurs principaux.

Voici un tableau pour comparer ces opérateurs :

Opérateur Fonctionnement Exemple de condition Résultat attendu
And VRAI si TOUTES les conditions sont vraies. If Montant > 1000 And Statut = "En retard" Then L'action s'exécute uniquement si le montant est supérieur à 1000 € ET que le statut est "En retard".
Or VRAI si AU MOINS UNE des conditions est vraie. If Pays = "France" Or Pays = "Belgique" Then L'action s'exécute si le pays est soit la France, soit la Belgique.
Not Inverse le résultat d'une condition. If Not IsEmpty(Range("A1")) Then L'action s'exécute si la cellule A1 N'EST PAS vide.

Ces opérateurs sont de véritables couteaux suisses pour construire des logiques précises et adaptées à tes problématiques métier. Le principe est d'ailleurs le même que celui de la fonction SI d'Excel que tu connais peut-être déjà, mais ici, on l'applique au cœur de nos macros pour une automatisation bien plus poussée.

Bien maîtriser ces bases, c'est poser la première pierre de ton édifice VBA. Maintenant que tu sais comment gérer un cas précis, il est temps de voir comment traiter l'alternative : que faire si la condition est fausse ? C'est le rôle de Else et ElseIf, et c'est ce qu'on aborde tout de suite.

Gérer des scénarios multiples avec Else et ElseIf

La structure If...Then de base est un excellent point de départ, mais soyons honnêtes : la réalité du terrain est rarement binaire. Un statut de commande n'est pas juste "validé" ou "non validé". Il peut être "en attente", "en préparation", "expédié" ou "annulé". C'est là que ton code doit gagner en finesse, et pour cela, tu disposes de deux instructions clés : Else et ElseIf.

Ces ajouts transforment une simple condition en un véritable arbre de décision. Que doit faire ta macro si le test initial échoue ? Au lieu de simplement s'arrêter, tu peux lui indiquer un plan B, un plan C, et ainsi de suite.

Le plan B : la structure If…Then…Else

Commençons par le cas le plus courant : une condition, mais deux issues possibles. La structure If...Then...Else est faite pour ça.

Son fonctionnement est très intuitif :

  • If la condition est vraie, Then le premier bloc de code s'exécute.
  • Else (sinon), c'est le second bloc de code qui prend le relais.

Imagine un suivi de factures. Tu veux automatiser le statut "Payé" ou "À relancer" en fonction du solde restant dû qui se trouve dans la colonne B.

Sub StatutPaiement()
    ' On vérifie la valeur de la cellule B2
    If Range("B2").Value = 0 Then
        ' Si le solde est nul, on passe le statut à "Payé" en vert
        Range("C2").Value = "Payé"
        Range("C2").Interior.Color = RGB(198, 239, 206)
    Else
        ' Sinon (solde différent de 0), on indique "À relancer" en rouge
        Range("C2").Value = "À relancer"
        Range("C2").Interior.Color = RGB(255, 199, 206)
    End If
End Sub

C'est net, propre, et diablement efficace. En un clin d'œil, Excel analyse chaque facture et applique la bonne mise en forme. Le pointage manuel, c'est de l'histoire ancienne.

Gagner en précision avec ElseIf

Mais que faire quand on a plus de deux options ? C'est le quotidien de tout analyste. Un indicateur de performance (KPI) n'est jamais juste "bon" ou "mauvais". Il peut être "excellent", "objectif atteint", "à surveiller" ou "critique".

On pourrait être tenté d'imbriquer plusieurs If les uns dans les autres, mais c'est le meilleur moyen de créer un code illisible et difficile à maintenir. La solution, bien plus propre, est d'enchaîner les conditions avec ElseIf.

ElseIf se traduit simplement par "sinon si". VBA va évaluer chaque condition dans l'ordre où tu les présentes :

  1. Il teste le premier If. Si c'est vrai, il exécute le code correspondant et sort immédiatement de toute la structure.
  2. Si c'est faux, il passe au premier ElseIf et effectue son test. Si c'est vrai, il exécute le code et s'arrête là.
  3. Et ainsi de suite pour chaque ElseIf.
  4. Si aucune des conditions précédentes n'est remplie, il exécutera le code du bloc Else final, qui agit comme une option par défaut.

Astuce bonus de coach : Pense à l'ordre de tes ElseIf. C'est une question de performance et de logique. En plaçant la condition la plus fréquente en premier, tu permets à VBA de sortir plus vite de la boucle. Sur des milliers de lignes, ce petit détail peut faire une vraie différence.

Exemple concret : analyse de risque financier

Mettons cela en pratique avec une macro qui évalue un taux d'endettement (en cellule A5) pour lui assigner une catégorie de risque.

Sub EvaluerRisqueFinancier()
    Dim tauxEndettement As Double
    tauxEndettement = Range("A5").Value

    If tauxEndettement < 0.3 Then
        ' Risque faible : en dessous de 30%
        Range("B5").Value = "Faible"
        Range("B5").Interior.Color = vbGreen
    ElseIf tauxEndettement < 0.5 Then
        ' Risque moyen : entre 30% et 50%
        Range("B5").Value = "Moyen"
        Range("B5").Interior.Color = vbYellow
    ElseIf tauxEndettement < 0.7 Then
        ' Risque élevé : entre 50% et 70%
        Range("B5").Value = "Élevé"
        Range("B5").Interior.Color = RGB(255, 192, 0) ' Orange
    Else
        ' Risque critique : 70% et plus
        Range("B5").Value = "Critique"
        Range("B5").Interior.Color = vbRed
    End If
End Sub

Ce code est infiniment plus clair qu'une cascade de If imbriqués. La logique métier saute aux yeux, et si les seuils de risque doivent être modifiés dans six mois, la mise à jour sera un jeu d'enfant.

Cette approche ressemble beaucoup à la façon de gérer des conditions multiples avec la fonction SI dans Excel. La différence, c'est qu'avec VBA, tu n'es pas limité à afficher un résultat : tu peux déclencher des envois d'emails, générer des graphiques, ou lancer d'autres macros.

Utiliser Select Case pour un code plus lisible et performant

Quand tes conditions ElseIf commencent à s'enchaîner, le code peut vite devenir lourd et difficile à suivre. C'est un piège classique. Heureusement, VBA nous offre une alternative bien plus propre pour gérer ce genre de situation : l'instruction Select Case.

Pense à Select Case comme à un aiguillage de train. Au lieu de poser une série de questions "si… sinon si… sinon si…", tu examines une seule variable (le train) et tu l'orientes directement vers la bonne voie (le bon Case) en fonction de sa destination.

La syntaxe du Select Case

La structure est simple et logique. On évalue une expression une seule fois, puis on liste les différents cas de figure possibles.

Prenons un exemple concret : tu veux attribuer une prime différente selon le département d'un employé. Une longue suite de If...ElseIf fonctionnerait, mais regarde comme c'est plus clair avec Select Case :

Sub CalculerPrimeDepartement()
    Dim departement As String
    Dim prime As Currency

    ' On récupère la valeur du département en cellule A2
    departement = Range("A2").Value

    Select Case departement
        Case "Commercial"
            prime = 500
        Case "Marketing"
            prime = 300
        Case "Production"
            prime = 400
        Case "RH"
            prime = 250
        Case Else
            ' Le cas par défaut si le département est inconnu
            prime = 0
            MsgBox "Département non reconnu. Aucune prime appliquée."
    End Select

    ' On affiche le résultat en cellule B2
    Range("B2").Value = prime
End Sub

Le Case Else est ton garde-fou. C'est une excellente pratique qui permet de gérer tous les cas que tu n'aurais pas prévus. Ta macro devient ainsi beaucoup plus robuste et évite des erreurs silencieuses.

Cette logique de décision est au cœur de la programmation. Que l'on utilise des If ou un Select Case, l'idée est de créer un chemin logique que le code suivra.

Diagramme d'arbre de décision VBA illustrant les conditions Si, ElseIf et Else pour la programmation.

Ce schéma illustre bien comment le code évalue une condition pour prendre une décision et exécuter le bloc d'instructions correspondant.

Gérer plusieurs valeurs pour un même cas

L'un des plus gros avantages de Select Case, c'est sa souplesse. Tu peux facilement regrouper plusieurs valeurs qui doivent exécuter la même action. Fini les conditions à rallonge avec des Or partout !

Imaginons que tu analyses des données de ventes et que tu veuilles appliquer un traitement spécifique aux grandes métropoles françaises. Il suffit de les lister, séparées par une virgule.

Sub ConsoliderVentesMetropoles()
    Dim region As String
    region = Range("D5").Value

    Select Case region
        Case "Paris", "Lyon", "Marseille"
            ' Action spécifique pour les métropoles principales
            Call MacroConsolidationMetropoles

        Case "Bordeaux", "Nantes", "Lille"
            ' Action pour les autres grandes villes
            Call MacroConsolidationAutresVilles

        Case Else
            ' Action par défaut pour le reste
            Call MacroConsolidationRegions
    End Select
End Sub

Compare ça à la lourdeur d'un If region = "Paris" Or region = "Lyon" Or region = "Marseille" Then.... Le gain en lisibilité est immédiat. C'est le genre de bonne pratique qui fait la différence entre un code amateur et un code professionnel, facile à maintenir.

Alors, ElseIf ou Select Case : quand choisir ?

Voici une règle simple que je donne toujours pour s'y retrouver :

Si tu testes plusieurs conditions différentes sur plusieurs variables (par exemple, montant > 1000 ET statut = "En retard"), alors la structure If...ElseIf est la bonne.

Si tu testes une seule et même variable par rapport à différentes valeurs possibles (par exemple, departement = "Ventes" OU "Marketing" OU "RH"), alors Select Case est presque toujours la meilleure option.

Savoir écrire un code propre et efficace en VBA est une compétence de plus en plus recherchée. Les certifications TOSA VBA, par exemple, ont vu passer 1 059 certifiés en 2022 et 2 678 en 2021, ce qui montre bien son importance en entreprise. Tu peux d'ailleurs consulter ces chiffres sur le site de France Compétences. Maîtriser des structures comme Select Case est un pas essentiel pour écrire des macros de qualité professionnelle.

Éviter les pièges courants pour un code VBA performant

Savoir écrire un code qui fonctionne, c'est la base. Mais savoir écrire un code propre, lisible et rapide, c'est ce qui fait toute la différence. Maintenant que tu as les structures If et Select Case en main, il est temps de passer à l'étape supérieure et de déjouer les pièges classiques qui plombent tes macros ou les rendent incompréhensibles.

Un bureau avec un ordinateur portable, un écran affichant du code et les mots "CODE PERFORMANT", et un chronomètre.

C'est ce souci du détail qui transforme un simple script en un outil robuste et professionnel, que tu n'auras aucun mal à maintenir sur le long terme.

L'erreur classique : assignation ou comparaison ?

C'est probablement l'erreur la plus courante quand on débute : confondre l'opérateur d'assignation = avec celui de comparaison =. C'est vrai que c'est piégeux, puisque VBA utilise le même symbole pour deux actions totalement différentes.

  • maVariable = 10 : Ici, on assigne la valeur 10 à la variable. C'est une action.
  • If maVariable = 10 Then : Là, on compare la valeur de la variable à 10. C'est une question.

Heureusement, dans une condition If, VBA est assez malin pour comprendre qu'il s'agit d'une comparaison. Mais l'erreur peut vite se glisser dans des logiques plus tordues et provoquer des résultats complètement inattendus. Garde toujours un œil critique sur le contexte de tes =.

Fuir les conditions If imbriquées à l'infini

On a tous déjà vu ces codes qui ressemblent à des poupées russes, avec des If dans des If dans des If… C'est ce qu'on appelle l'imbrication excessive. Si tu commences à dépasser deux ou trois niveaux, ton code devient un véritable casse-tête à lire et, pire encore, à déboguer.

Un code avec plus de trois niveaux d'imbrication est souvent le signe d'une logique qui pourrait être mieux pensée. Avant d'ajouter un If supplémentaire, prends une seconde pour te demander s'il n'y a pas un chemin plus direct.

La plupart du temps, une structure trop profonde peut être aplatie en utilisant :

  • Des opérateurs logiques comme And ou Or pour regrouper plusieurs tests sur une seule ligne.
  • Une structure Select Case si tous tes tests portent sur la même variable.
  • Le découpage de ta logique en plusieurs petites fonctions plus simples et plus ciblées.

Optimiser l'ordre de tes conditions pour la vitesse

Voici une petite astuce qui peut faire une énorme différence quand tu travailles sur des milliers de lignes. Quand tu enchaînes les ElseIf, VBA évalue chaque condition dans l'ordre, l'une après l'autre, et il s'arrête dès qu'il trouve une correspondance.

La conclusion est simple : place toujours la condition la plus probable en premier. Imagine que tu analyses une base de clients et que 80 % d'entre eux sont en France. Ton premier test devrait logiquement être If pays = "France" Then. De cette façon, pour la grande majorité de tes données, la macro s'arrêtera net au premier test, ce qui rend l'exécution globale bien plus rapide. C'est un réflexe simple, mais qui montre qu'on a compris comment VBA fonctionne sous le capot.

Le pouvoir des commentaires pour ton "futur toi"

Dans le feu de l'action, on a tendance à zapper les commentaires. Grosse erreur. Ce qui te paraît limpide aujourd'hui sera une énigme complète dans six mois, ou pour le pauvre collègue qui devra reprendre ton code.

Pas besoin d'écrire un roman. Un bon commentaire explique le "pourquoi" de ton code, pas le "comment".

  • Mauvais commentaire : ' Teste si A1 est supérieur à 100 (Merci, mais ça, le code le dit déjà !)
  • Bon commentaire : ' On isole les factures > 100€ car elles nécessitent une validation manuelle (Ah, là je comprends l'intention !)

Prendre quelques secondes pour commenter un bloc de code complexe te fera gagner des heures plus tard. C'est une discipline qui paie toujours. Se former à ces bonnes pratiques est un investissement stratégique, surtout quand on sait que certaines formations poussées peuvent coûter cher. Pour information, les tarifs de formation peuvent aller de 1 000 € HT à 1 650 € HT pour des sessions sur les statistiques avec Excel. Pour aller plus loin, tu peux consulter des formations Excel avancées proposées par des experts.

En résumé

Tu as maintenant les clés pour construire des logiques puissantes en VBA. Voici les points essentiels à retenir pour passer à l'action :

  • If...Then : La base pour exécuter une ou plusieurs actions si une condition est vraie. Idéal pour les cas simples.
  • If...Then...Else : La structure parfaite pour gérer une alternative. C'est "fais ceci, sinon fais cela".
  • If...Then...ElseIf...Else : Ton allié pour gérer plusieurs conditions qui s'excluent mutuellement. Pense à mettre le cas le plus fréquent en premier pour optimiser la vitesse !
  • Select Case : L'alternative propre et lisible quand tu testes une seule variable par rapport à une liste de valeurs possibles.
  • Bonnes pratiques : Commente ton code pour expliquer le "pourquoi", évite d'imbriquer trop de If, et combine tes conditions avec And et Or pour un code plus concis.

Maîtriser ces structures, c'est la porte ouverte à des automatisations qui te feront gagner un temps fou. C'est une compétence qui fait vraiment la différence dans le monde professionnel.

FAQ : Les réponses à tes questions sur les conditions VBA

Quelle différence entre un If sur une seule ligne et un bloc If…End If ?

La vraie différence, c'est la complexité de ce que tu veux faire. Pense efficacité et clarté.

Le If sur une seule ligne est ton meilleur ami pour une action unique et immédiate. C'est l'outil parfait quand la réaction doit être simple et concise.

If Range("A1").Value > 100 Then Range("A1").Interior.Color = vbRed

C'est net, rapide à lire, sans fioritures.

En revanche, dès que tu as besoin d'exécuter plusieurs actions si la condition est remplie, il faut absolument passer au bloc If...Then...End If. Cette structure te permet d'organiser proprement plusieurs lignes de code, ce qui rend ta logique beaucoup plus claire et facile à maintenir plus tard.

Peut-on imbriquer plusieurs conditions If ?

Oui, tu peux tout à fait placer une structure If à l'intérieur d'une autre. C'est ce qu'on appelle l'imbrication. Mais attention, à utiliser avec modération. Si ton code commence à ressembler à des poupées russes avec plus de deux ou trois niveaux d'imbrication, c'est souvent le signe qu'il faut repenser la logique.

Heureusement, il y a des alternatives bien plus propres :

  • Combiner les tests : L'opérateur And est souvent la solution la plus simple et la plus efficace (If Condition1 And Condition2 Then...).
  • Penser au Select Case : Si tes If imbriqués testent différentes valeurs d'une seule et même variable, le Select Case est sans aucun doute l'option la plus lisible.

Comment tester si une cellule est vide ou contient une erreur ?

C'est une vérification fondamentale pour rendre tes macros vraiment robustes. Pour tester si une cellule est vide, utilise IsEmpty(Range("A1")) ou Range("A1").Value = "". Pour vérifier si une cellule contient une erreur (comme #N/A), la fonction IsError(Range("A1").Value) est parfaite.

Intégrer ces vérifications au début de tes procédures est une excellente habitude. C'est un peu comme mettre sa ceinture de sécurité : tu ne sais pas toujours quand tu en auras besoin, mais le jour où elle te sauve, tu es bien content de l'avoir mise.


Vous avez maintenant toutes les cartes en main pour construire des macros intelligentes et solides. Si vous voulez passer à la vitesse supérieure, accélérer votre carrière et rejoindre une communauté de professionnels qui, comme vous, veulent devenir incontournables sur Excel, rejoignez-nous.

Chez Le Dojo Club, nous organisons des masterclasses en direct, des sessions pratiques et nous vous donnons accès à des centaines de ressources pour vous faire gagner des heures chaque semaine. Découvrez comment sur https://www.ledojo.club.

Tu veux aller plus loin ?

Rejoins Le Dojo Club pour accéder à des formations complètes, des lives experts et une communauté d'entraide.

Essayer pendant 30 jours
Devenez le pilote de vos macros avec la condition VBA If