Bonjour tout le monde. Je suis vraiment une grande débutante en Access donc j'espère que vous serez indulgents envers moi. J'ai un petit problème et je pense qu'il vaudrait mieux que j'explique tout depuis le tout début.
Je tente de créer un formulaire de recherche multicritère où il y a 7 critères de recherche différents (catégorie suivant effectif, catégorie suivant chiffre d'affaires, raison sociale ou nom, Wilaya (équivalent de département), secteur d'activité, forme juridique et commune) pour trouver une entreprise répertoriée dans la base de données. L'idée est de calculer le nombre de combinaisons possibles pour pour 1, 2, 3, 4, 5, 6 et 7 critères introduits par l'utilisateurs. Ce qui nous donne 7, 21, 35, 35, 21, 7, et 1 combinaisons possibles. De là, j'ai traduit ça en VBA en énumérant toutes les possibilités. Voici un petit bout de code pour les combinaisons de 2 critères :
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
 
If ((IsNull([Forms]![Recherche_multicritere]![liste_effectif]) = False) _
     And (IsNull([Forms]![Recherche_multicritere]![liste_wilaya]) = False) _
     And (IsNull([Forms]![Recherche_multicritere]![liste_ca]) = True) _
     And (IsNull([Forms]![Recherche_multicritere]![liste_secteur]) = True) _
     And (IsNull([Forms]![Recherche_multicritere]![nom_entr]) = True) _
     And (IsNull([Forms]![Recherche_multicritere]![liste_formejur]) = True) _
     And (IsNull([Forms]![Recherche_multicritere]![nom_commune]) = True)) Then
        DoCmd.OpenForm "Recherche_multicrit", , , "[ID_CAT_EFFECTIF]=[Forms]![Recherche_multicritere]![liste_effectif] AND [ID_WILAYA]=[Forms]![Recherche_multicritere]![liste_wilaya]"
End If
 
If ((IsNull([Forms]![Recherche_multicritere]![liste_effectif]) = False) _
     And (IsNull([Forms]![Recherche_multicritere]![liste_wilaya]) = True) _
     And (IsNull([Forms]![Recherche_multicritere]![liste_ca]) = False) _
     And (IsNull([Forms]![Recherche_multicritere]![liste_secteur]) = True) _
     And (IsNull([Forms]![Recherche_multicritere]![nom_entr]) = True) _
     And (IsNull([Forms]![Recherche_multicritere]![liste_formejur]) = True) _
     And (IsNull([Forms]![Recherche_multicritere]![nom_commune]) = True)) Then
        DoCmd.OpenForm "Recherche_multicrit", , , "[ID_CAT_EFFECTIF]=[Forms]![Recherche_multicritere]![liste_effectif] AND [ID_CAT_CA]=[Forms]![Recherche_multicritere]![liste_ca]"
End If
 
If ((IsNull([Forms]![Recherche_multicritere]![liste_effectif]) = False) _
     And (IsNull([Forms]![Recherche_multicritere]![liste_wilaya]) = True) _
     And (IsNull([Forms]![Recherche_multicritere]![liste_ca]) = True) _
     And (IsNull([Forms]![Recherche_multicritere]![liste_secteur]) = False) _
     And (IsNull([Forms]![Recherche_multicritere]![nom_entr]) = True) _
     And (IsNull([Forms]![Recherche_multicritere]![liste_formejur]) = True) _
     And (IsNull([Forms]![Recherche_multicritere]![nom_commune]) = True)) Then
        DoCmd.OpenForm "Recherche_multicrit", , , "[ID_Secteur]=[Forms]![Recherche_multicritere]![liste_secteur] AND [ID_FORMJUR]=[Forms]![Recherche_multicritere]![liste_effectif]"
End If
 
If ((IsNull([Forms]![Recherche_multicritere]![liste_effectif]) = False) And (IsNull([Forms]![Recherche_multicritere]![liste_wilaya]) = True) And (IsNull([Forms]![Recherche_multicritere]![liste_ca]) = True) And (IsNull([Forms]![Recherche_multicritere]![liste_secteur]) = True) And (IsNull([Forms]![Recherche_multicritere]![nom_entr]) = False) And (IsNull([Forms]![Recherche_multicritere]![liste_formejur]) = True) And (IsNull([Forms]![Recherche_multicritere]![nom_commune]) = True)) Then
DoCmd.OpenForm "Recherche_multicrit", , , "[ENTREPRISE.NOM] LIKE '*" & [Forms]![Recherche_multicritere]![nom_entr] & "*' AND [ID_CAT_EFFECTIF]=[Forms]![Recherche_multicritere]![liste_effectif]"
End If
If ((IsNull([Forms]![Recherche_multicritere]![liste_effectif]) = False) And (IsNull([Forms]![Recherche_multicritere]![liste_wilaya]) = True) And (IsNull([Forms]![Recherche_multicritere]![liste_ca]) = True) And (IsNull([Forms]![Recherche_multicritere]![liste_secteur]) = True) And (IsNull([Forms]![Recherche_multicritere]![nom_entr]) = True) And (IsNull([Forms]![Recherche_multicritere]![liste_formejur]) = False) And (IsNull([Forms]![Recherche_multicritere]![nom_commune]) = True)) Then
DoCmd.OpenForm "Recherche_multicrit", , , "[ID_CAT_EFFECTIF]=[Forms]![Recherche_multicritere]![liste_effectif] AND [ID_FORMJUR]=[Forms]![Recherche_multicritere]![liste_formejur]"
End If
If ((IsNull([Forms]![Recherche_multicritere]![liste_effectif]) = False) And (IsNull([Forms]![Recherche_multicritere]![liste_wilaya]) = True) And (IsNull([Forms]![Recherche_multicritere]![liste_ca]) = True) And (IsNull([Forms]![Recherche_multicritere]![liste_secteur]) = True) And (IsNull([Forms]![Recherche_multicritere]![nom_entr]) = True) And (IsNull([Forms]![Recherche_multicritere]![liste_formejur]) = False) And (IsNull([Forms]![Recherche_multicritere]![nom_commune]) = True)) Then
DoCmd.OpenForm "Recherche_multicrit", , , "[ID_CAT_EFFECTIF]=[Forms]![Recherche_multicritere]![liste_effectif] AND [NOM_COMMUNE] LIKE '*" & [Forms]![Recherche_multicritere]![nom_commune] & "*'"
End If
If ((IsNull([Forms]![Recherche_multicritere]![liste_effectif]) = True) And (IsNull([Forms]![Recherche_multicritere]![liste_wilaya]) = False) And (IsNull([Forms]![Recherche_multicritere]![liste_ca]) = False) And (IsNull([Forms]![Recherche_multicritere]![liste_secteur]) = True) And (IsNull([Forms]![Recherche_multicritere]![nom_entr]) = True) And (IsNull([Forms]![Recherche_multicritere]![liste_formejur]) = True) And (IsNull([Forms]![Recherche_multicritere]![nom_commune]) = True)) Then
DoCmd.OpenForm "Recherche_multicrit", , , "[ID_WILAYA]=[Forms]![Recherche_multicritere]![liste_wilaya] AND [ID_CAT_CA]=[Forms]![Recherche_multicritere]![liste_ca]"
End If
Recherche_multicrit est bien évidemment le formulaire de destination à partir du formulaire de recherche multicritère qui s'appelle Recherche_multicritere (excusez mon manque d'originalité). Sauf qu'arrivée aux combinaisons de 5 critères et alors que ça semblait bien fonctionner, Access me dit que ma procédure est trop longue. Du coup, j'ai essayé de fractionner cette procédure en introduisant un compteur qui compte le nombre de contrôles non vides dans le formulaire puis qui appelle une procédure en fonction du nombre trouvé. Je précise que certains contrôles sont des zones de texte et d'autres des listes déroulantes.
Voici le code :
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
 
Dim compteur As Integer
compteur = 0
 
For Each ctl In Forms![Recherche_multicritere].Controls
    If ((ctl.ControlType = acTextBox) Or (ctl.ControlType = ComboBox)) Then
       If (IsNull(ctl) = False) Then
          compteur = compteur + 1
       End If
    End If
Next
 
If compteur = 0 Then
    lbl_erreur5.Visible = True
End If
 
End Sub
Dans un premier temps, je me suis dit que j'allais juste tester si le compteur affiche bien le message d'erreur ou non. Sauf que peu importe le nombre de critères introduits, le compteur semble toujours rester à 0 et le message d'erreur s'affiche toujours. Je pense que j'ai dû faire une erreur de débutante alors je compte sur vous pour être gentils avec moi.