Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2010 À propos de la fonction " IIf "

Magic_Doctor

XLDnaute Barbatruc
Bonjour,

Une question par curiosité.
Si j'écris :
VB:
    If inc = -1 Or inc = 0 Then
        chaine = "0°"
    Else
        chaine = "0." & wf.Rept(0, inc) & "°"
    End If
ça marche.
En revanche, si j'écris :
VB:
    chaine = IIf(inc = -1 Or inc = 0, "0°", "0." & wf.Rept(0, inc) & "°")
ça ne marche pas.
Je me demande bien pourquoi.
 

patricktoulon

XLDnaute Barbatruc
re
tout simplement par ce que si inc =-1 tu ne peut répéter une chaine -1 fois le minimum c'est 0
dans la version 1 ça passe parce que c'est dans un if else et donc le rep -1 n'est pas lu
dans le iif rept -1 est forcement une erreur puisqu'il est lu
 

patricktoulon

XLDnaute Barbatruc
j'ajouterais que dans ta version 1 tu fait 2 tests pour rien

if inc=-1 or inc =0 '??????????????
if inc<=0 'tout simplement
et tu peu prendre la chose a l'envers
VB:
Sub test2()
    inc = 0
    Set wf = Application
    If inc > 0 Then
    chaine = "0" & "." & wf.Rept(0, inc) & "°"
    Else
        chaine = "0°"
    End If
    MsgBox chaine
End Sub

que l'on peu écrire aussi sur une seule ligne
VB:
Sub test2()
    inc = 0
    Set wf = Application
    If inc > 0 Then chaine = "0" & "." & wf.Rept(0, inc) & "°" Else chaine = "0°"
     MsgBox chaine
End Sub
la différence avec if else end if et iif c'est que la condition qui n'est pas la bonne n'est pas exécutée dans un if else

avec iif inc -1 sera toujours inc -1 et donc une erreur avec rept(0,inc) ce qui correspond a écrire rept(0,-1)

allez histoire d'en rire
répète -1 fois après moi
"je n'utiliserais plus iif sur 3 possibilités dont une génère une erreur "
 

fanch55

XLDnaute Barbatruc
bonjour, le iif fonctionne tel qu'il est écrit.
vous pouvez cependant vous heurter à une erreur d'exécution dans la mesure où les 2 clauses sont toujours évaluées avant l'évaluation de la condition, contrairement au If qui évalue d'abord la condition ...

Donc utiliser le Ilf que si vous êtes sûr de la viabilité des 2 clauses exécutables ...
 

patricktoulon

XLDnaute Barbatruc
voila fanch55 la mieux dit que moi
pour te la faire courte car c'est vrai que je m'explique peu être un peu mal
VB:
 if  balabla then
'turlututu
else
'taratata
 end if
veux dire : si c'est comme ça on fait ceci et on s'arrete là sinon on fait cela

Code:
truc=iif(blalala,turlututu,taratata)
veux dire truc = ca ou ca

donc si un des "ça" contient une erreur
comme c'est le cas avec rept(0,-1) ben forcement on est chocolat
 

job75

XLDnaute Barbatruc
Bonjour à tous,

Contrairement à la fonction SI d'Excel en VBA x = IIf(test, a, b) évalue a et b donc il ne faut pas que l'un d'eux soit une valeur d'erreur.

Si c'est le cas il ne faut pas utiliser IIf mais If test Then x = a Else x = b

A+
 

Discussions similaires

Réponses
1
Affichages
283
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…