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

Access Discussion :

[VBA] Type incompatible dans le critère - Erreur d'execution 3464


Sujet :

Access

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 63
    Points : 43
    Points
    43
    Par défaut [VBA] Type incompatible dans le critère - Erreur d'execution 3464
    Bonjour à tous,

    Je suis débutant sur Access (version 2003).

    J'avais besoin d'aide pour créer une recherche multi-critère dans ma base de données, aide que j'ai pu trouvé avec le tuto de Caféine.

    Tout fonctionne tres bien (case à cocher, liste déroulantes, statistiques...), à l'exception de deux listes deroulantes.

    En effet, deux de mes listes sont liées à la table dont je fais référence; le type de données est dont de type 'numérique', contrairement au tutoriel de Caféine.

    Du coup, quand je sélectionn la case à cocher, le message d'erreur d'execution 3464 apparait.
    Le débogueur me renvoit à la ligne suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.lbl_stat.Caption = DCount("*", "tb_produit", SQLWhere) & " / " & DCount("*", "tb_produit")

    je ne sais pas à quel endroit indiquer que mes donées sont de types 'numériques' au lieu de 'texte' dans le tuto, ni comment le faire.

    Ce n'est peut etre pas la solution, mais si quelqu'un d'entre vous peut m'aider, il me retirera une gros épine du pied

    MERCI d'avance

  2. #2
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    Quand le debogueur s'arrête sur l'erreur peux-tu faire ceci ? :
    Affichage -> Fenêtre Exécution (ou Ctrl+G)
    Dans la fenêtre d'exécution taper ? SQLWhere puis touche <Entrée>
    Cela va écrire le contenu de SQLWhere en dessous.
    Copie et colle ce texte pour qu'on puisse le voir.

    Autre possibilité. deboguer la requête SQL complète :
    Taper ? SQL puis <Entrée>
    Copier le résultat dans le presse-parpier.

    Dans Access créer une nouvelle requête (Mode Création), n'ajouter aucune table.
    Clic-droit dans la requête au dessus de la grille -> Mode SQL.
    On doit voir SELECT ;
    Coller par dessus le contenu du presse-papier.
    Passer en mode d'affichage création et tenter d'exécuter la requête.
    Tu devrais avoir plus de précision sur l'erreur.

    A+

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 63
    Points : 43
    Points
    43
    Par défaut
    Bonjour,

    en suivant l'explication, j'ai pu obtenir le contenu SQLWhere dans la fenetre execution, qui est le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tb_produit!code_produit <> 0 And tb_produit!nom_chantier = ''
    mais ce code ne m'indique pas grand chose qui m'aiderait a resoudre mon probleme.

    En appliquant ta deuxième methode, LepZeppII, j'obtiens le message derrue suivant:

    " Instruction SQL non valide; 'DELETE', 'INSERT', 'PROCEDURE', 'SELECT' ou 'UPDATE' attendus "

    là non plus, je n'y comprend rien. J'espere que ces renseignements seront suffisant.

    Merci et A+

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 63
    Points : 43
    Points
    43
    Par défaut
    Pour info, voici le code complet où ca bloque, car il y a (enfin je pense), des problèmes de ", ou de ', ou de *:

    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
     
    Private Sub RefreshQuery()
    Dim SQL As String
    Dim SQLWhere As String
     
    SQL = "SELECT code_produit, nom_produit, quantite, prix_unitaire, date_commande, selection FROM tb_produit Where tb_produit!code_produit <> 0 "
     
    If Not Me.chk_nom_type_ouvrage Then
        SQL = SQL & "And tb_produit!nom_type_ouvrage = '" & Me.cmb_nom_type_ouvrage & "' "
    End If
    If Not Me.chk_nom_chantier Then
        SQL = SQL & "And tb_produit!nom_chantier = '" & Me.cmb_nom_chantier & " ' "
    End If
    If Not Me.chk_nom_lot Then
        SQL = SQL & "And tb_produit!nom_lot = '" & Me.cmb_nom_lot & "' "
    End If
    If Not Me.chk_nom_categorie Then
        SQL = SQL & "And tb_produit!nom_categorie = '" & Me.cmb_nom_categorie & "' "
    End If
     
    SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1))
     
    SQL = SQL & ";"
     
    Me.lbl_stat.Caption = DCount("*", "tb_produit", SQLWhere) & " / " & DCount("*", "tb_produit")
    Me.lst_resultat.RowSource = SQL
    Me.lst_resultat.Requery
     
    End Sub

  5. #5
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Que contient SQLWhere ? Les champs sont t'ils tous de type texte ?

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 63
    Points : 43
    Points
    43
    Par défaut
    SQLWhere contient le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tb_produit!code_produit <> 0 And tb_produit!nom_chantier = ''
    Pour ce qui est des champs, 'nom_chantier' et 'nom_categorie' sont de type numériques. il sont dans ma table 'tb_produit' par l'intermédiaire de deux listes de choix qui renvoient aux tables 'tb_chantier' et 'tb_categorie'.
    Si j'arrivais à les mettre en type texte, il n'y aurai plus ce problème d'incompatibilité, mais coment faire????

  7. #7
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonsoir,

    Concernant l'erreur " Instruction SQL non valide; 'DELETE', 'INSERT', 'PROCEDURE', 'SELECT' ou 'UPDATE' attendus "
    C'est parce que tu as copié/Collé dans une requête le contenu de SQLWhere alors que ja parlais de SQL.

    Tu aurais donc du coller dans la requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT code_produit, nom_produit, quantite, prix_unitaire, date_commande,
     selection 
    FROM tb_produit 
     
    Where tb_produit!code_produit <> 0 And tb_produit!nom_chantier = ''
    Il y a effectivement incompatibilité de type entre '' (texte) et une donnée numérique.

    Si nom_chantier est numérique cela suppose aussi que la colonne liée de la zone de liste cmb_nom_chantier est la colonne numérique.
    Si il n'y a aucune sélection dans la zone de liste, on n'ajoute pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    And tb_produit!nom_chantier = quelquechose
    dans la clause WHERE

    On peut tester la condition avec IsNull(Me.cmb_nom_chantier) ou Nz(Me.cmb_nom_chantier,0)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    If Not Me.chk_nom_chantier And Not IsNull(Me.cmb_nom_chantier) Then
        SQL = SQL & "And tb_produit!nom_chantier = " & Me.cmb_nom_chantier & " "
    End If
         OU
    If Not Me.chk_nom_chantier And Nz(Me.cmb_nom_chantier,0)<>0 Then
        SQL = SQL & "And tb_produit!nom_chantier = " & Me.cmb_nom_chantier & " "
    End If
    A+

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 63
    Points : 43
    Points
    43
    Par défaut
    Salut,

    merci pour l'info, ca marche du tonnerre. il manquait bien cette petite ligne

    Par contre ( je ne sais pas si je dois recréer un nouveau post mais bon... ) sur mes 4 case à cocher qui correspondent à 4 liste déroulantes, une d'entre elles n'actualise pas automatiquent la liste de resultats. Pour actualiser les résultats, je dois cocher la case a nouveau pour masquer ma liste de choix, puis la décocher. Etrange, vu que le code est identique pour toutes mes cases à cocher et toutes mes listes deroulantes.

    si un d'entre vous à le tuyau!!!!

  9. #9
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonsoir,

    juste un hypothèse:
    Aurai-tu changé le nom de la zone de liste ?

    Exemple
    .
    cmb_Liste1 , procédure évènementielle : Private Sub cmb_Liste1_BeforeUpdate(Cancel As Integer)
    renommé en
    cmb_Liste01 , procédure évènementielle : Private Sub cmb_Liste01_BeforeUpdate(Cancel As Integer)

    Or la Sub cmb_Liste01_BeforeUpdate n'existe pas.

    A+

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 63
    Points : 43
    Points
    43
    Par défaut
    Bonjour,

    oui, le problème venait d'une modification du nom de la liste, mais j'avais pu trouver le problème. Merci

    Comme uoi, à force de chercher, on apprend et on trouve

    Merci pour votre aide et votre réactivité, et encore bravo à la convivialité de ce forum

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 23/05/2014, 17h01
  2. [VBA] [SQL] Type incompatible dans le critère
    Par alex.a dans le forum Access
    Réponses: 13
    Dernier message: 19/01/2008, 11h19
  3. [VBA] [SQL] Type incompatible dans le critere
    Par mimi1 dans le forum VBA Access
    Réponses: 3
    Dernier message: 05/05/2006, 21h18
  4. [LG] Erreur de type incompatible dans assignment
    Par Tuxico dans le forum Langage
    Réponses: 4
    Dernier message: 03/12/2005, 21h06

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