Bonjour,
Je charge une Cbo en fonction de la sélection d'une autre (jusqu'ici pas de soucis). Lorsque l'utilisateur sélectionne une ligne dans la 2sde liste, j'affecte les données de la liste aux champs du formulaire par une boucle parcourant les champs du recordset de la liste / noms des champs du formulaire (au 1er passage pas de soucis). Le problème arrive lorsque je sélectionne une nouvelle ligne dans la 1ère liste, la 2sde est bien mise à jour, mais la sélection dans cette dernière me renvoie une erreur....
Je charge une ComboBox Sous-type équipement comme ceci:
La source de la liste est modifiée lors de la sélection dans une autre liste Type équipement:
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 Private Sub ChargerCboEquipementSsType() ' Mise à jour de la liste des sous type équipement With Me.cboEquipementSsType .RowSource = "SELECT T_Bib_EqptSousType.Designation, T_Bib_EqptSousType.ID, T_Bib_EqptSousType.ID_T_BibEqptType, T_Bib_EqptSousType.Repere, " & _ "T_Bib_EqptSousType.ELEC_Polarite, T_Bib_EqptSousType.ELEC_Tension, " & _ "T_Bib_EqptSousType.API_ETOR, T_Bib_EqptSousType.API_STOR, T_Bib_EqptSousType.API_EANA, T_Bib_EqptSousType.API_SANA, " & _ "T_Bib_EqptSousType.API_Comptage, T_Bib_EqptSousType.API_EJauge, T_Bib_EqptSousType.API_ETemp, T_Bib_EqptSousType.API_Communication, " & _ "T_Bib_EqptSousType.API_ETORSecurite, T_Bib_EqptSousType.API_STORSecurite " & _ "FROM T_Bib_EqptSousType " & _ "WHERE T_Bib_EqptSousType.ID_T_BibEqptType = " & Me.cboEquipementType.Column(1) & " " & _ "ORDER BY T_Bib_EqptSousType.Designation; " .ColumnCount = 16 .ColumnWidths = "5cm;0cm;0cm;0cm;2cm;2cm;1,5cm;1,5cm;1,5cm;1,5cm;3cm;3cm;3cm;3cm;3cm;3cm" .Requery .Value = "" End With End Sub
Jusqu'ici tout fonctionne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Private Sub cboEquipementType_Change() Call ChargerCboEquipementSsType End Sub
Lors d'une sélection dans la liste déroulante Sous-type équipement par l'utilisateur, le code parcourt les champs du recordset de la liste, parcourt les champs contenus dans un onglet du formulaire en compare les noms (champs recordset / champs formulaire), s'ils sont égaux, il affecte la valeur du recordset au champ.
Jusqu'ici tout fonctionne.
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 Private Sub cboEquipementSsType_Change() ' Parcourir les colonnes de la liste Equipement sous-type ' et rechercher dans l'onglet API les TextBox ayant le même nom, puis les renseigner ' Champ de la table: API_ETOR ' Champ du formulaire: txtAPI_ETOR For Each cboField In Me.cboEquipementSsType.Recordset.Fields For Each objCtrl In Me.ctabAPI.Pages(0).Controls If VBA.Replace(objCtrl.Name, "txt", "") = cboField.Name Then objCtrl.Value = cboField.Value Exit For End If Next Next End Sub
J'obtiens une erreur lorsque je modifie la sélection de la 1ère liste Type équipement, la 2sde Sous-type équipement est bien mise à jour, mais lorsque je sélectionne une ligne dans la 2sde, l'éditeur VBA me renvoie sur la ligne
Avec l'erreur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part objCtrl.Value = cboField.Value
La variable objCtrl pointe bien sur un contrôle. Par contre cboField, renvoie:Erreur d'exécution 3420:
L'objet est incorrect ou n'est plus défini.
D’où ma question, pourquoi l'objet recordset est-il invalide après la mise à jour de la liste déroulante?
Gdal
Partager