Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Optimisation du code

17 réponses
Avatar
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 =EAtre beaucoup plus court. Est-ce que quelqu'un
pourrait m'aider ?

Cela sert =E0 calculer les frais de d=E9placement pour les employ=E9s, si
oui ou non et combien. Je peux envoyer le fichier si cela peut aider.

Merci.

Inkel ;-)

+++++++++++++++++++++++++++++++++++++++++++++++++++

Function vehicule(code, distance)

'Frais de d=E9placement : Axx =3D distance, FAxx =3D montant

'Sheets("Frais").Visible =3D True

billet =3D False

A60 =3D Sheets("Frais").Range("c7")
A91 =3D Sheets("Frais").Range("c8")
A121 =3D Sheets("Frais").Range("c9")

FA60 =3D Sheets("Frais").Range("e6")
FA91 =3D Sheets("Frais").Range("e7")
FA121 =3D Sheets("Frais").Range("e8")

B49 =3D Sheets("Frais").Range("c11")
B73 =3D Sheets("Frais").Range("c12")
B89 =3D Sheets("Frais").Range("c13")
B121 =3D Sheets("Frais").Range("c14")

FB49 =3D Sheets("Frais").Range("e10")
FB73 =3D Sheets("Frais").Range("e11")
FB89 =3D Sheets("Frais").Range("e12")
FB121 =3D Sheets("Frais").Range("e13")

If code =3D "" Then 'Vide
vehicule =3D ""

ElseIf code =3D "A" Or code =3D "a" Then 'Montr=E9al, Trois-Rivi=E8re=
s,
Qu=E9bec
& Estrie

If distance < A60 Then
vehicule =3D FA60
ElseIf distance < A91 Then
vehicule =3D FA91
ElseIf distance < A121 Then
vehicule =3D FA121
Else
billet =3D True
vehicule =3D autobus(region, billet)
End If

ElseIf code =3D "B" Or code =3D "b" Then 'Reste de la province

If distance < B49 Then
vehicule =3D FB49
ElseIf distance < B73 Then
vehicule =3D FB73
ElseIf distance < B89 Then
vehicule =3D FB89
ElseIf distance < B121 Then
vehicule =3D FB121
Else
billet =3D True
vehicule =3D autobus(region, billet)
End If

ElseIf code =3D "C" Or code =3D "c" Or code =3D "P" Or code =3D "p" The=
n
'Fournit par la compagnie
vehicule =3D " -"

Else
vehicule =3D ""

End If
'Sheets("Frais").Visible =3D False

End Function
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Function autobus(billet, region)

region =3D Sheets("Frais d=E9pl").Range("k8")

r1 =3D Sheets("Frais").Range("B21")
r2 =3D Sheets("Frais").Range("B22")
r3 =3D Sheets("Frais").Range("B23")
r4 =3D Sheets("Frais").Range("B24")
r5 =3D Sheets("Frais").Range("B25")
r6 =3D Sheets("Frais").Range("B26")
r7 =3D Sheets("Frais").Range("B27")
r8 =3D Sheets("Frais").Range("B28")
r9 =3D Sheets("Frais").Range("B29")

P1 =3D Sheets("Frais").Range("e21")
P2 =3D Sheets("Frais").Range("e22")
P3 =3D Sheets("Frais").Range("e23")
P4 =3D Sheets("Frais").Range("e24")
P5 =3D Sheets("Frais").Range("e25")
P6 =3D Sheets("Frais").Range("e26")
P7 =3D Sheets("Frais").Range("e27")
P8 =3D Sheets("Frais").Range("e28")
P9 =3D Sheets("Frais").Range("e29")

If billet =3D True Then

ElseIf region =3D r1 Then
autobus =3D P1

ElseIf region =3D r2 Then
autobus =3D P2

ElseIf region =3D r3 Then
autobus =3D P3

ElseIf region =3D r4 Then
autobus =3D P4

ElseIf region =3D r5 Then
autobus =3D P5

ElseIf region =3D r6 Then
autobus =3D P6

ElseIf region =3D r7 Then
autobus =3D P7

ElseIf region =3D r8 Then
autobus =3D P8

ElseIf region =3D r9 Then
autobus =3D P9

End If

End Function

10 réponses

1 2
Avatar
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 !!!!!
Avatar
dunkelzahn
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 wrote:
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


Avatar
MichDenis
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" a écrit dans le message de groupe de discussion :

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


Avatar
Mgr T. Banni
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" a écrit dans le message de news:

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





Avatar
Inkel
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 wrote:
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 !!!!!


Avatar
FxM
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





Avatar
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 !!!!
Avatar
MichDenis
T'es sûr de ceci :

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




"FFO" a écrit dans le message de groupe de discussion :

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 !!!!
Avatar
Inkel
Merci MichDenis, cela fonctionne très bien.

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



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

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

"FFO" a écrit dans le message de group e de discussion :

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


1 2