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

Difficulté avec "if"

7 réponses
Avatar
Luchr
Bonjour =E0 tous. Je suis sur que vous pouvez m'aider. Je cherche =E0
d=E9finir la valeur d'une zone texte dans un formulaire en fonction
d'une date de naissance. Cela fonctionne mais mon code attribut la
valeur =E0 tous les enregistremnts du formulaire.
Voici le code.
Private Sub Datedenaissance_AfterUpdate()
If Me![Datedenaissance] < #1/1/2002# Then
Me.[Texte140] =3D "CP"
Exit Sub
End If
If Me![Datedenaissance] < #1/1/2003# Then
Me![Texte140] =3D "G/S"
Exit Sub
End If
If Me![Datedenaissance] < #1/1/2004# Then
Me![Texte140] =3D "M/S"
Exit Sub
End If
If Me![Datedenaissance] < #1/1/2005# Then
Me![Texte140] =3D "P/S"
Exit Sub
End If
End Sub

D'avance merci si vous pouvez me dire ou je me suis plant=E9

7 réponses

Avatar
le méruvien
Ton champ datedenaissance n'est-il pas un champ independant?



"Luchr" a écrit dans le message de news:

Bonjour à tous. Je suis sur que vous pouvez m'aider. Je cherche à
définir la valeur d'une zone texte dans un formulaire en fonction
d'une date de naissance. Cela fonctionne mais mon code attribut la
valeur à tous les enregistremnts du formulaire.
Voici le code.
Private Sub Datedenaissance_AfterUpdate()
If Me![Datedenaissance] < #1/1/2002# Then
Me.[Texte140] = "CP"
Exit Sub
End If
If Me![Datedenaissance] < #1/1/2003# Then
Me![Texte140] = "G/S"
Exit Sub
End If
If Me![Datedenaissance] < #1/1/2004# Then
Me![Texte140] = "M/S"
Exit Sub
End If
If Me![Datedenaissance] < #1/1/2005# Then
Me![Texte140] = "P/S"
Exit Sub
End If
End Sub

D'avance merci si vous pouvez me dire ou je me suis planté
Avatar
Willi2004
Bonjour Luchr.
Essaye avec:

Private Sub Datedenaissance_AfterUpdate()

If Me![Datedenaissance] < #1/1/2002# Then
Me.[Texte140] = "CP"
Else
If Me![Datedenaissance] < #1/1/2003# Then
Me![Texte140] = "G/S"
Else
If Me![Datedenaissance] < #1/1/2004# Then
Me![Texte140] = "M/S"
Else
If Me![Datedenaissance] < #1/1/2005# Then
Me![Texte140] = "P/S"
End If
End If
End If
End If

End Sub


"Luchr" a écrit dans le message de news:

Bonjour à tous. Je suis sur que vous pouvez m'aider. Je cherche à
définir la valeur d'une zone texte dans un formulaire en fonction
d'une date de naissance. Cela fonctionne mais mon code attribut la
valeur à tous les enregistremnts du formulaire.
Voici le code.
Private Sub Datedenaissance_AfterUpdate()
If Me![Datedenaissance] < #1/1/2002# Then
Me.[Texte140] = "CP"
Exit Sub
End If
If Me![Datedenaissance] < #1/1/2003# Then
Me![Texte140] = "G/S"
Exit Sub
End If
If Me![Datedenaissance] < #1/1/2004# Then
Me![Texte140] = "M/S"
Exit Sub
End If
If Me![Datedenaissance] < #1/1/2005# Then
Me![Texte140] = "P/S"
Exit Sub
End If
End Sub

D'avance merci si vous pouvez me dire ou je me suis planté
Avatar
Gloops
Salut,

Ou Select Case, peut-être ?

ça peut améliorer la lisibilité je pense, mais pour le problème
d'exactitude du résultat je croirais assez à un contrôle indépend ant. Il
n'y a pas de faute de frappe, dans les noms de contrôles ? Hum, quoique ,
on aurait eu un message qui demandait la valeur.

ça risque d'être plus facile à tester de rejeter la conversion dans une
fonction.

Auquel cas on aura juste à mettre
Me.[Texte140] = Conversion(Me![Datedenaissance]

Le point d'exclamation signifie qu'on a affaire à un champ de jeu
d'enregistrements, alors que le point signifie qu'on a affaire à un
objet enfant, classiquement un contrôle s'agissant d'un formulaire.

La différence a-t-elle une importance dans ce contexte ?

Et je dois dire que Texte140, je ne devine pas ce que ça signifie.
Pour corriger ça dans deux ans si tu as un problème avec, tu vas t'am user.
_________________________________________
Willi2004 a écrit, le 14/05/2007 20:53 :
Bonjour Luchr.
Essaye avec:

Private Sub Datedenaissance_AfterUpdate()

If Me![Datedenaissance] < #1/1/2002# Then
Me.[Texte140] = "CP"
Else
If Me![Datedenaissance] < #1/1/2003# Then
Me![Texte140] = "G/S"
Else
If Me![Datedenaissance] < #1/1/2004# Then
Me![Texte140] = "M/S"
Else
If Me![Datedenaissance] < #1/1/2005# Then
Me![Texte140] = "P/S"
End If
End If
End If
End If

End Sub



Avatar
Willi2004
Salut Gloops.
Je ne crois pas que Select Case puisse être utilisé dans le cas présent,
mais je peux me tromper.


"Gloops" a écrit dans le message de news:
%

Salut,

Ou Select Case, peut-être ?

ça peut améliorer la lisibilité je pense, mais pour le problème
d'exactitude du résultat je croirais assez à un contrôle indépendant. Il
n'y a pas de faute de frappe, dans les noms de contrôles ? Hum, quoique,
on aurait eu un message qui demandait la valeur.

ça risque d'être plus facile à tester de rejeter la conversion dans une
fonction.

Auquel cas on aura juste à mettre
Me.[Texte140] = Conversion(Me![Datedenaissance]

Le point d'exclamation signifie qu'on a affaire à un champ de jeu
d'enregistrements, alors que le point signifie qu'on a affaire à un
objet enfant, classiquement un contrôle s'agissant d'un formulaire.

La différence a-t-elle une importance dans ce contexte ?

Et je dois dire que Texte140, je ne devine pas ce que ça signifie.
Pour corriger ça dans deux ans si tu as un problème avec, tu vas t'amuser.
_________________________________________
Willi2004 a écrit, le 14/05/2007 20:53 :
Bonjour Luchr.
Essaye avec:

Private Sub Datedenaissance_AfterUpdate()

If Me![Datedenaissance] < #1/1/2002# Then
Me.[Texte140] = "CP"
Else
If Me![Datedenaissance] < #1/1/2003# Then
Me![Texte140] = "G/S"
Else
If Me![Datedenaissance] < #1/1/2004# Then
Me![Texte140] = "M/S"
Else
If Me![Datedenaissance] < #1/1/2005# Then
Me![Texte140] = "P/S"
End If
End If
End If
End If

End Sub



Avatar
Gloops
Willi2004 a écrit, le 14/05/2007 23:54 :
Salut Gloops.
Je ne crois pas que Select Case puisse être utilisé dans le cas pré sent,
mais je peux me tromper.



Salut,

Je n'ai pas testé, mais je viens de vérifier à l'instant dans l'aid e
d'Access que la syntaxe de Select Case comporte To, qui permet de
définir une plage de valeurs.

Il existe aussi Is et Like, je suppose que Like ne servira pas ici.

ça vaudrait probablement le coup de creuser.

Je cite deux lignes au hazard dans l'aide de Select Case (qui risquent
d'être affichées sur trois lignes dans un newsgroup) :

Vous pouvez utiliser plusieurs expressions ou plages de valeurs dans
chaque locution Case. Par exemple, la ligne suivante est valide:

Case 1 To 4, 7 To 9, 11, 13, Is > NombreMax

Avatar
Gloops
Gloops a écrit, le 15/05/2007 00:20 :
Case 1 To 4, 7 To 9, 11, 13, Is > NombreMax


Ah oui une précision : je proposais de rejeter la conversion dans une

fonction, il se peut qu'il vaille autant faire ça avant le rateau
(c'est-à-dire la suite de If ou le Select Case), ça évitera que la
fonction soit exécutée plusieurs fois si on utilise le résultat
plusieurs fois.
Donc, on met le résultat dans une variable, et on teste ensuite la
variable dans le rateau.

Même si on a l'impression d'avoir une machine puissante, on a tendance à
mettre de plus en plus de choses dessus, et il arrive un jour où elle a
du mal à suivre ; alors si les applications sont optimisées un chouï a,
ça aide.

Avatar
Fabien
Bonjour à tous. Je suis sur que vous pouvez m'aider. Je cherche à
définir la valeur d'une zone texte dans un formulaire en fonction
d'une date de naissance. Cela fonctionne mais mon code attribut la
valeur à tous les enregistremnts du formulaire.
Voici le code.
Private Sub Datedenaissance_AfterUpdate()
If Me![Datedenaissance] < #1/1/2002# Then
Me.[Texte140] = "CP"
Exit Sub
End If
If Me![Datedenaissance] < #1/1/2003# Then
Me![Texte140] = "G/S"
Exit Sub
End If
If Me![Datedenaissance] < #1/1/2004# Then
Me![Texte140] = "M/S"
Exit Sub
End If
If Me![Datedenaissance] < #1/1/2005# Then
Me![Texte140] = "P/S"
Exit Sub
End If
End Sub

D'avance merci si vous pouvez me dire ou je me suis planté

Bonjour,

Ton formulaire serait-il de type continu et ta zone [Texte140] un
controle indépendant ?
Si oui
le comportement que tu indique est normal. Un champs indépendant ne
peut pas contenir un 'calcul' lié aux champs des enregistrements sur un
formulaire en continu :-(
Ca marche sur un formulaire enregistrement unique.
Si non
ben je sais pas :-(
Fin Si
Voilà