Bonjour ...
Après une recherche dans la FAQ, j'ai trouvé que pour changer la source d'une zone de liste déroulante, il fallait utiliser :
Voici ce que j'ai fait :
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 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
| Public Function fn_AffichageListeDeroulante()
'Déclaration des recordsets
'TB_ORDINATEURS
Dim rst_Ordinateur As DAO.Recordset
Dim base_donnee As DAO.Database
Dim str_ReqOrdinateur As String
'TB_ASSOCIATIVE_ORDINATEUR_DEPARTEMENT
Dim rst_Associative As DAO.Recordset
Dim str_ReqAssociative As String
Dim int_NombreDeLigne As Integer
'TB_DEPARTEMENTS
Dim rst_Departement As DAO.Recordset
Dim str_ReqDepartement As String
'Déclaration des variables
'TB_ORDINATEURS
Dim int_PkOrdinateur As Integer
Dim str_NomOrdinateur As String
'TB_ASSOCIATIVE
Dim i As Integer
Dim int_PkDepartement1 As Integer
Dim int_PkDepartement2 As Integer
'GENERAL :
Dim str_ReqZdldMEnuG As String
str_NomOrdinateur = Environ("COMPUTERNAME")
'RECHERCHE DANS LA TABLE TB_ORDINATEURS
'Attribution de valeurs aux recordsets
Set base_donnee = Application.CurrentDb
Set rst_Ordinateurs = base_donnee.OpenRecordset("TB_ORDINATEURS")
str_ReqOrdinateur = ("SELECT * FROM TB_ORDINATEURS WHERE nom_ordinateur LIKE '" & str_NomOrdinateur & "';")
Set rst_Ordinateur = base_donnee.OpenRecordset(str_ReqOrdinateur, dbOpenDynaset)
rst_Ordinateur.MoveFirst
'Parcours de la table TB_ORDINATEURS
If rst_Ordinateur.RecordCount > 0 Then
rst_Ordinateur.MoveLast
rst_Ordinateur.MoveFirst
'Stockage de la PK de l'odinateur dans la variable créer à cet effet.
int_PkOrdinateur = rst_Ordinateur("pk_ordinateur")
rst_Ordinateur.MoveNext
End If
'RECHERCHE DANS LA TABLE TB_ASSOCIATIVE_ORDINATEUR_DEPARTEMENT
'Attribution de valeurs aux recordsets
Set base_donnee = Application.CurrentDb
Set rst_Associative = base_donnee.OpenRecordset("TB_ASSOCIATIVE_ORDINATEUR_DEPARTEMENT")
str_ReqAssociative = ("SELECT * FROM TB_ASSOCIATIVE_ORDINATEUR_DEPARTEMENT WHERE pk_fk_ordinateur_associative LIKE '" & _
int_PkOrdinateur & "';")
Set rst_Associative = base_donnee.OpenRecordset(str_ReqAssociative, dbOpenDynaset)
rst_Associative.MoveFirst
' Parcours de la table TB_ORDINATEURS
If rst_Associative.RecordCount > 0 Then
rst_Associative.MoveLast
rst_Associative.MoveFirst
i = 1
'Tant qu'il y a des enregistrements on parcourt la boucle
Do Until rst_Associative.EOF
'On incrémente i à chaque fois que l'on passe dans la boucle
i = i + 1
'On passe à l'enregistrement suivant pour pas que cela soit les mêmes données
rst_Associative.MoveNext
Loop
'Si il y a 1 seul département pour un ordinateur
If (i = 2) Then
rst_Associative.MoveFirst
int_PkDepartement1 = rst_Associative("pk_fk_departement_associative")
rst_Associative.MoveLast
End If
'Si il y a 2 départements pour un ordinateur
If (i = 3) Then
rst_Associative.MoveFirst
int_PkDepartement1 = rst_Associative("pk_fk_departement_associative")
rst_Associative.MoveNext
int_PkDepartement2 = rst_Associative("pk_fk_departement_associative")
rst_Associative.MoveLast
End If
int_NombreDeLigne = i - 1
rst_Associative.MoveNext
End If
If (int_NombreDeLigne = 2) Then
str_ReqZdldMEnuG = ("SELECT pk_departement, nom_departement FROM TB_DEPARTEMENTS WHERE (pk_departement LIKE '" & _
int_PkDepartement1 & "') AND ( pk_departement LIKE '" & int_PkDepartement2 & "')")
Forms("AA_FRM_MENU_GENERAL_REFAIT")![zdld_Departement].RowSource = str_ReqZdldMEnuG
End If
If (int_NombreDeLigne = 1) Then
Forms("AA_FRM_MENU_GENERAL_REFAIT")![zdld_Departement].Visible = False
End If
fn_AffichageListeDeroulante = str_ReqZdldMEnuG
End Function |
Cette fonction n'a rien de bien compliqué, on est d'accord ... ...
mais pourtant il y a un problème ... ...
Voici comment j'ai appelé ma fonction pour changer le contenu de ma zone de liste déroulante :
Sur l'évenement : Sur Ouverture du formulaire j'ai mit ce code :
Me.zdld_Departement.RowSource = fn_AffichageListeDeroulante
et lorsque mon formulaire s'ouvre, je n'ai aucune erreur à la compilation mais dans ma zone de liste déroulante, je n'ai rien ... c'est à dire que c'est comme si la source de ma zone de liste n'avait pas changée ...
Si vous avez des idées pour m'aider ... elles seront les bienvenues ...
Merci de votre aide ...
PS : Dsl pour la longueur du code ...
Partager