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 :

Problème opérateur absent [AC-2016]


Sujet :

VBA Access

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2020
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Problème opérateur absent
    Bonjour,

    Nous sommes deux étudiants et nous avons un problème dans l'élaboration de notre projet Access. Un message d'erreur s'affiche quand on veut excuter la macro de notre formulaire qui est : " Erreur d'excecution '3075' : Erreur syntaxe (opérateur absent) dans l'expression " 'Yaourt a l'arome de vanille',2,5,2)".

    Nom : image.JPG
Affichages : 104
Taille : 18,3 Ko

    Voici le code de la requête en question :
    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
    Private Sub ajouter_facture_Click()
    Dim ligne As Recordset: Dim base As Database
    Dim requete As String: Dim total As Integer: Dim total_achat As Integer
     
    If (IsNumeric(qte_commandee.Value) And qte_commandee.Value > 0 And ref_produit.Value <> "") Then
     
        If (Int(qte_commandee.Value) <= (STOCK_PF.Value)) Then
     
            total = Int(COUTUNIT_PF.Value) * Int(qte_commandee.Value)
            total_achat = 0
     
            Set base = Application.CurrentDb
            requete = "INSERT INTO Detail_temp (ref_det, qute_det, Designation, Prix_unitaire_HT, Prix_total_HT) VALUES ('" & ref_produit.Value & "'," & qte_commandee.Value & ",'" & NOM_PF.Value & "'," & COUTUNIT_PF.Value & "," & total & ")"
     
            base.Execute requete
     
     
        Else
            MsgBox "La quantité demandée dépasse la valeur disponible en stock"
        End If
     
    Else
        MsgBox ("Il faut définir une reference et une quantité pour ajouter un article à la facture")
    End If
     
    End Sub

    Voici à quoi ressemble notre formulaire :

    Nom : aaa.JPG
Affichages : 87
Taille : 71,6 Ko



    Auriez-vous une idée du problème ?

    Dans l'attente de votre aide.

    Merci d'avance !

    Bien cordialement,

  2. #2
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 419
    Points : 2 178
    Points
    2 178
    Par défaut
    Bonjour,
    Vu qu'un texte est encadré par des apostrophe,il faut doubler l'apostrophe de ["l'arome"]

    VALUES ('" & replace(ref_produit.Value,"'","''") & "'

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2020
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Thumb down Voir le message
    Bonjour,
    Vu qu'un texte est encadré par des apostrophe,il faut doubler l'apostrophe de ["l'arome"]

    VALUES ('" & replace(ref_produit.Value,"'","''") & "'
    Merci pour votre réponse, nous pensons que vous nous avez aidé à régler le problème sauf que maintenant un autre apparait. Lorsqu'on prend la la ref produit A-VAN tout fonctionne mais lorsque nous prenons une autre ref produit par exemple la référence FRA ce message apparait :
    Nom : capture.JPG
Affichages : 84
Taille : 165,9 Ko


    Or notre code vba n'est pas différent, comme vous pouvez le constater ci dessous :

    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
    Private Sub ajouter_facture_Click()
    Dim ligne As Recordset: Dim base As Database
    Dim requete As String: Dim total As Integer: Dim total_achat As Integer
     
    If (IsNumeric(qte_commandee.Value) And qte_commandee.Value > 0 And CODE_PF.Value <> "") Then
     
        If (Int(qte_commandee.Value) <= (STOCK_PF.Value)) Then
     
            total = Int(COUTUNIT_PF.Value) * Int(qte_commandee.Value)
            total_achat = 0
     
            Set base = Application.CurrentDb
            requete = "INSERT INTO Detail_temp (ref_det, qute_det, Designation, Prix_unitaire_HT, Prix_total_HT) VALUES ('" & Replace(CODE_PF.Value, "'", "''") & "'," & qte_commandee.Value & ",'" & NOM_PF.Value & "'," & COUTUNIT_PF.Value & ",'" & total & "')"
     
            base.Execute requete
     
     
        Else
            MsgBox "La quantité demandée dépasse la valeur disponible en stock"
        End If
     
    Else
        MsgBox ("Il faut définir une reference et une quantité pour ajouter un article à la facture")
    End If
     
    End Sub
    Une autre idée ?

  4. #4
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 878
    Points : 4 754
    Points
    4 754
    Par défaut
    Bonjour,
    sans doute quelques valeurs nulles qui perturbent le fonctionnement de la requete
    Utilisez la fonction NZ(). voir l'aide Access
    Votre fonction ré-écrite
    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
    Private Sub ajouter_facture_Click()
    Dim ligne As DAO.Recordset, base As DAO.Database
    Dim requete As String, total As Integer, total_achat As Integer
     
    If (IsNumeric(qte_commandee) And qte_commandee > 0 And nz(CODE_PF) <> "") Then
     
        If Int(qte_commandee) <= STOCK_PF Then
            total = Int(nz(COUTUNIT_PF,0)) * Int(qte_commandee)
            total_achat = 0
     
            Set base = Application.CurrentDb
            requete = "INSERT INTO Detail_temp (ref_det, qute_det, Designation, Prix_unitaire_HT, Prix_total_HT)" _
    & " VALUES ('" & Replace(CODE_PF, "'", "''") & "'," & qte_commandee & ",'" & nz(NOM_PF) & "'," _
     & nz(COUTUNIT_PF,0) & ", " & total & ")"
     
            base.Execute requete
        Else
            MsgBox "La quantité demandée dépasse la valeur disponible en stock"
        End If
     
    Else
        MsgBox ("Il faut définir une reference et une quantité pour ajouter un article à la facture")
    End If
    A essayer
    "Always look at the bright side of life." Monty Python.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2020
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Nous avons essayé malheureusement on rencontre le même problème

    Après quelque recherche on a remarqué que le problème viendrait peut être des Nom des produits. Je vous explique, on s'est dit que si c'est un problème de nombre de valeurs de la requête qui ne coïncide pas avec les nombre de champs de destination, on a qu'à supprimer un champs de destination. Donc ici on a supprimé " & total & ". Tous les produits fonctionne sauf 2 qui sont A-VAN et SCR pour les mêmes motifs que ceux qui ne fonctionnaient pas lorsque " & total & " était présent. Pour que vous ayez une vue un peu plus claire voici notre tables des produits finis :
    Nom : 1.JPG
Affichages : 85
Taille : 112,4 Ko

    Donc avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Set base = Application.CurrentDb
            requete = "INSERT INTO Detail_temp (ref_det, qute_det, Designation, Prix_unitaire_HT, Prix_total_HT)" _
    & " VALUES ('" & Replace(ref_produit, "'", "''") & "'," & qte_commandee & ",'" & Nz(NOM_PF) & "'," _
     & Nz(COUTUNIT_PF, 0) & ")"
     
            base.Execute requete
    Les produits : M-FRA, M-PCH et NATURE fonctionnent
    mais les produits A-VAN et SCR ne fonctionnent pas pour le motif suivant :
    Nom : 2.JPG
Affichages : 77
Taille : 115,3 Ko

    Et lorsqu'on remet " & total & " qui donne donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Set base = Application.CurrentDb
            requete = "INSERT INTO Detail_temp (ref_det, qute_det, Designation, Prix_unitaire_HT, Prix_total_HT)" _
    & " VALUES ('" & Replace(ref_produit, "'", "''") & "'," & qte_commandee & ",'" & Nz(NOM_PF) & "'," _
     & Nz(COUTUNIT_PF, 0) & "," & total & ")"
     
            base.Execute requete
    ce sont les produits A-VAN et SCR qui fonctionnent et les autres ne fonctionnent plus ..

    Quel est le crack qui va réussir à nous aider ?

    Merci d'avance à ceux qui auront lu tout ça !!

  6. #6
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 878
    Points : 4 754
    Points
    4 754
    Par défaut
    placez la ligne juste avant la ligne cela affichera dans la fenetre Execution du VBE le contenu de 'requete'
    "Always look at the bright side of life." Monty Python.

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2020
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par micniv Voir le message
    placez la ligne juste avant la ligne cela affichera dans la fenetre Execution du VBE le contenu de 'requete'
    MERCI !!! On a trouvé le problème. Il vient du prix, en effet lorsque le prix est rond (ex : 4 euros) ça fonctionne par contre quand il y a un prix à virgule ça ne fonctionne pas. Il considère la virgule comme un argument en plus.
    Donc ici c'est la vanille le prix est à 7 euros tout va bien :
    Nom : vanille.JPG
Affichages : 77
Taille : 50,8 Ko

    Et là la fraise à 3,62 euros :
    Nom : fraise.JPG
Affichages : 79
Taille : 28,8 Ko

    Que devons nous faire pour ne pas devoir mettre que des chiffres ronds sans qu'il considère la virgule de la décimale comme un argument en plus dans le code que vous nous avez donnés :
    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
     
    Private Sub ajouter_facture_Click()
    Dim ligne As DAO.Recordset, base As DAO.Database
    Dim requete As String, total As Integer, total_achat As Integer
     
    If (IsNumeric(qte_commandee) And qte_commandee > 0 And Nz(ref_produit) <> "") Then
     
        If Int(qte_commandee) <= STOCK_PF Then
            total = Int(Nz(COUTUNIT_PF, 0)) * Int(qte_commandee)
            total_achat = 0
     
            Set base = Application.CurrentDb
            requete = "INSERT INTO Detail_temp (ref_det, qute_det, Designation, Prix_unitaire_HT, Prix_total_HT)" _
    & " VALUES ('" & Replace(ref_produit, "'", "''") & "'," & qte_commandee & ",'" & Nz(NOM_PF) & "'," _
     & Nz(COUTUNIT_PF, 0) & ", " & total & ")"
     
      Debug.Print requete
      base.Execute requete
     
        Else
            MsgBox "La quantité demandée dépasse la valeur disponible en stock"
        End If
     
    Else
        MsgBox ("Il faut définir une reference et une quantité pour ajouter un article à la facture")
    End If
    End Sub

  8. #8
    Membre éprouvé
    Homme Profil pro
    Développeur .net - Office - Quadiant
    Inscrit en
    Février 2020
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur .net - Office - Quadiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2020
    Messages : 582
    Points : 1 073
    Points
    1 073
    Par défaut
    Bonjour,

    Remplace la virgule des montants par un . pour que cela passe.

    ONTAYG

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2020
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par ONTAYG Voir le message
    Bonjour,

    Remplace la virgule des montants par un . pour que cela passe.

    ONTAYG
    Bonjour,

    On a essayé mais le problème c'est que les prix dans la table "produits" on les a mis en format monétaire, et même quand on les change en format numérique on ne peut pas mettre un . à la place de la virgule.

    Cordialement,

  10. #10
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 419
    Points : 2 178
    Points
    2 178

  11. #11
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2020
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    MERCI A TOUS !!

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

Discussions similaires

  1. [AC-2016] Problème d'erreur de syntaxe (opérateur absent)
    Par Jiben59 dans le forum VBA Access
    Réponses: 3
    Dernier message: 01/03/2018, 18h34
  2. Problème Opérateur absent
    Par Beaudelicius dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 07/03/2012, 15h06
  3. erreur de syntaxe (opérateur absent)
    Par rcan7412 dans le forum Access
    Réponses: 1
    Dernier message: 28/03/2007, 17h52
  4. [Erreur de syntaxe (opérateur absent)] requête select
    Par wiss20000 dans le forum Requêtes et SQL.
    Réponses: 13
    Dernier message: 19/03/2007, 14h55
  5. Réponses: 9
    Dernier message: 12/07/2006, 13h42

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