Bonjour,

J'ai lu dans un bouquin que l'on pouvait intégrer des fonctions dans une expression SQL pour éviter les empilages de Iff.

J'essaye de le faire mais cela ne marche pas. J'ai un message d'erreur qui me dit que "Type de donnée incompatible dans l'expression du critère.

Le code de construction de l'expression SQL :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
    'Sélection et conditions principales
    SQl = "INSERT INTO " & Table_REP & " ( REP_Num_Bis, REP_Select_2 )" & _
    " SELECT REPertoire.REP_Num, True AS Expr1" & _
    " FROM (" & Table_MET & " INNER JOIN REPertoire ON " & Table_MET & ".MET_Num_Bis = REPertoire.REP_Actprinc) INNER JOIN " & Table_COD & " ON REPertoire.REP_Codepostal = " & Table_COD & ".COD_Code" & _
    " WHERE (((" & Table_MET & ".MET_Select)=True) AND ((" & Table_COD & ".COD_Select)=True) AND ((REPertoire.REP_Effectif)>=" & Me.Ef_mini & ") AND ((REPertoire.REP_Effectif)<=" & Me.Ef_Maxi & ")" & _
    " AND ((REPertoire.REP_Actif)=True) AND ((REPertoire.REP_Client)=True)" & _
    " AND ((IIf(IsNull(REPertoire.REP_Datecrea)=True,'" & Me.Date_mini & "',REPertoire.REP_Datecrea))>=#" & Me.Date_mini & "# And (IIf(IsNull(REPertoire.REP_Datecrea)=True,'" & Me.Date_mini & "',REPertoire.REP_Datecrea))<=#" & Me.Date_maxi & "#)"
 
    'Conditions "type de relance"
    Select Case Me.S_Relance
 
        Case 1
            SQl = SQl & " AND ((REPertoire.REP_Relance_Fax)=False) AND ((Verif_Numero(REPertoire.REP_Fax))=True)"
 
        Case 2
            SQl = SQl & " AND ((REPertoire.REP_Relance_Mail)=False) AND ((Verif_Numero(REPertoire.REP_Mail))=True)"
 
        Case 3
            SQl = SQl & " AND ((REPertoire.REP_Relance_Tel)=False) AND ((Verif_Numero(REPertoire.REP_Tel1))=True)"
 
        Case 4
            SQl = SQl & " AND ((REPertoire.REP_Relance_Courrier)=False) AND ((Verif_Numero(REPertoire.REP_Adres))=True)"
 
 
    End Select
 
 
 
    'Txt_Var = Choose(Me.S_Relance, "REP_Relance_Fax", "REP_Relance_Mail", "REP_Relance_Tel", "REP_Relance_Courrier")
    'SQl = SQl & " AND ((REPertoire." & Txt_Var & ")=False)"
    'Txt_Var = Choose(Me.S_Relance, "REP_Fax", "REP_Mail", "REP_Tel1", "REP_Adres")
    'SQl = SQl & " AND ((REPertoire." & Txt_Var & ") Is Not Null)"
 
    '((Verif_Numero([REP_Fax]))=True)
 
    'Conditions "Options"
    If Me.CAPEB = -1 Then SQl = SQl & " AND ((REPertoire.REP_Capeb)=True)"
    If Me.Email = -1 Then SQl = SQl & " AND ((REPertoire.REP_Mail) Is Null)"
    If Me.Fax = -1 Then SQl = SQl & " AND ((REPertoire.REP_Fax) IS null)"
 
    'Fin SQL de sélection
    SQl = SQl & ");"
 
 
    DoCmd.SetWarnings False 'désactive les messages d'info auto
    DoCmd.RunSQL SQl
    DoCmd.SetWarnings True 'active les messages d'info auto
Le code de la fonction que souhaite intégrer :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Function Verif_Numero(Numero As String)
 
    Dim Retour As Boolean
 
    Select Case Numero
        Case Null
            Retour = False
        Case ""
            Retour = False
        Case "0000000000"
            Retour = False
        Case "0000" & "*"
            Retour = False
        Case Else
            Retour = True
    End Select
 
    Verif_Numero = Retour
 
End Function
Merci de votre aide