Bonjour,
Lorsque je veux ouvrir mon formulaire [Choisir les accompagnements], j’obtiens le message d’erreur suivant :
Erreur d’exécution ‘13’ :
Incompatibilité de type
J’essaie de trouver le problème, sans toutefois y parvenir, si vous pourriez m’aider, ce serait super.
NOTES : Source : [Produits-Accompagnements Requête]
Sur ce formulaire on y trouve 30 boutons commandes « ACCOMP1 » à « ACCOMP30 », voici l’évènement sur clic :
1 2 3
| Private Sub ACCOMP1_Click()
DoCmd.OpenForm "Choisir les remplacements", acNormal, OpenArgs:=1 ‘Ce formulaire [Choisir les remplacements] a pour but de sélectionner un produit de remplacement pour un accompagnement spécifique, je l’explique en détails avec le code un peu plus loin dans cette discussion.’
End Sub |
Chacun des boutons ont exactement le même code, jusqu’au 30ième.
À la fin du formulaire j’ai ce code qui me donne le message d’erreur mentionné ci-dessus :
1 2 3 4 5
| Private Sub Form_Open(Cancel As Integer)
For I = 1 To 30
Forms("Choisir les accompagnements").Controls("ACCOMP" & I).Caption = DLookup("Accompagnement", "Accompagnements", "[AccompID]=" & I)
Next I
End Sub |
Le débogage met en surbrillance la section qui débute par « Forms »
Voici les champs de ma table [Accompagnements] ainsi que leurs types :
Nom du champ Type de données
AccompID NuméroAuto (Entier long, Incrément, Indexé=Non, Aligner le texte=Général)
Accompagnement Texte (Taille du champ=55, Masque de saisie=>Cx55, Null interdit=Non, Chaine vide autorisée=Oui, Indexé=Oui avec doublons, Compression Unicode=Oui, Mode IME=Aucun contrôle, Mode de formulation IME=Aucun)
memPropertyPhotoLink Memo ( Null interdit=Non, Chaine vide autorisée=Oui, Indexé=Non, Compression Unicode=Oui, Mode IME=Aucun contrôle, Mode de formulation IME=Aucun, Format du texte= Texte brut, Aligner le texte=Général)
[Produits-Accompagnements Requête] :
Basé sur la table [Accompagnements] avec les 3 champs
Formulaire [Choisir les remplacements] :
Sur ce formulaire on y trouve 30 boutons commandes « REMPLA1 » à « REMPLA30 », voici l’évènement sur clic :
1 2 3
| Private Sub REMPLA1_Click()
DoCmd.OpenForm "Détails commande2", acNormal, OpenArgs:=Me!Attaché & ";" & Me!REMPLA1.Tag Ce formulaire [Détails commande2] a pour but de retrouver les remplacements pour un accompagnement spécifique, vu que mon erreur ne provient pas de ce formulaire, car il ouvre sans problème, je nélaborerai pas plus en détails car il est très volumineux.
End Sub |
NOTES : Source : [Produits-Remplacements Requête]
Basé sur la table [Remplacements] avec les 4 champs
Plus de détails :
Ce formulaire [Choisir les remplacements] a pour but de sélectionner un produit de remplacement pour un accompagnement spécifique, voici le code sur chargement :
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
| Private Sub Form_Load()
On Error GoTo ErrHand
Dim rs As DAO.Recordset
Dim lngLoop As Long
Dim strSQL As String
If IsNull(Me.OpenArgs) = False Then
Me!Attaché = Me.OpenArgs
strSQL = "SELECT DISTINCTROW Remplacements.RemplaID, Remplacements.Remplacement " & _
"FROM Produits INNER JOIN Remplacements " & _
"ON Produits.Remplacement = Remplacements.RemplaID " & _
"WHERE Produits.Remplacement = " & Me.OpenArgs & " " & _
"ORDER BY Remplacements.RemplaID"
Set rs = CurrentDb.OpenRecordset(strSQL)
lngLoop = 0
Do While rs.EOF = False
lngLoop = lngLoop + 1
If lngLoop > 30 Then
MsgBox "Désolé: Il ne peut avoir plus de 30 remplacements.", vbCritical + vbYesNo
Exit Do
End If
With Me.Controls("REMPLA" & lngLoop)
.Caption = rs!Remplacement
.Tag = rs!RemplaID
.Visible = True
End With
rs.MoveNext
Loop
End If
lngLoop = lngLoop + 1
Do While lngLoop <= 30
Me.Controls("REMPLA" & lngLoop).Visible = False
lngLoop = lngLoop + 1
Loop
Cleanup:
On Error Resume Next
rs.Close
Set rs = Nothing
Exit Sub
ErrHand:
MsgBox Err.Number & ": " & Err.Description
Resume Cleanup
End Sub |
J’ai créé une requête vide et je l’ai placé en Vue SQL pour vérifier le SQL de mon formulaire comme ceci :
SELECT DISTINCTROW Remplacements.RemplaID, Remplacements.Remplacement FROM Produits INNER JOIN Remplacements ON Produits.Remplacement = Remplacements.RemplaID WHERE Produits.Remplacement = " & Me.OpenArgs & " ORDER BY Remplacements.RemplaID
Car je soupçonne que c’est cette section qui me génère cette erreur, mais je n’ai pas trouvé de solution jusqu’à présent.
J’ai également eu un message d’erreur en Vue SQL quelque peu différent mais qui citait :
« Type de données incompatible dans l’expression du critère »
Voici les champs de ma table [Remplacemements] ainsi que leurs types :
Nom du champ Type de données
RemplaID NuméroAuto (Entier long, Incrément, Indexé=Non, Aligner le texte=Général)
Remplacement Texte (Taille du champ=55, Masque de saisie=>Cx55, Null interdit=Non, Chaine vide autorisée=Oui, Indexé=Oui avec doublons, Compression Unicode=Oui, Mode IME=Aucun contrôle, Mode de formulation IME=Aucun)
memPropertyPhotoLink Memo ( Null interdit=Non, Chaine vide autorisée=Oui, Indexé=Non, Compression Unicode=Oui, Mode IME=Aucun contrôle, Mode de formulation IME=Aucun, Format du texte= Texte brut, Aligner le texte=Général)
AttachéRemplacement Numérique (Taille du champ=Entier long, Incrément, Null Interdit=Non, Indexé=Non, Aligner le texte=Général)
Et pour terminer, les champs « Accompagnement » et « Remplacement » sont sur la table [Produits], en voici les détails :
Nom du champ Type de données
Accompagnement Numérique (Entier long,Décimales= Auto, Null interdit-Non, Indexé=Oui avec doublons, Aligner le texte=Général)
Remplacement Numérique (Entier long,Décimales= Auto, Null interdit-Non, Indexé=Oui avec doublons, Aligner le texte=Général)
Si de plus amples informations vous sont nécessaires, n’hésitez pas à me contacter, il me fera plaisir de vous répondre rapidement.
Claude du Québec.
Partager