OVH Cloud OVH Cloud

Paramètres de fonction

4 réponses
Avatar
Antoine Labusquière
Bonjour,

J'ai une fonction qui accepte un certain nombre de paramètres.
Parmi ceux-ci, certains sont optionnels.

Dans un formulaire, on peut faire appel à cette fonction. Les champs du
formulaire sont passés en paramètres.

Or si l'un de ces champs est nul, j'obtient une erreur "Utilisation
incorrecte de Null" lors de l'appel de la fonction. Avant son exécution,
donc.

Si j'ai résolu le problème pour les champs textes (je remplace null par""),
je n'ai pas su le résoudre pour un champ date.

Comment déclarer ces paramètres pour que même une valeur nulle ne bloque pas
l'exécution (quitte à traiter le cas au sein du code, mais pas avant son
appel)

Merci

4 réponses

Avatar
Pierre CFI [mvp]
bonjour
utilise Nz( qui retourne 0 si null, et dans ta fonction tu triate le 0
mais donne le code de ta fonction

--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B

Site pour bien commencer
Access http://users.skynet.be/mpfa/
Excel http://www.excelabo.net

"Antoine Labusquière" a écrit dans le message de news: d4la8o$fhj$
Bonjour,

J'ai une fonction qui accepte un certain nombre de paramètres.
Parmi ceux-ci, certains sont optionnels.

Dans un formulaire, on peut faire appel à cette fonction. Les champs du
formulaire sont passés en paramètres.

Or si l'un de ces champs est nul, j'obtient une erreur "Utilisation
incorrecte de Null" lors de l'appel de la fonction. Avant son exécution,
donc.

Si j'ai résolu le problème pour les champs textes (je remplace null par""),
je n'ai pas su le résoudre pour un champ date.

Comment déclarer ces paramètres pour que même une valeur nulle ne bloque pas
l'exécution (quitte à traiter le cas au sein du code, mais pas avant son
appel)

Merci




Avatar
Antoine Labusquière
C'est une fonction qui utilise certains champs pour construire un message
envoyé par mail.

Le problème se pose sur les 3 derniers paramètres (optionnels donc), mais
surtout sur date_rappel.

En fait, je supposais que le fait de déclarer un paramètre optionnel
permettait de s'affranchir du fait que certains paramètres peuvent être
nuls.

Function Envoyer_Message_Mail(destinataire As String, appelant As Integer,
date_appel As Date, heure_appel As Date, num_appel As String, repondant As
String, Optional motif As String, Optional action As String, Optional ByVal
date_rappel As Date)
On Error GoTo Err_Envoyer_Message

Dim adresse As String
Dim destinataires As Recordset
Dim appelants As Recordset
Dim contact As String
Dim societe As String
Dim commande As String
Dim sujet As String

DoCmd.Hourglass True

Set destinataires = CurrentDb.OpenRecordset("SELECT T_DESTINATAIRES.*
FROM T_DESTINATAIRES WHERE T_DESTINATAIRES!destinataire = '" & destinataire
& "';")
If destinataires.EOF Then
MsgBox "Impossible de trouver le destinataire du message.",
vbCritical, Titre
Else
If destinataires!mail = "" Then
MsgBox "L'adresse mail du destinataire du message n'est pas
connue.", vbCritical, Titre
Else
sujet = "Appel Allô"
adresse = destinataires!mail

Set appelants = CurrentDb.OpenRecordset("SELECT T_CONTACTS.*
FROM T_CONTACTS WHERE T_CONTACTS!num_contact = " & appelant & ";")
If Not appelants.EOF Then
contact = Trim(appelants!civilite & " " &
appelants!prenom_contact & " " & appelants!nom_contact)
societe = IIf(appelants!societe <> "", " de la société " &
appelants!societe, "")
Else
contact = ""
End If

message = contact & societe & " a appelé le " & date_appel & " à
" & heure_appel & vbCrLf & vbCrLf & _
"Numéro de téléphone: " & num_appel & vbCrLf & vbCrLf & _
"Répondant: " & repondant & vbCrLf & vbCrLf & _
"Motif: " & motif & vbCrLf & vbCrLf & _
"Action à mener: " & action & vbCrLf & vbCrLf & _
"Rappeler le: " & date_rappel

Envoyer_Mail adresse, sujet, message
DoCmd.Beep
End If
End If

Exit_Envoyer_Message:
Set appelants = Nothing
Set destinataires = Nothing
DoCmd.Hourglass False
Exit Function

Err_Envoyer_Message:
Select Case Err
Case 62
Resume Next
Case Else
MsgBox "Erreur n° " & Err.Number & ": " & Err.Description
Resume Exit_Envoyer_Message
End Select

End Function
"Pierre CFI [mvp]" a écrit dans le message de
news:OcJ%
bonjour
utilise Nz( qui retourne 0 si null, et dans ta fonction tu triate le 0
mais donne le code de ta fonction

--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B

Site pour bien commencer
Access http://users.skynet.be/mpfa/
Excel http://www.excelabo.net



Avatar
Pierre CFI [mvp]
oui, remarque tu peux tourner le pb en déclarant tes dates en variant (supporte le null) et si non null transforme en date

--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B

Site pour bien commencer
Access http://users.skynet.be/mpfa/
Excel http://www.excelabo.net

"Antoine Labusquière" a écrit dans le message de news: d4lc2n$gk8$
C'est une fonction qui utilise certains champs pour construire un message
envoyé par mail.

Le problème se pose sur les 3 derniers paramètres (optionnels donc), mais
surtout sur date_rappel.

En fait, je supposais que le fait de déclarer un paramètre optionnel
permettait de s'affranchir du fait que certains paramètres peuvent être
nuls.

Function Envoyer_Message_Mail(destinataire As String, appelant As Integer,
date_appel As Date, heure_appel As Date, num_appel As String, repondant As
String, Optional motif As String, Optional action As String, Optional ByVal
date_rappel As Date)
On Error GoTo Err_Envoyer_Message

Dim adresse As String
Dim destinataires As Recordset
Dim appelants As Recordset
Dim contact As String
Dim societe As String
Dim commande As String
Dim sujet As String

DoCmd.Hourglass True

Set destinataires = CurrentDb.OpenRecordset("SELECT T_DESTINATAIRES.*
FROM T_DESTINATAIRES WHERE T_DESTINATAIRES!destinataire = '" & destinataire
& "';")
If destinataires.EOF Then
MsgBox "Impossible de trouver le destinataire du message.",
vbCritical, Titre
Else
If destinataires!mail = "" Then
MsgBox "L'adresse mail du destinataire du message n'est pas
connue.", vbCritical, Titre
Else
sujet = "Appel Allô"
adresse = destinataires!mail

Set appelants = CurrentDb.OpenRecordset("SELECT T_CONTACTS.*
FROM T_CONTACTS WHERE T_CONTACTS!num_contact = " & appelant & ";")
If Not appelants.EOF Then
contact = Trim(appelants!civilite & " " &
appelants!prenom_contact & " " & appelants!nom_contact)
societe = IIf(appelants!societe <> "", " de la société " &
appelants!societe, "")
Else
contact = ""
End If

message = contact & societe & " a appelé le " & date_appel & " à
" & heure_appel & vbCrLf & vbCrLf & _
"Numéro de téléphone: " & num_appel & vbCrLf & vbCrLf & _
"Répondant: " & repondant & vbCrLf & vbCrLf & _
"Motif: " & motif & vbCrLf & vbCrLf & _
"Action à mener: " & action & vbCrLf & vbCrLf & _
"Rappeler le: " & date_rappel

Envoyer_Mail adresse, sujet, message
DoCmd.Beep
End If
End If

Exit_Envoyer_Message:
Set appelants = Nothing
Set destinataires = Nothing
DoCmd.Hourglass False
Exit Function

Err_Envoyer_Message:
Select Case Err
Case 62
Resume Next
Case Else
MsgBox "Erreur n° " & Err.Number & ": " & Err.Description
Resume Exit_Envoyer_Message
End Select

End Function
"Pierre CFI [mvp]" a écrit dans le message de
news:OcJ%
bonjour
utilise Nz( qui retourne 0 si null, et dans ta fonction tu triate le 0
mais donne le code de ta fonction

--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B

Site pour bien commencer
Access http://users.skynet.be/mpfa/
Excel http://www.excelabo.net







Avatar
Antoine Labusquière
Parfait !

J'ai converti les paramètrs optionnels en variant, et ça marche nickel.
Pas besoin de transformer date_rappel en date d'ailleurs, il reprend le
format du champ.

Je te remercie grandement :)


"Pierre CFI [mvp]" a écrit dans le message de
news:%
oui, remarque tu peux tourner le pb en déclarant tes dates en variant
(supporte le null) et si non null transforme en date


--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B

Site pour bien commencer
Access http://users.skynet.be/mpfa/
Excel http://www.excelabo.net

"Antoine Labusquière" a écrit dans
le message de news: d4lc2n$gk8$

C'est une fonction qui utilise certains champs pour construire un
message


envoyé par mail.

Le problème se pose sur les 3 derniers paramètres (optionnels donc),
mais


surtout sur date_rappel.

En fait, je supposais que le fait de déclarer un paramètre optionnel
permettait de s'affranchir du fait que certains paramètres peuvent être
nuls.

Function Envoyer_Message_Mail(destinataire As String, appelant As
Integer,


date_appel As Date, heure_appel As Date, num_appel As String, repondant
As


String, Optional motif As String, Optional action As String, Optional
ByVal


date_rappel As Date)
On Error GoTo Err_Envoyer_Message

Dim adresse As String
Dim destinataires As Recordset
Dim appelants As Recordset
Dim contact As String
Dim societe As String
Dim commande As String
Dim sujet As String

DoCmd.Hourglass True

Set destinataires = CurrentDb.OpenRecordset("SELECT T_DESTINATAIRES.*
FROM T_DESTINATAIRES WHERE T_DESTINATAIRES!destinataire = '" &
destinataire


& "';")
If destinataires.EOF Then
MsgBox "Impossible de trouver le destinataire du message.",
vbCritical, Titre
Else
If destinataires!mail = "" Then
MsgBox "L'adresse mail du destinataire du message n'est pas
connue.", vbCritical, Titre
Else
sujet = "Appel Allô"
adresse = destinataires!mail

Set appelants = CurrentDb.OpenRecordset("SELECT T_CONTACTS.*
FROM T_CONTACTS WHERE T_CONTACTS!num_contact = " & appelant & ";")
If Not appelants.EOF Then
contact = Trim(appelants!civilite & " " &
appelants!prenom_contact & " " & appelants!nom_contact)
societe = IIf(appelants!societe <> "", " de la société "
&


appelants!societe, "")
Else
contact = ""
End If

message = contact & societe & " a appelé le " & date_appel &
" à


" & heure_appel & vbCrLf & vbCrLf & _
"Numéro de téléphone: " & num_appel & vbCrLf & vbCrLf & _
"Répondant: " & repondant & vbCrLf & vbCrLf & _
"Motif: " & motif & vbCrLf & vbCrLf & _
"Action à mener: " & action & vbCrLf & vbCrLf & _
"Rappeler le: " & date_rappel

Envoyer_Mail adresse, sujet, message
DoCmd.Beep
End If
End If

Exit_Envoyer_Message:
Set appelants = Nothing
Set destinataires = Nothing
DoCmd.Hourglass False
Exit Function

Err_Envoyer_Message:
Select Case Err
Case 62
Resume Next
Case Else
MsgBox "Erreur n° " & Err.Number & ": " & Err.Description
Resume Exit_Envoyer_Message
End Select

End Function
"Pierre CFI [mvp]" a écrit dans le message de
news:OcJ%
bonjour
utilise Nz( qui retourne 0 si null, et dans ta fonction tu triate le 0
mais donne le code de ta fonction

--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B

Site pour bien commencer
Access http://users.skynet.be/mpfa/
Excel http://www.excelabo.net