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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
FFO
Le #18986571
Salut à toi

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 !!!!!
dunkelzahn
Le #18986561
Bonjour

ElseIf code = "A" Or code = "a" Then

=>

ElseIf Ucase(code) = "A" Then
ou
ElseIf Lcase(code) = "a" Then


On 26 mar, 14:29, 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                          'V ide
    vehicule = ""

    ElseIf code = "A" Or code = "a" Then   'Montréal, Trois-R iviè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 provinc e

        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


MichDenis
Le #18986551
Il est très bien ton code :

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
FxM
Le #18989731
Bonsoir,

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 < .range("C7") Then
vehicule = .range("E6")
ElseIf distance < .range("C8") Then
vehicule = .range("E7")
ElseIf distance < .range("C9") Then
vehicule = .range("E8")
Else
billet = True
'attention à l'ordre des paramètres !
vehicule = autobus(billet, region)
End If

case "B", "b"
If distance < .range("C11") Then
vehicule = .range("E10")
ElseIf distance < .range("C12") Then
vehicule = .range("E11")
ElseIf distance < .range("C13") Then
vehicule = .range("E12")
ElseIf distance < .range("C14") Then
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 :
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


Mgr T. Banni
Le #18990571
et vous, mon fils, c'est à pied que vous avez dû revenir sur ce forum...un
peu normal au pays de la godasse :-)
Mgr T.B.

"FxM"
Bonsoir,

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 < .range("C7") Then
vehicule = .range("E6")
ElseIf distance < .range("C8") Then
vehicule = .range("E7")
ElseIf distance < .range("C9") Then
vehicule = .range("E8")
Else
billet = True
'attention à l'ordre des paramètres !
vehicule = autobus(billet, region)
End If

case "B", "b"
If distance < .range("C11") Then
vehicule = .range("E10")
ElseIf distance < .range("C12") Then
vehicule = .range("E11")
ElseIf distance < .range("C13") Then
vehicule = .range("E12")
ElseIf distance < .range("C14") Then
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 :
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





Inkel
Le #18991051
Merci !

La partie suivant du code s'affiche en rouge et empêche la fonction de
fonctionner :

r & i = Sheets("Frais").Range("B2" & i)
P & i = Sheets("Frais").Range("e2" & i)

As-tu une idée ?



On 26 mar, 10:16, FFO
Salut à toi

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 !!!!!


FxM
Le #18991491
Hello,

Je me réponds à moi-même car le serveur refuse la référence au message
d'Inkel. Bizarre ...

Que tu obtiennes 0 ne me surprend qu'à moitié dans le sens où il manque
au moins un 'end if'. Très sincèrement, je n'ai pas compris l'intérêt de
la variable billet puisque tu n'appelles la fonction autobus(...) que si
billet = True. Je le laisse quand même.

Je viens de tester sous Excel 2002 cette fonction dans un module standard :
>> 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 if
>> End Function

En feuille Frais, B21=1, b22=2 ... b29=9
E21, E22 ... E29

En feuille 'frais dépl', k8=3
Formule en K9 -> =autobus(vrai;k8) me donne 13
Changer K8 renvoie la valeur correcte.

Comme un lien ne remplacera pas un long discours :
http://www.cijoint.fr/cjlink.php?file=cj200903/cijIUX4tgp.xls

@+
FxM



FxM a écrit :
Bonsoir,

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 < .range("C7") Then
vehicule = .range("E6")
ElseIf distance < .range("C8") Then
vehicule = .range("E7")
ElseIf distance < .range("C9") Then
vehicule = .range("E8")
Else
billet = True
'attention à l'ordre des paramètres !
vehicule = autobus(billet, region)
End If

case "B", "b"
If distance < .range("C11") Then
vehicule = .range("E10")
ElseIf distance < .range("C12") Then
vehicule = .range("E11")
ElseIf distance < .range("C13") Then
vehicule = .range("E12")
ElseIf distance < .range("C14") Then
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 :
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





FFO
Le #18993931
Rebonjour à toi

Effectivement honte à moi celà ne peux fonctionner
D'où la nécessité de tester avant de proposer
Mille excuses !!!!!

Je te propose plutôt ceci :

For i = 1 To 9
r = Sheets("Frais").Range("B2" & i)
p = Sheets("Frais").Range("e2" & i)
If billet = True Then
ElseIf region = r Then
autobus = p
End If
Next

Celà devrait mieux convenir

Dis moi !!!!
MichDenis
Le #18994211
T'es sûr de ceci :

r = Sheets("Frais").Range("B2" & i)
p = Sheets("Frais").Range("e2" & i)




"FFO"
Rebonjour à toi

Effectivement honte à moi celà ne peux fonctionner
D'où la nécessité de tester avant de proposer
Mille excuses !!!!!

Je te propose plutôt ceci :

For i = 1 To 9
r = Sheets("Frais").Range("B2" & i)
p = Sheets("Frais").Range("e2" & i)
If billet = True Then
ElseIf region = r Then
autobus = p
End If
Next

Celà devrait mieux convenir

Dis moi !!!!
Inkel
Le #18994831
Merci MichDenis, cela fonctionne très bien.

Comment je pourrais appliquer cela à ma fonction "vehicule" ?



On 27 mar, 09:06, "MichDenis"
T'es sûr de ceci :

r = Sheets("Frais").Range("B2" & i)
p = Sheets("Frais").Range("e2" & i)

"FFO"
Rebonjour à toi

Effectivement honte à moi celà ne peux fonctionner
D'où la nécessité de tester avant de proposer
Mille excuses !!!!!

Je te propose plutôt ceci :

For i = 1 To 9
r = Sheets("Frais").Range("B2" & i)
p = Sheets("Frais").Range("e2" & i)
If billet = True Then
ElseIf region = r Then
autobus = p
End If
Next

Celà devrait mieux convenir

Dis moi !!!!


Publicité
Poster une réponse
Anonyme