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:
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
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
Private Sub cboEquipementType_Change()
 
    Call ChargerCboEquipementSsType
 
End Sub
Jusqu'ici tout fonctionne.

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.
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
Jusqu'ici tout fonctionne.

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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
objCtrl.Value = cboField.Value
Avec l'erreur:
Erreur d'exécution 3420:
L'objet est incorrect ou n'est plus défini.
La variable objCtrl pointe bien sur un contrôle. Par contre cboField, renvoie:
Nom : 1.jpg
Affichages : 98
Taille : 140,9 Ko

D’où ma question, pourquoi l'objet recordset est-il invalide après la mise à jour de la liste déroulante?

Gdal