Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/01/2012, 12h13   #1
Invité régulier
 
Inscription : mai 2011
Messages : 35
Détails du profil
Informations forums :
Inscription : mai 2011
Messages : 35
Points : 8
Points : 8
Par défaut SImplification de IF

Bonjour à tous!

J'ai un petit problème tout simple mais dont je en me rappelle plus comment on fait...

J'aimerai simplifier mon code pour qu'il y ait moins de IF.
Mon code ici marche très bien, mais je le trouve long.
(j'ai bien essayé avec select case, mais j'arrive pas à le faire tourner)

En gros j'ai des lignes de conditions:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
If typeachat.Value = True And devise1.Value = True Then
prix1.Value = pricers(typeoption, s, k, rf, rd, sigma, maturité())
End If
 
If typeachat.Value = True And devise2.Value = True Then
prix1.Value = pricers(typeoption, s, k, rf, rd, sigma, maturité())
End If
 
 
If typevente.Value = True And devise1.Value = True Then
prix1.Value = pricers(typeoption, s, k, rf, rd, sigma, maturité())
End If
 
If typevente.Value = True And devise2.Value = True Then
prix1.Value = pricers(typeoption, s, k, rf, rd, sigma, maturité())
End If


Merci!
cott333 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 12h25   #2
Rédacteur
 
Avatar de Ormonth
 
Homme Didier GONARD
Formateur Développeur Office - indépendant
Inscription : février 2008
Messages : 2 353
Détails du profil
Informations personnelles :
Nom : Homme Didier GONARD
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Formateur Développeur Office - indépendant

Informations forums :
Inscription : février 2008
Messages : 2 353
Points : 4 685
Points : 4 685
Bonjour,

ce n'est pas tant le nombre de if qu'il faut voir, mais la logique, ici tu testes 2 fois tes Value de Typeachat et vente, il faut tester une fois et imbriquer un deuxième if pour tester la devise, tu élimines 2 tests répétitifs inutiles.
Ensuite voir ton contexte, si tu as 2 devises et qu'elles ne peuvent être toutes les 2 à True (ce qui semblerait logique), nul besoin de tester les deux, si la 1ère est true, l'autre est False et inversement donc un If Then Else sur l'une des 2 suffirait...


Cordialement,

Ps : si le côté technique de la réponse = OK ou pas => pensez à cliquer sur les pouces et quand question résolue à la taguer résolue, et chaque action vous rapporte des points

Didier
__________________
Didier Gonard

Ps :
Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite !
Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP
N'oubliez pas de mettre : ..quand c'est le cas !
Ormonth est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 12h32   #3
Membre chevronné
 
Inscription : octobre 2006
Messages : 541
Détails du profil
Informations personnelles :
Localisation : France, Ardèche (Rhône Alpes)

Informations forums :
Inscription : octobre 2006
Messages : 541
Points : 760
Points : 760
Bonjour,

rssaies
Code :
=If (devise1+devise2)*(typeachat+typevente) then...
nota: tes variables étant des booléens, tu n'as pas besoin de mettre variable.value=true
__________________
Michel_M
Michel_M est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 12h44   #4
Invité régulier
 
Inscription : mai 2011
Messages : 35
Détails du profil
Informations forums :
Inscription : mai 2011
Messages : 35
Points : 8
Points : 8
Au temps pour moi!
J'ai voulu simplifier le code au maximum et donc du coup je n'ai pas trop fait attention.

En fait j'ai une troisième devise: Donc elle peuvent être TRUE ou FALSE.
Du coup je ne peux pas utilisé je pense...

Code :
=If (devise1+devise2)*(typeachat+typevente) then...
Je vais essayer le if imbriqué.
Mais si on peut encore réduire le code je suis preneur

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
If typeachat.Value = True And devise1.Value = True Then
prix1.Value = pricers(typeoption, s, k, rf, rd, sigma, maturité())
End If
 
If typeachat.Value = True And devise2.Value = True Then
prix1.Value = pricers(typeoption, s, k, rf, rd, sigma, maturité())
End If
 
If typeachat.Value = True And devise3.Value = True Then
prix1.Value = pricers(typeoption, s, k, rf, rd, sigma, maturité())
End If
 
If typevente.Value = True And devise1.Value = True Then
prix1.Value = pricers(typeoption, s, k, rf, rd, sigma, maturité())
End If
 
If typevente.Value = True And devise2.Value = True Then
prix1.Value = pricers(typeoption, s, k, rf, rd, sigma, maturité())
End If
 
If typevente.Value = True And devise3.Value = True Then
prix1.Value = pricers(typeoption, s, k, rf, rd, sigma, maturité())
End If
cott333 est déconnecté   Envoyer un message privé Réponse avec citation 02
Vieux 23/01/2012, 14h23   #5
Membre chevronné
 
Inscription : octobre 2006
Messages : 541
Détails du profil
Informations personnelles :
Localisation : France, Ardèche (Rhône Alpes)

Informations forums :
Inscription : octobre 2006
Messages : 541
Points : 760
Points : 760
Ben si! le principe est le même :-(
__________________
Michel_M
Michel_M est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 12h32   #6
Candidat au titre de Membre du Club
 
Homme
Technicien réseau
Inscription : décembre 2011
Messages : 91
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Technicien réseau
Secteur : Service public

Informations forums :
Inscription : décembre 2011
Messages : 91
Points : 13
Points : 13
Par défaut suite réponse

Voici ton code encore un peu factorisé

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
If (typeachat.Value And devise1.Value) Then
 
prix1.Value = pricers(typeoption, s, k, rf, rd, sigma, maturité())
 
ElseIf (typeachat.Value And devise2.Value) Then
prix1.Value = pricers(typeoption, s, k, rf, rd, sigma, maturité())
 
ElseIf (typevente.Value And devise1.Value) Then
prix1.Value = pricers(typeoption, s, k, rf, rd, sigma, maturité())
 
ElseIf (typevente.Value And devise2.Value) Then
prix1.Value = pricers(typeoption, s, k, rf, rd, sigma, maturité())
 
End If
debutVBA est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 24/01/2012, 15h01   #7
Expert Confirmé
 
Inscription : décembre 2007
Messages : 1 912
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : décembre 2007
Messages : 1 912
Points : 3 724
Points : 3 724
Sinon, j'utilise des trucs du genre :

Code :
1
2
3
4
5
6
7
8
9
10
Select Case True
    Case (typeachat.Value And devise1.Value)
        prix1.Value = pricers(typeoption, s, k, rf, rd, sigma, maturité())
    Case (typeachat.Value And devise2.Value)
        prix1.Value = pricers(typeoption, s, k, rf, rd, sigma, maturité())
    Case (typevente.Value And devise1.Value)
        prix1.Value = pricers(typeoption, s, k, rf, rd, sigma, maturité())
    Case (typevente.Value And devise2.Value)
        prix1.Value = pricers(typeoption, s, k, rf, rd, sigma, maturité())
End Select
je trouve ça plus lisible que les elseif - mais c'est sans doute mon coté vieux con.
__________________
Les 4 règles d'airain du développement informatique sont, d'après Michael C. Kasten :
1)on ne peut pas établir un chiffrage tant qu'on a pas finalisé la conception
2)on ne peut pas finaliser la conception tant qu'on a pas complètement compris toutes les exigences
3)le temps de comprendre toutes les exigences, le projet est terminé
4)le temps de terminer le projet, les exigences ont changé
Et le serment de non-allégiance :
Je promets de n’exclure aucune idée sur la base de sa source mais de donner toute la considération nécessaire aux idées de toutes les écoles ou lignes de pensées afin de trouver celle qui est la mieux adaptée à une situation donnée.
el_slapper est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h50.


 
 
 
 
Partenaires

Hébergement Web