Conseil d'Optimisation

Luminou

XLDnaute Junior
Bien le bonjour a tous,

Je me demandait quel elle le code le mieux optimiser quand ont veut faire beaucoup de comparaison, j'ai trois solution:

Code:
Function correspondanceDN(DN As Single) As Byte
Dim i As Byte
Dim j As Byte
j = 14
If (DN = 0.5) Then i = j
ElseIf (DN = 0.75) Then i = j + 1
ElseIf (DN = 1) Then i = j + 2
ElseIf (DN = 1.5) Then i = j + 3
ElseIf (DN = 2) Then i = j + 4
ElseIf (DN = 2.5) Then i = j + 5
ElseIf (DN = 3) Then i = j + 6
ElseIf (DN = 4) Then i = j + 7
ElseIf (DN = 5) Then i = j + 8
ElseIf (DN = 6) Then i = j + 9
ElseIf (DN = 8) Then i = j + 10
ElseIf (DN = 10) Then i = j + 11
ElseIf (DN = 12) Then i = j + 12
ElseIf (DN = 14) Then i = j + 13
ElseIf (DN = 16) Then i = j + 14
ElseIf (DN = 18) Then i = j + 15
ElseIf (DN = 20) Then i = j + 16
ElseIf (DN = 22) Then i = j + 17
ElseIf (DN = 24) Then i = j + 18
ElseIf (DN = 26) Then i = j + 19
ElseIf (DN = 28) Then i = j + 20
ElseIf (DN = 30) Then i = j + 21
ElseIf (DN = 32) Then i = j + 22
ElseIf (DN = 34) Then i = j + 23
ElseIf (DN = 36) Then i = j + 24
ElseIf (DN = 38) Then i = j + 25
ElseIf (DN = 40) Then i = j + 26
ElseIf (DN = 42) Then i = j + 27
ElseIf (DN = 44) Then i = j + 28
ElseIf (DN = 46) Then i = j + 29
ElseIf (DN = 48) Then i = j + 30
Else: MsgBox ("Cette valeur de diametre nominal n'existe pas!")
End If
correspondance = i
End Function

ou

Code:
Function correspondanceDN(DN As Single) As Byte
Dim i As Byte
Dim j As Byte
j = 14
If (DN <= 18) And (DN > 0) Then
    If (DN <= 4) Then
        If (DN <= 2) Then
            If (DN = 0.5) Then i = j
            ElseIf (DN = 0.75) Then i = j + 1
            ElseIf (DN = 1) Then i = j + 2
            ElseIf (DN = 1.5) Then i = j + 3
            ElseIf (DN = 2) Then i = j + 4
            End If
        Else
            If (DN = 2.5) Then i = j + 5
            ElseIf (DN = 3) Then i = j + 6
            ElseIf (DN = 4) Then i = j + 7
            End If
        End If
    Else
        If (DN <= 12) Then
            If (DN = 5) Then i = j + 8
            ElseIf (DN = 6) Then i = j + 9
            ElseIf (DN = 8) Then i = j + 10
            ElseIf (DN = 10) Then i = j + 11
            ElseIf (DN = 12) Then i = j + 12
            End If
        Else
            If (DN = 14) Then i = j + 13
            ElseIf (DN = 16) Then i = j + 14
            ElseIf (DN = 18) Then i = j + 15
            End If
        End If
    End If
ElseIf (DN <= 48) And (DN > 0) Then
    If (DN <= 32) Then
        If (DN <= 26) Then
            If (DN = 20) Then i = j + 16
            ElseIf (DN = 22) Then i = j + 17
            ElseIf (DN = 24) Then i = j + 18
            ElseIf (DN = 26) Then i = j + 5
            End If
        Else
            If (DN = 28) Then i = j + 6
            ElseIf (DN = 30) Then i = j + 7
            ElseIf (DN = 32) Then i = j + 8
            End If
        End If
    Else
        If (DN <= 40) Then
            If (DN = 34) Then i = j + 9
            ElseIf (DN = 36) Then i = j + 10
            ElseIf (DN = 38) Then i = j + 11
            ElseIf (DN = 40) Then i = j + 12
            End If
        Else
            If (DN = 42) Then i = j + 13
            ElseIf (DN = 44) Then i = j + 14
            ElseIf (DN = 46) Then i = j + 15
            ElseIf (DN = 48) Then i = j + 16
            End If
        End If
    End If
Else: MsgBox ("Cette taille de joint n'existe pas!")
End If
correspondanceDN = i
End Function

Ou le code avec l'instruction case.

D'apres vous quel est la meilleur solution?
 

wilfried_42

XLDnaute Barbatruc
Re : Conseil d'Optimisation

bonjour

à essayer :
Code:
Function correspondanceDN(DN As variant) As integer
    Dim table() As Variant, i As Integer, j As Integer
    j = 0
    table = Array(0.5, 0.75, 1, 1.5, 2, 2.5, 3, 4, 5, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 38, 40, 42, 44, 46, 48)
    For i = LBound(table) To UBound(table)
        If dn = table(i) Then j = 14 + i: Exit For
    Next i
    If j = 0 Then MsgBox "Diametre inconnu"
    correspondanceDN = j
end function
 

Discussions similaires

Réponses
11
Affichages
379

Statistiques des forums

Discussions
312 775
Messages
2 092 023
Membres
105 151
dernier inscrit
Stephkno