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 3346 seulement avec des nombres décimales [AC-2010]


Sujet :

VBA Access

  1. #1
    Candidat au Club
    Femme Profil pro
    Responsable de Collection
    Inscrit en
    Février 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable de Collection
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Février 2018
    Messages : 10
    Points : 2
    Points
    2
    Par défaut Erreur 3346 seulement avec des nombres décimales
    Bonjour,

    Je viens vous demander de l'aide car après avoir écumé toutes les forums je ne trouve pas de solution.
    J'ai crée un fichier pour gérer mon stock et facturer mes clients, seul problème, je ne peux facturer que des entiers, dés que je mets un nombre décimale Visual Basic me renvoie l'erreur d'exécution 3346 (le nombre de valeurs de la requête doit coïncider avec le nombre de champs destination).
    Auriez vous une solution pour que je puisse commencer à travailler s'il vous plait.

    Je vous remercie beaucoup.


    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
    Private Sub ajouter_facture_Click()
    Dim ligne As Recordset: Dim base As Database
     
    Dim requet 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) <= Int(Qte_stock.Value)) Then
            total = Int(prix_unitaire.Value) * Int(qte_commandee.Value)
            total_achat = 0
     
            Set base = Application.CurrentDb
            requet = "INSERT INTO Detail_temp (ref_det,Designation,Couleur,Taille,Prix_unitaire_HT,qute_det,Prix_total_HT) VALUES ('" & ref_produit.Value & "','" & Designation.Value & "','" & DESIGN.Value & "'," & Taille.Value & "," & prix_unitaire.Value & "," & qte_commandee.Value & "," & total & ");"
     
            base.Execute requet
     
            Set ligne = base.OpenRecordset("SELECT Prix_total_HT FROM Detail_temp", dbOpenDynaset)
     
            ligne.MoveFirst
            Do
     
                total_achat = total_achat + Int(ligne.Fields("Prix_total_HT").Value)
                ligne.MoveNext
            Loop Until ligne.EOF
     
            total_commande.Value = total_achat
     
            ligne.Close
            base.Close
     
            Set ligne = Nothing
            Set base = Nothing
     
            DoCmd.Requery
        Else
        MsgBox "Le stock ne permet pas d'ajouter ce produit a la facture pour la quantite demandee"
        End If
     
    Else
    MsgBox "Pour ajouter un article a la commande, vous devez definir une quantite superieure a 0"
    End If
     
     
    End Sub

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonjour,

    Cela est dû à la configuration des nombres sur ton système. Ce qui fait que les "," indiquant les décimaux faussent ton script SQL.
    Il faut les remplacer les "," par des "." avec la fonction Replace dans les valeurs susceptibles d'être des nombres avec décimaux.
    Un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    requet = "INSERT INTO Detail_temp (ref_det,Designation,Couleur,Taille,Prix_unitaire_HT,qute_det,Prix_total_HT) VALUES ('" & ref_produit.Value & "','" & Designation.Value & "','" & DESIGN.Value & "'," & Taille.Value & "," & Replace(prix_unitaire.Value,',',".") & "," & Replace(qte_commandee.Value,',','.') & "," & Replace(total,',','.') & ");"
    Cordialement.
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  3. #3
    Candidat au Club
    Femme Profil pro
    Responsable de Collection
    Inscrit en
    Février 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable de Collection
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Février 2018
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Bonjour et merci pour votre réponse si rapide.
    Malheureusement je viens de tester le code et il me renvoie une erreur de syntaxe.

    D'ailleurs mon code fonctionne très bien avec 27,00 € mais dés que je mets 27,60 € il me renvoie l'erreur 3346.

    Ca fait 6 jours que je me colle sur le problème et je ne trouve pas cette foutue solution.

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    C'est bien sur cette ligne que le code se met en erreur ?

    Ajoute un Debug.Print avant l'exécution de l'insertion.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Debug.Print requet
    base.Execute requet
    Ensuite tu mets le code SQL obtenu dans une requête SQL et essaie de l'exécuter pour voir si cela produit encore l'erreur.

    Cordialement.
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  5. #5
    Candidat au Club
    Femme Profil pro
    Responsable de Collection
    Inscrit en
    Février 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable de Collection
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Février 2018
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    merci de me donner de votre temps...

    Le beug se fait maintenant sur la syntaxe..de l'insert INTO


    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
    Private Sub ajouter_facture_Click()
    Dim ligne As Recordset: Dim base As Database
     
    Dim requet 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) <= Int(Qte_stock.Value)) Then
            total = Int(prix_unitaire.Value) * Int(qte_commandee.Value)
            total_achat = 0
     
     
            Set base = Application.CurrentDb
            Debug.Print requet
            requet = "INSERT INTO Detail_temp (ref_det,Designation,Couleur,Taille,Prix_unitaire_HT,qute_det,Prix_total_HT) VALUES ('" & ref_produit.Value & "','" & Designation.Value & "','" & DESIGN.Value & "'," & Taille.Value & "," & Replace(prix_unitaire.Value,',',".") & "," & Replace(qte_commandee.Value,',','.') & "," & Replace(total,',','.') & ");"
     
            base.Execute requet
     
            Set ligne = base.OpenRecordset("SELECT Prix_total_HT FROM Detail_temp", dbOpenDynaset)
     
            ligne.MoveFirst
            Do
     
                total_achat = total_achat + Int(ligne.Fields("Prix_total_HT").Value)
                ligne.MoveNext
            Loop Until ligne.EOF
     
            total_commande.Value = total_achat
     
            ligne.Close
            base.Close
     
            Set ligne = Nothing
            Set base = Nothing
     
            DoCmd.Requery
        Else
        MsgBox "Le stock ne permet pas d'ajouter ce produit a la facture pour la quantite demandee"
        End If
     
    Else
    MsgBox "Pour ajouter un article a la commande, vous devez definir une quantite superieure a 0"
    End If
     
     
    End Sub

  6. #6
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    L'erreur apparaissait à quelle ligne la première fois ?

    Il faut inverser tes codes
    Faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            requet = "INSERT INTO Detail_temp (ref_det,Designation,Couleur,Taille,Prix_unitaire_HT,qute_det,Prix_total_HT) VALUES ('" & ref_produit.Value & "','" & Designation.Value & "','" & DESIGN.Value & "'," & Taille.Value & "," & Replace(prix_unitaire.Value,',',".") & "," & Replace(qte_commandee.Value,',','.') & "," & Replace(total,',','.') & ");"
            Debug.Print requet '  Cette ligne devrait imprimer ton code SQL dans la fenêtre d'exécution. Tu récupères le code et tu le colles dans une nouvelle requête pour vérifier si cela fonctionne !
            base.Execute requet
    au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            Debug.Print requet
            requet = "INSERT INTO Detail_temp (ref_det,Designation,Couleur,Taille,Prix_unitaire_HT,qute_det,Prix_total_HT) VALUES ('" & ref_produit.Value & "','" & Designation.Value & "','" & DESIGN.Value & "'," & Taille.Value & "," & Replace(prix_unitaire.Value,',',".") & "," & Replace(qte_commandee.Value,',','.') & "," & Replace(total,',','.') & ");"
     
            base.Execute requet
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  7. #7
    Candidat au Club
    Femme Profil pro
    Responsable de Collection
    Inscrit en
    Février 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable de Collection
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Février 2018
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    l'erreur apparaissait sur base.Execute requet

    J'ai fait ce que tu m'avais dit mais rien ne change.. l'erreur apparait toujours sur INSERT INTO

  8. #8
    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,

    mais dés que je mets 27,60 € ...
    => total et total_achat sont déclarés en Integer ! Aussi vérifie les types de ces champs dans tes tables.

    Quant aux déclarations
    Dim ligne As Recordset: Dim base As Database
    Dim requet As String: Dim total As Integer: Dim total_achat As Integer
    sont à changer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim ligne As DAO.Recordset, base As DAO.Database
    Dim requet As String, total As double,  total_achat As double
    et dans les requêtes SQL les nombres décimaux doivent être encadrés par des ' comme les chaines.

    CDLT
    "Always look at the bright side of life." Monty Python.

  9. #9
    Candidat au Club
    Femme Profil pro
    Responsable de Collection
    Inscrit en
    Février 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable de Collection
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Février 2018
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Je viens de faire les modifications dont vous m'avez parlé et je suis allée vérifier le type des champs dans les tables, ils sont en monétaires / décimales : 2

    il m'affiche toujours erreur 3346, le nombre de valeurs de la requête doit coincider avec le nombre de champs de destination.

    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
    Private Sub ajouter_facture_Click()
    Dim ligne As DAO.Recordset, base As DAO.Database
    Dim requet As String, total As Double, total_achat As Double
     
     
    If (IsNumeric(qte_commandee.Value) And qte_commandee.Value > 0 And ref_produit.Value <> "") Then
     
        If (Int(qte_commandee.Value) <= Int(Qte_stock.Value)) Then
            total = Int(prix_unitaire.Value) * Int(qte_commandee.Value)
            total_achat = 0
     
            Set base = Application.CurrentDb
            requet = "INSERT INTO Detail_temp (ref_det,Designation,Couleur,Taille,Prix_unitaire_HT,qute_det,Prix_total_HT) VALUES ('" & ref_produit.Value & "','" & Designation.Value & "','" & DESIGN.Value & "'," & Taille.Value & "," & prix_unitaire.Value & "," & qte_commandee.Value & ",' & total & ');"
     
            base.Execute requet
     
            Set ligne = base.OpenRecordset("SELECT Prix_total_HT FROM Detail_temp", dbOpenDynaset)
     
            ligne.MoveFirst
            Do
     
                total_achat = total_achat + Int(ligne.Fields("Prix_total_HT").Value)
                ligne.MoveNext
            Loop Until ligne.EOF
     
            total_commande.Value = total_achat
     
            ligne.Close
            base.Close
     
            Set ligne = Nothing
            Set base = Nothing
     
            DoCmd.Requery
        Else
        MsgBox "Le stock ne permet pas d'ajouter ce produit a la facture pour la quantite demandee"
        End If
     
    Else
    MsgBox "Pour ajouter un article a la commande, vous devez definir une quantite superieure a 0"
    End If
     
     
    End Sub

  10. #10
    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
    comme conseillé map madefemere dans le msg #6

    pose un debug.print requet apres la ligne requete = INSERT INTO ... et laisse le dans ton code par la suite.

    quand tu execute le code, le résultat de debug.print est affiché dans la fenetre execution.

    Fais-nous une copie de ce resultat.

    CDLT
    "Always look at the bright side of life." Monty Python.

  11. #11
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonsoir,
    Visual Basic me renvoie l'erreur d'exécution 3346 (le nombre de valeurs de la requête doit coïncider avec le nombre de champs destination).
    la virgule est un caractère réservé en SQL, c'est donc normal qu'un nombre avec décimales provoque une erreur. Il faut convertir ton montant en texte, puis faire un Replace de la virgule par un point.
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  12. #12
    Candidat au Club
    Femme Profil pro
    Responsable de Collection
    Inscrit en
    Février 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable de Collection
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Février 2018
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    J'ai déposé un débug.print requet, j'ai convertit mon montant en texte (seulement dans le total)

    Maintenant il me met que j'ai une erreur de syntaxe...

    J'en peux plus..

    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
    Private Sub ajouter_facture_Click()
    Dim ligne As Recordset: Dim base As Database
     
    Dim requet 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) <= Int(Qte_stock.Value)) Then
            total = Int(prix_unitaire.Value) * Int(qte_commandee.Value)
            total_achat = 0
     
            Set base = Application.CurrentDb
            requet = "INSERT INTO Detail_temp (ref_det,Designation,Couleur,Taille,Prix_unitaire_HT,qute_det,Prix_total_HT) VALUES "('" & ref_produit.Value & "','" & Designation.Value & "','" & DESIGN.Value & "'," & Taille.Value & "," & Replace(prix_unitaire.Value,',',".") & "," & Replace(qte_commandee.Value,',','.') & "," & Replace(total,',','.') & ");"
     
            Debug.Print requet
            base.Execute requet
     
            Set ligne = base.OpenRecordset("SELECT Prix_total_HT FROM Detail_temp", dbOpenDynaset)
     
            ligne.MoveFirst
            Do
     
                total_achat = total_achat + Int(ligne.Fields("Prix_total_HT").Value)
                ligne.MoveNext
            Loop Until ligne.EOF
     
            total_commande.Value = total_achat
     
            ligne.Close
            base.Close
     
            Set ligne = Nothing
            Set base = Nothing
     
            DoCmd.Requery
        Else
        MsgBox "Le stock ne permet pas d'ajouter ce produit a la facture pour la quantite demandee"
        End If
     
    Else
    MsgBox "Pour ajouter un article a la commande, vous devez definir une quantite superieure a 0"
    End If
     
     
    End Sub

  13. #13
    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
    Tu n'es pas loin mais encore un peu d'effort
    J'imagine que ta qté commandée est un entier, alors
    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
     
    ...
     Set base = Application.CurrentDb
            requet = "INSERT INTO Detail_temp (ref_det,Designation,Couleur,Taille,Prix_unitaire_HT,qute_det,Prix_total_HT) VALUES "('" & ref_produit.Value & "','" & Designation.Value & "','" & DESIGN.Value & "'," & Taille.Value & ",'" & Replace(prix_unitaire.Value,",",".") & "'," & nz(qte_commandee.Value, 0 ) & ",'" & Replace(total, ",",".") & "');"
     
            Debug.Print requet
            base.Execute requet
     
            Set ligne = base.OpenRecordset("SELECT Prix_total_HT FROM Detail_temp", dbOpenDynaset)
     
     total_achat = 0
     
            ligne.MoveFirst
            Do
     
                total_achat = total_achat + Cdbl(ligne.Fields("Prix_total_HT").Value)
                ligne.MoveNext
            Loop Until ligne.EOF
     
            total_commande.Value = total_achat
    CDLT
    "Always look at the bright side of life." Monty Python.

  14. #14
    Candidat au Club
    Femme Profil pro
    Responsable de Collection
    Inscrit en
    Février 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable de Collection
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Février 2018
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Merci de votre patience..

    Mais même avec beaucoup d'effort je n'arrive pas à trouver mon erreur, cela me rend limite obsessionnelle ACCESS depuis 10 jours...

    j'ai toujours une erreur de syntaxe..

    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
    Private Sub ajouter_facture_Click()
    Dim ligne As DAO.Recordset, base As DAO.Database
    Dim requet As String, total As Double, total_achat As Double
     
    If (IsNumeric(qte_commandee.Value) And qte_commandee.Value > 0 And ref_produit.Value <> "") Then
     
        If (Int(qte_commandee.Value) <= Int(Qte_stock.Value)) Then
            total = Int(prix_unitaire.Value) * Int(qte_commandee.Value)
            total_achat = 0
     
             Set base = Application.CurrentDb
            requet = "INSERT INTO Detail_temp (ref_det,Designation,Couleur,Taille,Prix_unitaire_HT,qute_det,Prix_total_HT) VALUES "('" & ref_produit.Value & "','" & Designation.Value & "','" & DESIGN.Value & "'," & Taille.Value & ",'" & Replace(prix_unitaire.Value,",",".") & "'," & nz(qte_commandee.Value, 0 ) & ",'" & Replace(total, ",",".") & "');"
     
            Debug.Print requet
            base.Execute requet
     
            Set ligne = base.OpenRecordset("SELECT Prix_total_HT FROM Detail_temp", dbOpenDynaset)
     
            total_achat = 0
     
            ligne.MoveFirst
            Do
     
                total_achat = total_achat + CDbl(ligne.Fields("Prix_total_HT").Value)
                ligne.MoveNext
            Loop Until ligne.EOF
     
            total_commande.Value = total_achat
     
            ligne.Close
            base.Close
     
            Set ligne = Nothing
            Set base = Nothing
     
            DoCmd.Requery
        Else
        MsgBox "Le stock ne permet pas d'ajouter ce produit a la facture pour la quantite demandee"
        End If
     
    Else
    MsgBox "Pour ajouter un article a la commande, vous devez definir une quantite superieure a 0"
    End If
     
     
    End Sub

  15. #15
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonjour,

    Est-ce que le code se lance ?
    S'il se lance, normalement l'erreur est levée à la ligne 15.
    Donc la ligne 14 est encore exécutée => Dans la fenêtre d'exécution(Tu fais Ctrl+G si elle ne s'affiche pas), tu as l'impression du code SQL.
    Peux-tu poster ce code SQL s'il te plait.

    Cordialement.
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  16. #16
    Candidat au Club
    Femme Profil pro
    Responsable de Collection
    Inscrit en
    Février 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable de Collection
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Février 2018
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Voilà ce que m'affiche la fenêtre d'execution :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO Detail_temp (ref_det,Designation,Couleur,Taille,Prix_unitaire_HT,qute_det,Prix_total_HT) VALUES ('HOASHJOY-1','HOODY ASH','JOY',1,27,6,1,27);
    INSERT INTO Detail_temp (ref_det,Designation,Couleur,Taille,Prix_unitaire_HT,qute_det,Prix_total_HT) VALUES ('TSNATUFOLK-1','TEESHIRT NATURAL','FOLK ',1,27,6,1,27);
    INSERT INTO Detail_temp (ref_det,Designation,Couleur,Taille,Prix_unitaire_HT,qute_det,Prix_total_HT) VALUES ('TSNATUFOLK-1','TEESHIRT NATURAL','FOLK ',1,27,6,1,27);

  17. #17
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Re-,

    J'ai essayé le code avec des double-quotes au lieu des "'" dans les Replace et cela va. essaie ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    requet = "INSERT INTO Detail_temp (ref_det,Designation,Couleur,Taille,Prix_unitaire_HT,qute_det,Prix_total_HT) VALUES" _
            & "('" & ref_produit.Value & "','" & Designation.Value & _
            "','" & DESIGN.Value & "','" & Replace(Taille.Value, ",", ".") & "'," & _
            Replace(Prix_unitaire.Value, ",", ".") & "," & Replace(qte_commandee.Value, ",", ".") & "," & Replace(total, ",", ".") & ");"
    En pièce jointe une bd très minimaliste.

    Cordialement.
    Fichiers attachés Fichiers attachés
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  18. #18
    Candidat au Club
    Femme Profil pro
    Responsable de Collection
    Inscrit en
    Février 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable de Collection
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Février 2018
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Un immense merci à vous tous.. ça y est je n'ai plus de message d'erreur, encore un petit souci dans détail-temp car du coup il m'insère 27 et non pas 27,60 € et du coup mon total est faux
    mais mon INSERT INTO ne me renvoie plus de message d'erreur !!!
    ci dessous le code, si ca peut aider quelqu'un par la suite..

    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 ajouter_facture_Click()
    Dim ligne As DAO.Recordset, base As DAO.Database
    Dim requet As String, total As Single, total_achat As Single
     
     
    If (IsNumeric(qte_commandee.Value) And qte_commandee.Value > 0 And ref_produit.Value <> "") Then
     
        If (Int(qte_commandee.Value) <= Int(Qte_stock.Value)) Then
            total = Int(prix_unitaire.Value) * Int(qte_commandee.Value)
            total_achat = 0
     
            Set base = Application.CurrentDb
            requet = "INSERT INTO Detail_temp (ref_det,Designation,Couleur,Taille,Prix_unitaire_HT,qute_det,Prix_total_HT) VALUES" _
            & "('" & ref_produit.Value & "','" & Designation.Value & _
            "','" & DESIGN.Value & "','" & Replace(Taille.Value, ",", ".") & "'," & _
            Replace(prix_unitaire.Value, ",", ".") & "," & Replace(qte_commandee.Value, ",", ".") & "," & Replace(total, ",", ".") & ");"
     
            Debug.Print requet
            base.Execute requet
     
     
            Set ligne = base.OpenRecordset("SELECT Prix_total_HT FROM Detail_temp", dbOpenDynaset)
     
            ligne.MoveFirst
            Do
     
                total_achat = total_achat + Int(ligne.Fields("Prix_total_HT").Value)
                ligne.MoveNext
            Loop Until ligne.EOF
     
            total_commande.Value = total_achat
     
            ligne.Close
            base.Close
     
            Set ligne = Nothing
            Set base = Nothing
     
            DoCmd.Requery
        Else
        MsgBox "Le stock ne permet pas d'ajouter ce produit a la facture pour la quantite demandee"
        End If
     
    Else
    MsgBox "Pour ajouter un article a la commande, vous devez definir une quantite superieure a 0"
    End If
     
     
     
    End Sub

  19. #19
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Int(prix_unitaire.Value) * Int(qte_commandee.Value)
    c'est normal car Int enlève les décimales.
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  20. #20
    Candidat au Club
    Femme Profil pro
    Responsable de Collection
    Inscrit en
    Février 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable de Collection
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Février 2018
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Voila le code finale et tout marche !! un immense merci à tous !
    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 ajouter_facture_Click()
    Dim ligne As Recordset: Dim base As Database
     
    Dim requet As String: Dim total As Double: Dim total_achat As Double
     
        If (IsNumeric(qte_commandee.Value) And qte_commandee.Value > 0 And ref_produit.Value <> "") Then
     
            If (Int(qte_commandee.Value) <= (Qte_stock.Value)) Then
            total = (prix_unitaire.Value) * Int(qte_commandee.Value)
            total_achat = 0
     
            Set base = Application.CurrentDb
            requet = "INSERT INTO Detail_temp (ref_det,Designation,Couleur,Taille,Prix_unitaire_HT,qute_det,Prix_total_HT) VALUES" _
            & "('" & ref_produit.Value & "','" & Designation.Value & _
            "','" & DESIGN.Value & "','" & Replace(Taille.Value, ",", ".") & "'," & _
            Replace(prix_unitaire.Value, ",", ".") & "," & Replace(qte_commandee.Value, ",", ".") & "," & Replace(total, ",", ".") & ");"
     
            Debug.Print requet
            base.Execute requet
     
            Set ligne = base.OpenRecordset("SELECT Prix_total_HT FROM Detail_temp", dbOpenDynaset)
     
            ligne.MoveFirst
            Do
     
                total_achat = total_achat + (ligne.Fields("Prix_total_HT").Value)
     
                ligne.MoveNext
            Loop Until ligne.EOF
     
            total_commande.Value = total_achat
     
            ligne.Close
            base.Close
     
            Set ligne = Nothing
            Set base = Nothing
     
            DoCmd.Requery
        Else
        MsgBox "Le stock ne permet pas d'ajouter ce produit a la facture pour la quantite demandee"
        End If
     
    Else
    MsgBox "Pour ajouter un article a la commande, vous devez definir une quantite superieure a 0"
    End If
     
     
     
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/09/2005, 02h04
  2. Problèmes avec des nombres... que faire ?
    Par sducos81 dans le forum C++
    Réponses: 6
    Dernier message: 21/07/2005, 13h46
  3. sum avec des nombres avec virgule
    Par Bruno2000 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 30/09/2004, 15h01
  4. Erreur sur IIS avec des cripts ASP
    Par Alin dans le forum ASP
    Réponses: 7
    Dernier message: 22/06/2004, 14h15
  5. Cripter avec des nombres premiers
    Par clovis dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 14/04/2004, 19h10

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