Comment écrire une condition If en VBA avec plusieurs conditions
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.

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
Ifest 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.
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 fiche sur les macros 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 !
Pour garder sous la main des macros qui décident avec If et Select Case, télécharge notre guide des codes VBA Excel au format PDF. Chaque code y est classé par usage et prêt à coller dans un module.
Codes VBA Excel prêts à l’emploi (PDF)
Récupère les 47 codes du guide, classés par usage, et colle-les dans ton Excel. Le guide est gratuit !
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.

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 :
- Ouvre ta structure : Commence par écrire
Sub NomDeTaMacro()puisEnd Sub. - Déclare tes variables (bonne pratique) :
Dim cellule As RangeetSet cellule = Range("A2"). - Écris ta condition :
If cellule.Value = "En retard" Then - Ajoute tes actions :
cellule.Interior.Color = RGB(255, 192, 0)cellule.AddComment "Action : Contacter le service comptable pour relance."
- Ferme ton bloc : Ajoute
End Ifjuste 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
Ifsans sonEnd 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 : tapeIf...ThenetEnd Ifen 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.
Garder en tête que VBA évalue toujours les deux membres
Avant d'aller plus loin, il y a un point à connaître, parce qu'il fait planter beaucoup de macros. Dans la plupart des langages, un And s'arrête dès que le premier membre est faux : le second n'est même pas lu. VBA ne fonctionne pas comme ça. Il évalue toujours les deux membres, quel que soit le résultat du premier, et Or se comporte pareil en continuant de lire le second membre alors que le premier est déjà vrai.
Du coup, la ligne ci-dessous a beau avoir l'air prudente, elle s'arrête net dès que x vaut zéro :
Dim x As Double
x = 0
' Contre-exemple : VBA calcule 10 / x AVANT de regarder si x est different de zero
If x <> 0 And 10 / x > 1 Then
MsgBox "Le rapport depasse 1"
End If
Le test x <> 0 rend bien Faux, mais VBA calcule quand même 10 / x pour connaître le second membre, et tombe sur l'erreur d'exécution 11, « Division par zéro ». Le garde-fou que tu croyais avoir posé ne protège rien du tout, et le même code avec Or à la place de And plante exactement pareil.
La parade tient en un If dans un If. La condition de sécurité passe à l'extérieur, le calcul risqué reste à l'intérieur, et il n'est atteint que si le premier test l'autorise :
If x <> 0 Then
If 10 / x > 1 Then
MsgBox "Le rapport depasse 1"
End If
End If
Retiens la règle, elle te servira souvent : dès que le second membre peut échouer quand le premier est faux, il te faut deux If et pas un And. C'est le cas d'une division, d'une propriété lue sur un objet qui n'existe peut-être pas, ou d'une conversion de texte en nombre.
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 :
- Il teste le premier
If. Si c'est vrai, il exécute le code correspondant et sort immédiatement de toute la structure. - Si c'est faux, il passe au premier
ElseIfet effectue son test. Si c'est vrai, il exécute le code et s'arrête là. - Et ainsi de suite pour chaque
ElseIf. - Si aucune des conditions précédentes n'est remplie, il exécutera le code du bloc
Elsefinal, qui agit comme une option par défaut.
Astuce bonus de coach : Pense à l'ordre de tes
ElseIf, parce qu'il ne décide pas de la vitesse mais du résultat. VBA s'arrête à la première condition vraie, donc une même valeur tombe dans une branche ou dans une autre selon l'ordre où tu les as écrites. Range tes paliers du plus restrictif au plus large, et relis-les de haut en bas comme le fera la macro.
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 SI.MULTIPLE 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.

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 pour s'y retrouver :
Si tu testes plusieurs conditions différentes sur plusieurs variables (par exemple,
montant > 1000 ET statut = "En retard"), alors la structureIf...ElseIfest 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"), alorsSelect Caseest presque toujours la meilleure option.
Savoir écrire un code propre et efficace en VBA est une compétence recherchée en entreprise. 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.

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 =.
Écrire ElseIf en un seul mot
Celle-là ne pardonne pas, et elle arrête la macro avant même qu'elle démarre : ElseIf s'écrit en un seul mot. Si tu tapes Else If avec une espace au milieu, VBA n'y voit plus un palier de plus, mais un Else suivi d'un If tout neuf qui voudrait s'ouvrir sur la même ligne.
' Refuse des la compilation
If note > 15 Then
mention = "Bien"
Else If note > 10 Then
mention = "Passable"
End If
Au lancement, rien ne s'exécute : une boîte s'ouvre sur « Erreur de compilation : Erreur de syntaxe », la ligne du Else If sélectionnée dans l'éditeur. Et contrairement à ce qu'on lit souvent, ajouter un second End If ne répare rien du tout, le message reste identique : VBA refuse simplement qu'un If en bloc s'ouvre sur la ligne d'un Else.
Le correctif tient en une espace de moins :
If note > 15 Then
mention = "Bien"
ElseIf note > 10 Then
mention = "Passable"
End If
Deux cas voisins méritent d'être connus, parce qu'ils brouillent la piste. Si tu écris le If en entier sur la ligne du Else, action comprise, VBA l'accepte : Else If note > 10 Then mention = "Passable" passe sans broncher, parce que c'est un If sur une seule ligne, qui ne réclame aucun End If. Lui en ajouter un te vaudrait cette fois un « End If sans bloc If ». Et si tu veux vraiment imbriquer un If dans ton Else, laisse le Else seul sur sa ligne, ouvre le If à la ligne suivante, et ferme les deux blocs.
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
Ifsupplé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 :
- Une structure
Select Casesi 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.
- Une sortie anticipée : tu écartes les cas à ignorer en premier avec un
Exit Sub, et tout le reste du code redescend à plat.
Attention : ne compte pas sur
Andpour aplatir tes niveaux. Comme on l'a vu plus haut, VBA lit les deux membres, donc regrouper un test de sécurité et le calcul qu'il protège sur une seule ligne échange un code un peu profond contre un code qui plante. UnIfimbriqué qui sert de garde-fou n'est pas de l'imbrication excessive : c'est la bonne façon de faire.
Ranger tes conditions dans le bon ordre
Voici le détail qu'on prend souvent pour une histoire de rapidité, alors qu'il change le résultat. 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 en trouve une vraie. Ce n'est donc pas la vitesse qui se joue là, c'est la catégorie dans laquelle une valeur atterrit.
Reprends la macro de risque financier vue plus haut, avec ses seuils à 30 %, 50 % et 70 %. Un taux d'endettement de 0,2 y ressort en « Faible ». Déplace maintenant le test < 0,7 en tête de liste, sans rien changer d'autre, et ce même 0,2 ressort en « Élevé » : il est bien inférieur à 0,7, donc la première condition l'attrape avant que les suivantes soient lues. Un taux de 0,45 passe de « Moyen » à « Élevé » de la même façon.
' Du seuil le plus bas au plus haut : chaque taux tombe dans sa categorie
If tauxEndettement < 0.3 Then
categorie = "Faible"
ElseIf tauxEndettement < 0.5 Then
categorie = "Moyen"
ElseIf tauxEndettement < 0.7 Then
categorie = "Eleve"
Else
categorie = "Critique"
End If
La règle est donc simple : place tes conditions de la plus restrictive à la plus large, et relis-les de haut en bas comme le fera la macro. Si tu hésites, fais passer une valeur de chaque catégorie dans ton code, c'est le seul moyen d'être sûr que chacune tombe là où tu l'attends.
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.
Pour l’écrire sur un cas concret, l'exercice Traiter des données avec une condition If fait agir la macro différemment selon la ligne qu’elle lit.
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. L'ordre compte : VBA garde la première condition vraie, donc range tes paliers du plus restrictif au plus large.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", garde une imbrication lisible, et souviens-toi que
AndcommeOrévaluent toujours leurs deux membres.
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
Andregroupe deux critères sur une seule ligne (If Condition1 And Condition2 Then...). Réserve-le aux conditions qui peuvent être évaluées chacune sans risque, puisque VBA les lit toutes les deux même quand la première est fausse. Si la seconde a besoin de la première pour ne pas planter, garde tes deuxIfl'un dans l'autre. - Penser au
Select Case: Si tesIfimbriqués testent différentes valeurs d'une seule et même variable, leSelect Caseest 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, et les deux tests qu'on croise partout ne répondent pas à la même question. IsEmpty(Range("A1")) demande si la cellule ne contient rien. Or une cellule qui porte une formule contient quelque chose, même quand cette formule n'affiche rien : sur un ="", IsEmpty rend donc Faux pendant que Range("A1").Value = "" rend Vrai. Les deux ne sont pas interchangeables, et choisir le mauvais te coûte une macro qui ignore la moitié de tes lignes.
- Pour savoir si rien n'a été saisi, ou pour repérer la fin d'une colonne :
IsEmpty(Range("A1")). - Pour savoir si la cellule n'affiche rien, formule comprise :
Range("A1").Value = "", ouLen(Range("A1").Value) = 0. C'est celui-là qu'il te faut sur un export ou sur un tableau alimenté par des formules. - Pour savoir si la cellule est en erreur (comme
#N/A) :IsError(Range("A1").Value).
Le piège se referme surtout sur les macros qui nettoient un export. Avec IsEmpty, les lignes dont la colonne est remplie par une formule rendant "" restent en place même si elles paraissent vides à l'écran, et on cherche longtemps pourquoi la macro « saute » des lignes.
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.
Tu as maintenant toutes les cartes en main pour construire des macros intelligentes et solides. Si tu veux passer à la vitesse supérieure, accélérer ta carrière et rejoindre une communauté de professionnels qui, comme toi, veulent devenir incontournables sur Excel, rejoins-nous.