OVH Cloud OVH Cloud

Trop Long !

3 réponses
Avatar
FujitsuChaos
Bonjour

Dans le module, vous m'aidez faire résume ou corriger plus simple, le
programme est parfait (pas de erreur) mais il est trop long suivante :

Private Function CH01()
Select Case Me.H01
Case "CA", "JF", "RT", "RT2", "HS", "CR", "F8", "T"
If Not IsNull(Me.B01) Then
Me.H01n = (((DLookup("[Durée]", "[Req GP AGenerale]",
"[Code]='" & Me.H01 & "'")) + (Me.B01)) + (Me.FixeHorairePMN)) *
(Me.TempsNum)
Else
Me.H01n = ((DLookup("[Durée]", "[Req GP AGenerale]",
"[Code]='" & Me.H01 & "'")) + (Me.FixeHorairePMN)) * (Me.TempsNum)
End If
Case "A1", "A2", "A7", "A9", "B1", "S6"
If Not IsNull(Me.B01) Then
Me.H01n = (DLookup("[Durée]", "[Req GP Ainfo]", "[Code]='" &
Me.H01 & "'")) + (Me.B01)
Else
Me.H01n = DLookup("[Durée]", "[Req GP AInfo]", "[Code]='" &
Me.H01 & "'")
End If
Case "RH"
If Not IsNull(Me.B01) Then
Me.H01n = 0 + (Me.B01)
Else
Me.H01n = "0"
End If
Case Else
If IsNull(Me.H01) Then
Me.H01n = ""
Me.H01 = ""
Else
Me.H01n = ""
Me.H01 = ""
MsgBox "Ce code n'existe pas"
End If
End Select
End Function

Private Function CH02()
Select Case Me.H02
Case "CA", "JF", "RT", "RT2", "HS", "CR", "F8", "T"
If Not IsNull(Me.B02) Then
Me.H02n = (((DLookup("[Durée]", "[Req GP AGenerale]",
"[Code]='" & Me.H02 & "'")) + (Me.B02)) + (Me.FixeHorairePMN)) *
(Me.TempsNum)
Else
Me.H02n = ((DLookup("[Durée]", "[Req GP AGenerale]",
"[Code]='" & Me.H02 & "'")) + (Me.FixeHorairePMN)) * (Me.TempsNum)
End If
Case "A1", "A2", "A7", "A9", "B1", "S6"
If Not IsNull(Me.B02) Then
Me.H02n = (DLookup("[Durée]", "[Req GP Ainfo]", "[Code]='" &
Me.H02 & "'")) + (Me.B02)
Else
Me.H02n = DLookup("[Durée]", "[Req GP AInfo]", "[Code]='" &
Me.H02 & "'")
End If
Case "RH"
If Not IsNull(Me.B02) Then
Me.H02n = 0 + (Me.B02)
Else
Me.H02n = "0"
End If
Case Else
If IsNull(Me.H02) Then
Me.H02n = ""
Me.H02 = ""
Else
Me.H02n = ""
Me.H02 = ""
MsgBox "Ce code n'existe pas"
End If
End Select
End Function

Private Function CH03()
Select Case Me.H03
Case "CA", "JF", "RT", "RT2", "HS", "CR", "F8", "T"
If Not IsNull(Me.B03) Then
Me.H03n = (((DLookup("[Durée]", "[Req GP AGenerale]",
"[Code]='" & Me.H03 & "'")) + (Me.B03)) + (Me.FixeHorairePMN)) *
(Me.TempsNum)
Else
Me.H03n = ((DLookup("[Durée]", "[Req GP AGenerale]",
"[Code]='" & Me.H03 & "'")) + (Me.FixeHorairePMN)) * (Me.TempsNum)
End If
Case "A1", "A2", "A7", "A9", "B1", "S6"
If Not IsNull(Me.B03) Then
Me.H03n = (DLookup("[Durée]", "[Req GP Ainfo]", "[Code]='" &
Me.H03 & "'")) + (Me.B03)
Else
Me.H03n = DLookup("[Durée]", "[Req GP AInfo]", "[Code]='" &
Me.H03 & "'")
End If
Case "RH"
If Not IsNull(Me.B03) Then
Me.H03n = 0 + (Me.B03)
Else
Me.H03n = "0"
End If
Case Else
If IsNull(Me.B03) Then
Me.H03n = ""
Me.H03 = ""
Else
Me.H03n = ""
Me.H03 = ""
MsgBox "Ce code n'existe pas"
End If
End Select
End Function

Merci d'avance

3 réponses

Avatar
Gilles
Bonjour

Dans le module, vous m'aidez faire résume ou corriger plus simple, le
programme est parfait (pas de erreur) mais il est trop long suivante :

Private Function CH01()
(...)
End Function

Merci d'avance


Bonjour, FujitsuChaos

Tes trois fonctions (qui, au passage ne renvoie pas de valeur) semblent
avoir exactement la même structure.
La première chose à faire serait de créer une fonction "générique" que tu
appelerais avec les bons paramètres.
La deuxième chose concerne les tests sur les valeurs nulles.
Je te conseille de voir du côté de la fonction Nz(Expression[,
ValeurSiNull]) brillament commentée sur la page suivante:
http://officesystem.access.free.fr/vba/nz.htm
Enfin, je me suis permis de t'écrire une simplification possible que je te
laisse le soin de tester, après avoir fait une sauvegarde de ta base:

<début code>
Private Function CH0X(ByRef H0X, ByRef H0Xn, ByVal B0X)
Select Case H0X
Case "CA", "JF", "RT", "RT2", "HS", "CR", "F8", "T"
H0Xn = (((DLookup("[Durée]", "[Req GP AGenerale]", "[Code]='" &
H0X & "'")) + Nz(B0X, 0)) + (Me.FixeHorairePMN)) * (Me.TempsNum)
Case "A1", "A2", "A7", "A9", "B1", "S6"
H0Xn = (DLookup("[Durée]", "[Req GP Ainfo]", "[Code]='" & H0X &
"'")) + Nz(B0X, 0)
Case "RH"
H0Xn = 0 + Nz(B0X, 0)
Case IsNull
H0Xn = ""
H0X = ""
Case Else
H0Xn = ""
H0X = ""
MsgBox "Ce code n'existe pas"
End Select
End Function

Private Function CH01()
CH01 = CH0X(Me.H01, Me.H01n, Me.B01)
End Function

Private Function CH02()
CH02 = CH0X(Me.H02, Me.H02n, Me.B02)
End Function

Private Function CH03()
CH03 = CH0X(Me.H03, Me.H03n, Me.B03)
End Function
<fin code>

Bonne continuation

Avatar
FujitsuChaos
Bonjour Gilles

La deuxième : Nz(Expression[,> ValeurSiNull]), c'est intéressant.
La Première : le programme n'y a pas Erreur mais rien la valeur de résultat
H0Xn
Si je tape JJ dans H0X par exemple, la valeur est "Ce code n'existe pas",
c'est bon
Mais si je tape de CA ou A1....., rien de valeur...???

Merci de votre aide
Marco


Private Function CH0X(ByRef H0X, ByRef H0Xn, ByVal B0X)
Select Case H0X
Case "CA", "JF", "RT", "RT2", "HS", "CR", "F8", "T"
H0Xn = (((DLookup("[Durée]", "[Req GP AGenerale]", "[Code]='" &
H0X & "'")) + Nz(B0X, 0)) + (Me.FixeHorairePMN)) * (Me.TempsNum)
Case "A1", "A2", "A7", "A9", "B1", "S6"
H0Xn = (DLookup("[Durée]", "[Req GP Ainfo]", "[Code]='" & H0X &
"'")) + Nz(B0X, 0)
Case "RH"
H0Xn = 0 + Nz(B0X, 0)
Case Else
H0Xn = ""
H0X = ""
MsgBox "Ce code n'existe pas"
End Select
End Function
*********************
Private Function CH01()
CH01 = CH0X(Me.H01, Me.H01n, Me.B01)
End Function

Private Function CH02()
CH02 = CH0X(Me.H02, Me.H02n, Me.B02)
End Function

Private Function CH03()
CH03 = CH0X(Me.H03, Me.H03n, Me.B03)
End Function
*********************
Private Sub B01_AfterUpdate()
CH01
End Sub

Private Sub B02_AfterUpdate()
CH02
End Sub

Private Sub B03_AfterUpdate()
CH03
End Sub
**********************
Private Sub H01_AfterUpdate()
CH01
End Sub

Private Sub H02_AfterUpdate()
CH02
End Sub

Private Sub H03_AfterUpdate()
CH03
End Sub
************************


"Gilles" a écrit dans le message de news:
%23g$%
Bonjour

Dans le module, vous m'aidez faire résume ou corriger plus simple, le
programme est parfait (pas de erreur) mais il est trop long suivante :

Private Function CH01()
(...)
End Function

Merci d'avance


Bonjour, FujitsuChaos

Tes trois fonctions (qui, au passage ne renvoie pas de valeur) semblent
avoir exactement la même structure.
La première chose à faire serait de créer une fonction "générique" que tu
appelerais avec les bons paramètres.
La deuxième chose concerne les tests sur les valeurs nulles.
Je te conseille de voir du côté de la fonction Nz(Expression[,
ValeurSiNull]) brillament commentée sur la page suivante:
http://officesystem.access.free.fr/vba/nz.htm
Enfin, je me suis permis de t'écrire une simplification possible que je te
laisse le soin de tester, après avoir fait une sauvegarde de ta base:

<début code>
Private Function CH0X(ByRef H0X, ByRef H0Xn, ByVal B0X)
Select Case H0X
Case "CA", "JF", "RT", "RT2", "HS", "CR", "F8", "T"
H0Xn = (((DLookup("[Durée]", "[Req GP AGenerale]", "[Code]='" &
H0X & "'")) + Nz(B0X, 0)) + (Me.FixeHorairePMN)) * (Me.TempsNum)
Case "A1", "A2", "A7", "A9", "B1", "S6"
H0Xn = (DLookup("[Durée]", "[Req GP Ainfo]", "[Code]='" & H0X &
"'")) + Nz(B0X, 0)
Case "RH"
H0Xn = 0 + Nz(B0X, 0)
Case IsNull
H0Xn = ""
H0X = ""
Case Else
H0Xn = ""
H0X = ""
MsgBox "Ce code n'existe pas"
End Select
End Function

Private Function CH01()
CH01 = CH0X(Me.H01, Me.H01n, Me.B01)
End Function

Private Function CH02()
CH02 = CH0X(Me.H02, Me.H02n, Me.B02)
End Function

Private Function CH03()
CH03 = CH0X(Me.H03, Me.H03n, Me.B03)
End Function
<fin code>

Bonne continuation





Avatar
Gilles
"FujitsuChaos" a écrit:
Bonjour Gilles

La deuxième : Nz(Expression[,> ValeurSiNull]), c'est intéressant.
La Première : le programme n'y a pas Erreur mais rien la valeur de
résultat

H0Xn
Si je tape JJ dans H0X par exemple, la valeur est "Ce code n'existe pas",
c'est bon
Mais si je tape de CA ou A1....., rien de valeur...???

Merci de votre aide
Marco
(...)
*********************
Private Function CH01()
CH01 = CH0X(Me.H01, Me.H01n, Me.B01)
End Function
(...)


Bonjour, Marco

Ce que tu me dis, c'est que tes valeurs H0Xn ne sont pas modifiées quand tu
modifies H0X, c'est bien cela ?
Les contrôles H0Xn ne seraient pas verrouillés ?
Si ton code initial fonctionnait, je ne vois pas de raison pour que ce code
"amaigri" ne fonctionne pas...
Vérifie que les contrôles peuvent être modifiés et qu'il n'y a pas d'autres
évènements qui viendraient perturber le déroulement des fonctions.
Au besoin, essaie d'exécuter le code en pas à pas en mettant des points
d'arrêt.

Bonne continuation