XL 2010 Instruction if then Else....

filiph79

XLDnaute Occasionnel
bonsoir le formum,

je voudrais savoir si il y a une limite de conditions dans une instruction conditionnelle if en Excel VBa

Merci
 
Solution
Bonjour Filiph, Chris, Soan,
Un autre point à prendre en compte. A chaque fois qu'on va rencontrer un IF, le VBA va l'évaluer dans son ensemble avant de prendre une décision. Et avec beaucoup de conditions cela sera long. Il vaut mieux scindé le IF en plusieurs, cela peut accélèrerer les choses.
VB:
IF A=2 AND B=3 AND C=4 AND D=5 AND E=6 then
préférer
IF A=2 AND B=3 Then
   IF C=4 AND D=5 AND E=6 then
Si on sait par exemple que les conditions A=2 AND B=3 sont assez rares, le processus sera beaucoup plus rapide, car il n'aura à évaluer qu'une simple expression pour décider de sortir ou de continuer.

soan

XLDnaute Barbatruc
Inactif
Bonjour,

Non, en VBA, il n'y a aucune limite de conditions
pour imbriquer plusieurs If.

On peut aussi utiliser une structure telle que :
VB:
Sub Essai()
  Dim car$: car = [A1]
  If car = "A" Then
    'code à exécuter si caractère "A"
  ElseIf car = "B" Then
    'code à exécuter si caractère "B"
  ElseIf car = "C" Then
    'code à exécuter si caractère "C"
  ElseIf car = "D" Then
    'code à exécuter si caractère "D"
  ElseIf car = "E" Then
    'code à exécuter si caractère "E"
  ElseIf car = "F" Then
    'code à exécuter si caractère "F"
  Else
    'code à exécuter si autre caractère
  End If
End Sub
Le même code, avec la structure Select Case mentionnée par @chris :
Code:
Sub Essai()
  Select Case [A1]
    Case "A"
      'code à exécuter si caractère "A"
    Case "B"
      'code à exécuter si caractère "B"
    Case "C"
      'code à exécuter si caractère "C"
    Case "D"
      'code à exécuter si caractère "D"
    Case "E"
      'code à exécuter si caractère "E"
    Case "F"
      'code à exécuter si caractère "F"
    Case Else
      'code à exécuter si autre caractère
  End Select
End Sub
Même si le demandeur connaissait probablement déjà ces 2 structures,
ça sera peut-être utile pour d'autres lecteurs de passage sur ce sujet.


soan
 
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Filiph, Chris, Soan,
Un autre point à prendre en compte. A chaque fois qu'on va rencontrer un IF, le VBA va l'évaluer dans son ensemble avant de prendre une décision. Et avec beaucoup de conditions cela sera long. Il vaut mieux scindé le IF en plusieurs, cela peut accélèrerer les choses.
VB:
IF A=2 AND B=3 AND C=4 AND D=5 AND E=6 then
préférer
IF A=2 AND B=3 Then
   IF C=4 AND D=5 AND E=6 then
Si on sait par exemple que les conditions A=2 AND B=3 sont assez rares, le processus sera beaucoup plus rapide, car il n'aura à évaluer qu'une simple expression pour décider de sortir ou de continuer.
 

soan

XLDnaute Barbatruc
Inactif
Bonjour sylvanu, le fil,

Quand le Turbo Pascal de Borland évaluait un If avec plusieurs conditions, il s'arrêtait
dès la 1ère condition fausse rencontrée : pour ton exemple, arrêt si A<>2 ; je m'suis
souvent demandé pourquoi Microsoft n'avait pas copié Borland sur ce point.

D'ailleurs, plusieurs autres choses aussi étaient plus pratiques avec Turbo Pascal
qu'avec VBA ! par exemple, pouvoir déclarer plusieurs variables d'un même type
sans devoir répéter le type pour chaque variable ; utilisation de caractères avec
le signe # ; déclaration de tableaux de constantes, etc...


soan
 

Statistiques des forums

Discussions
312 215
Messages
2 086 324
Membres
103 178
dernier inscrit
BERSEB50