Optimisation du code
Le
Inkel
bonjour,
J'ai fais ce code et c,est un de mes premier en VBA, et je dois dire
que je suis assez fier de moi du fait qu'il fonctionne !
Mais je sais qu'il n'est pas terrible au niveau de l'optimisation et
je sais qu'il pourrait être beaucoup plus court. Est-ce que quelqu'un
pourrait m'aider ?
Cela sert à calculer les frais de déplacement pour les employés, si
oui ou non et combien. Je peux envoyer le fichier si cela peut aider.
Merci.
Inkel ;-)
+++++++++++++++++++++++++++++++++++++++++++++++++++
Function vehicule(code, distance)
'Frais de déplacement : Axx = distance, FAxx = montant
'Sheets("Frais").Visible = True
billet = False
A60 = Sheets("Frais").Range("c7")
A91 = Sheets("Frais").Range("c8")
A121 = Sheets("Frais").Range("c9")
FA60 = Sheets("Frais").Range("e6")
FA91 = Sheets("Frais").Range("e7")
FA121 = Sheets("Frais").Range("e8")
B49 = Sheets("Frais").Range("c11")
B73 = Sheets("Frais").Range("c12")
B89 = Sheets("Frais").Range("c13")
B121 = Sheets("Frais").Range("c14")
FB49 = Sheets("Frais").Range("e10")
FB73 = Sheets("Frais").Range("e11")
FB89 = Sheets("Frais").Range("e12")
FB121 = Sheets("Frais").Range("e13")
If code = "" Then 'Vide
vehicule = ""
ElseIf code = "A" Or code = "a" Then 'Montréal, Trois-Rivière=
s,
Québec
& Estrie
If distance < A60 Then
vehicule = FA60
ElseIf distance < A91 Then
vehicule = FA91
ElseIf distance < A121 Then
vehicule = FA121
Else
billet = True
vehicule = autobus(region, billet)
End If
ElseIf code = "B" Or code = "b" Then 'Reste de la province
If distance < B49 Then
vehicule = FB49
ElseIf distance < B73 Then
vehicule = FB73
ElseIf distance < B89 Then
vehicule = FB89
ElseIf distance < B121 Then
vehicule = FB121
Else
billet = True
vehicule = autobus(region, billet)
End If
ElseIf code = "C" Or code = "c" Or code = "P" Or code = "p" The=
n
'Fournit par la compagnie
vehicule = " -"
Else
vehicule = ""
End If
'Sheets("Frais").Visible = False
End Function
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Function autobus(billet, region)
region = Sheets("Frais dépl").Range("k8")
r1 = Sheets("Frais").Range("B21")
r2 = Sheets("Frais").Range("B22")
r3 = Sheets("Frais").Range("B23")
r4 = Sheets("Frais").Range("B24")
r5 = Sheets("Frais").Range("B25")
r6 = Sheets("Frais").Range("B26")
r7 = Sheets("Frais").Range("B27")
r8 = Sheets("Frais").Range("B28")
r9 = Sheets("Frais").Range("B29")
P1 = Sheets("Frais").Range("e21")
P2 = Sheets("Frais").Range("e22")
P3 = Sheets("Frais").Range("e23")
P4 = Sheets("Frais").Range("e24")
P5 = Sheets("Frais").Range("e25")
P6 = Sheets("Frais").Range("e26")
P7 = Sheets("Frais").Range("e27")
P8 = Sheets("Frais").Range("e28")
P9 = Sheets("Frais").Range("e29")
If billet = True Then
ElseIf region = r1 Then
autobus = P1
ElseIf region = r2 Then
autobus = P2
ElseIf region = r3 Then
autobus = P3
ElseIf region = r4 Then
autobus = P4
ElseIf region = r5 Then
autobus = P5
ElseIf region = r6 Then
autobus = P6
ElseIf region = r7 Then
autobus = P7
ElseIf region = r8 Then
autobus = P8
ElseIf region = r9 Then
autobus = P9
End If
End Function
J'ai fais ce code et c,est un de mes premier en VBA, et je dois dire
que je suis assez fier de moi du fait qu'il fonctionne !
Mais je sais qu'il n'est pas terrible au niveau de l'optimisation et
je sais qu'il pourrait être beaucoup plus court. Est-ce que quelqu'un
pourrait m'aider ?
Cela sert à calculer les frais de déplacement pour les employés, si
oui ou non et combien. Je peux envoyer le fichier si cela peut aider.
Merci.
Inkel ;-)
+++++++++++++++++++++++++++++++++++++++++++++++++++
Function vehicule(code, distance)
'Frais de déplacement : Axx = distance, FAxx = montant
'Sheets("Frais").Visible = True
billet = False
A60 = Sheets("Frais").Range("c7")
A91 = Sheets("Frais").Range("c8")
A121 = Sheets("Frais").Range("c9")
FA60 = Sheets("Frais").Range("e6")
FA91 = Sheets("Frais").Range("e7")
FA121 = Sheets("Frais").Range("e8")
B49 = Sheets("Frais").Range("c11")
B73 = Sheets("Frais").Range("c12")
B89 = Sheets("Frais").Range("c13")
B121 = Sheets("Frais").Range("c14")
FB49 = Sheets("Frais").Range("e10")
FB73 = Sheets("Frais").Range("e11")
FB89 = Sheets("Frais").Range("e12")
FB121 = Sheets("Frais").Range("e13")
If code = "" Then 'Vide
vehicule = ""
ElseIf code = "A" Or code = "a" Then 'Montréal, Trois-Rivière=
s,
Québec
& Estrie
If distance < A60 Then
vehicule = FA60
ElseIf distance < A91 Then
vehicule = FA91
ElseIf distance < A121 Then
vehicule = FA121
Else
billet = True
vehicule = autobus(region, billet)
End If
ElseIf code = "B" Or code = "b" Then 'Reste de la province
If distance < B49 Then
vehicule = FB49
ElseIf distance < B73 Then
vehicule = FB73
ElseIf distance < B89 Then
vehicule = FB89
ElseIf distance < B121 Then
vehicule = FB121
Else
billet = True
vehicule = autobus(region, billet)
End If
ElseIf code = "C" Or code = "c" Or code = "P" Or code = "p" The=
n
'Fournit par la compagnie
vehicule = " -"
Else
vehicule = ""
End If
'Sheets("Frais").Visible = False
End Function
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Function autobus(billet, region)
region = Sheets("Frais dépl").Range("k8")
r1 = Sheets("Frais").Range("B21")
r2 = Sheets("Frais").Range("B22")
r3 = Sheets("Frais").Range("B23")
r4 = Sheets("Frais").Range("B24")
r5 = Sheets("Frais").Range("B25")
r6 = Sheets("Frais").Range("B26")
r7 = Sheets("Frais").Range("B27")
r8 = Sheets("Frais").Range("B28")
r9 = Sheets("Frais").Range("B29")
P1 = Sheets("Frais").Range("e21")
P2 = Sheets("Frais").Range("e22")
P3 = Sheets("Frais").Range("e23")
P4 = Sheets("Frais").Range("e24")
P5 = Sheets("Frais").Range("e25")
P6 = Sheets("Frais").Range("e26")
P7 = Sheets("Frais").Range("e27")
P8 = Sheets("Frais").Range("e28")
P9 = Sheets("Frais").Range("e29")
If billet = True Then
ElseIf region = r1 Then
autobus = P1
ElseIf region = r2 Then
autobus = P2
ElseIf region = r3 Then
autobus = P3
ElseIf region = r4 Then
autobus = P4
ElseIf region = r5 Then
autobus = P5
ElseIf region = r6 Then
autobus = P6
ElseIf region = r7 Then
autobus = P7
ElseIf region = r8 Then
autobus = P8
ElseIf region = r9 Then
autobus = P9
End If
End Function

Poser une question


Tu peux réduire cette partie :
r1 = Sheets("Frais").Range("B21")
r2 = Sheets("Frais").Range("B22")
r3 = Sheets("Frais").Range("B23")
r4 = Sheets("Frais").Range("B24")
r5 = Sheets("Frais").Range("B25")
r6 = Sheets("Frais").Range("B26")
r7 = Sheets("Frais").Range("B27")
r8 = Sheets("Frais").Range("B28")
r9 = Sheets("Frais").Range("B29")
P1 = Sheets("Frais").Range("e21")
P2 = Sheets("Frais").Range("e22")
P3 = Sheets("Frais").Range("e23")
P4 = Sheets("Frais").Range("e24")
P5 = Sheets("Frais").Range("e25")
P6 = Sheets("Frais").Range("e26")
P7 = Sheets("Frais").Range("e27")
P8 = Sheets("Frais").Range("e28")
P9 = Sheets("Frais").Range("e29")
If billet = True Then
ElseIf region = r1 Then
autobus = P1
ElseIf region = r2 Then
autobus = P2
ElseIf region = r3 Then
autobus = P3
ElseIf region = r4 Then
autobus = P4
ElseIf region = r5 Then
autobus = P5
ElseIf region = r6 Then
autobus = P6
ElseIf region = r7 Then
autobus = P7
ElseIf region = r8 Then
autobus = P8
ElseIf region = r9 Then
autobus = P9
End If
ainsi :
For i = 1 to 9
r & i = Sheets("Frais").Range("B2" & i)
P & i = Sheets("Frais").Range("e2" & i)
If billet = True Then
ElseIf region = r & i Then
autobus = P & i
End If
Next
Je n'ai pas testé donc à essayer
Donnes moi des nouvelles !!!!!
ElseIf code = "A" Or code = "a" Then
=>
ElseIf Ucase(code) = "A" Then
ou
ElseIf Lcase(code) = "a" Then
On 26 mar, 14:29, Inkel
Tu peux remplacer les longues répétitions du nom de la feuille par ceci :
With Sheets("Frais")
A60 = .Range("c7")
A91 = .Range("c8")
A121 = .Range("c9")
FA60 = .Range("e6")
FA91 = .Range("e7")
FA121 = .Range("e8")
B49 = .Range("c11")
B73 = .Range("c12")
B89 = .Range("c13")
B121 = .Range("c14")
FB49 = .Range("e10")
FB73 = .Range("e11")
FB89 = .Range("e12")
FB121 = .Range("e13")
End If
Au lieu d'utiliser ceci :
ElseIf code = "A" Or code = "a" Then
Tu peux remplacer par
elseif Lcase(code) = "a" then
Les if elseif ... peut être remplacé par des Select Case
ce n'est pas nécessairement plus efficace (selon les cas)
mais perso. ça rend le code plus lisible !
Si c'est ton premier code ... Bravo.
"Inkel"
bonjour,
J'ai fais ce code et c,est un de mes premier en VBA, et je dois dire
que je suis assez fier de moi du fait qu'il fonctionne !
Mais je sais qu'il n'est pas terrible au niveau de l'optimisation et
je sais qu'il pourrait être beaucoup plus court. Est-ce que quelqu'un
pourrait m'aider ?
Cela sert à calculer les frais de déplacement pour les employés, si
oui ou non et combien. Je peux envoyer le fichier si cela peut aider.
Merci.
Inkel ;-)
+++++++++++++++++++++++++++++++++++++++++++++++++++
Function vehicule(code, distance)
'Frais de déplacement : Axx = distance, FAxx = montant
'Sheets("Frais").Visible = True
billet = False
A60 = Sheets("Frais").Range("c7")
A91 = Sheets("Frais").Range("c8")
A121 = Sheets("Frais").Range("c9")
FA60 = Sheets("Frais").Range("e6")
FA91 = Sheets("Frais").Range("e7")
FA121 = Sheets("Frais").Range("e8")
B49 = Sheets("Frais").Range("c11")
B73 = Sheets("Frais").Range("c12")
B89 = Sheets("Frais").Range("c13")
B121 = Sheets("Frais").Range("c14")
FB49 = Sheets("Frais").Range("e10")
FB73 = Sheets("Frais").Range("e11")
FB89 = Sheets("Frais").Range("e12")
FB121 = Sheets("Frais").Range("e13")
If code = "" Then 'Vide
vehicule = ""
ElseIf code = "A" Or code = "a" Then 'Montréal, Trois-Rivières,
Québec
& Estrie
If distance < A60 Then
vehicule = FA60
ElseIf distance < A91 Then
vehicule = FA91
ElseIf distance < A121 Then
vehicule = FA121
Else
billet = True
vehicule = autobus(region, billet)
End If
ElseIf code = "B" Or code = "b" Then 'Reste de la province
If distance < B49 Then
vehicule = FB49
ElseIf distance < B73 Then
vehicule = FB73
ElseIf distance < B89 Then
vehicule = FB89
ElseIf distance < B121 Then
vehicule = FB121
Else
billet = True
vehicule = autobus(region, billet)
End If
ElseIf code = "C" Or code = "c" Or code = "P" Or code = "p" Then
'Fournit par la compagnie
vehicule = " -"
Else
vehicule = ""
End If
'Sheets("Frais").Visible = False
End Function
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Function autobus(billet, region)
region = Sheets("Frais dépl").Range("k8")
r1 = Sheets("Frais").Range("B21")
r2 = Sheets("Frais").Range("B22")
r3 = Sheets("Frais").Range("B23")
r4 = Sheets("Frais").Range("B24")
r5 = Sheets("Frais").Range("B25")
r6 = Sheets("Frais").Range("B26")
r7 = Sheets("Frais").Range("B27")
r8 = Sheets("Frais").Range("B28")
r9 = Sheets("Frais").Range("B29")
P1 = Sheets("Frais").Range("e21")
P2 = Sheets("Frais").Range("e22")
P3 = Sheets("Frais").Range("e23")
P4 = Sheets("Frais").Range("e24")
P5 = Sheets("Frais").Range("e25")
P6 = Sheets("Frais").Range("e26")
P7 = Sheets("Frais").Range("e27")
P8 = Sheets("Frais").Range("e28")
P9 = Sheets("Frais").Range("e29")
If billet = True Then
ElseIf region = r1 Then
autobus = P1
ElseIf region = r2 Then
autobus = P2
ElseIf region = r3 Then
autobus = P3
ElseIf region = r4 Then
autobus = P4
ElseIf region = r5 Then
autobus = P5
ElseIf region = r6 Then
autobus = P6
ElseIf region = r7 Then
autobus = P7
ElseIf region = r8 Then
autobus = P8
ElseIf region = r9 Then
autobus = P9
End If
End Function
Non testé.
@+
FxM
Function vehicule(code, distance)
'Frais de déplacement : Axx = distance, FAxx = montant
with Sheets("Frais")
billet = False
select case code
case "": vehicule = ""
case "A","a"
If distance vehicule = .range("E6")
ElseIf distance vehicule = .range("E7")
ElseIf distance vehicule = .range("E8")
Else
billet = True
'attention à l'ordre des paramètres !
vehicule = autobus(billet, region)
End If
case "B", "b"
If distance vehicule = .range("E10")
ElseIf distance vehicule = .range("E11")
ElseIf distance vehicule = .range("E12")
ElseIf distance vehicule = .range("E13")
Else
billet = True
'idem
vehicule = autobus(billet, region)
End If
case "C", "c", "P", "p": vehicule = " -"
case else: vehicule = ""
end select
end with
End Function
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Function autobus(billet, region)
if billet then
'ce qui suit sur une ligne !
autobus = Sheets("Frais").Range("B21:B29").find(Sheets("Frais
dépl").Range("k8")).offset(0,3)
End Function
Inkel a écrit :
peu normal au pays de la godasse :-)
Mgr T.B.
"FxM"