IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Erreur 13 incompatibilité de type


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2009
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 106
    Par défaut Erreur 13 incompatibilité de type
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 :
    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
    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 :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 138
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Posez une gestion d'erreur dans vos procédures vous aidera à identifier la cause et l'emploi de l'instruction erl vous donnera la position si peu que vous numérotiez chaque ligne de code.

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0

  3. #3
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 623
    Billets dans le blog
    67
    Par défaut
    Bonjour à tous,

    Si ton champ remplacement est du type numérique, alors il faut que Me.OpenArgs contienne un numérique aussi, mais apparemment c'est le cas...

    Sinon pour ta ligne en surbrillance pour le message d'erreur,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Sur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms("Choisir les accompagnements").Controls("ACCOMP" & I).Caption = DLookup("Accompagnement", "Accompagnements", "[AccompID]=" & I)
    Tu as peut-être une valeur nulle pour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DLookup("Accompagnement", "Accompagnements", "[AccompID]=" & I)
    Peut-être faudrait-il essayer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms("Choisir les accompagnements").Controls("ACCOMP" & I).Caption = nz(DLookup("Accompagnement", "Accompagnements", "[AccompID]=" & I),"")

    A+
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

Discussions similaires

  1. [A-07] Erreur n°13 : Incompatibilité de type
    Par Leimi dans le forum VBA Access
    Réponses: 2
    Dernier message: 17/03/2009, 11h15
  2. Erreur d'incompatibilité de types
    Par étoile de mer dans le forum Débuter
    Réponses: 27
    Dernier message: 01/06/2008, 17h14
  3. DLookup, Erreur d'incompatibilité de type (13)
    Par athos7776 dans le forum VBA Access
    Réponses: 5
    Dernier message: 08/08/2007, 17h25
  4. Erreur 13 : incompatibilité de type
    Par Donatelli dans le forum Access
    Réponses: 1
    Dernier message: 03/01/2007, 12h19
  5. [VBA-A] ADO - Erreur 13 Incompatibilité de Type
    Par db30 dans le forum VBA Access
    Réponses: 4
    Dernier message: 15/04/2006, 14h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo