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

  1. #1
    Membre du Club
    Homme Profil pro
    Logisitique
    Inscrit en
    janvier 2018
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : Logisitique

    Informations forums :
    Inscription : janvier 2018
    Messages : 89
    Points : 51
    Points
    51

    Par défaut compatibilité access 2010 et 365

    Bonjour,

    sur une base de donnée créée avec access 2010, en l'utilisant sur une version 365, j'ai une requête insert to qui ne fonctionne plus..??

    Message d'erreur: le nombre de valeur de la requête doit coïncider avec le nombre de champs destination. alors qu'en version 2010 cela fonctionne parfaitement...

    Erreur normale..???

  2. #2
    Expert éminent
    Avatar de tee_grandbois
    Homme Profil pro
    retraité mais encore activé
    Inscrit en
    novembre 2004
    Messages
    4 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité mais encore activé

    Informations forums :
    Inscription : novembre 2004
    Messages : 4 368
    Points : 7 468
    Points
    7 468

    Par défaut

    bonsoir,
    le nombre de valeur de la requête doit coïncider avec le nombre de champs destination
    un champ à alimenter, une valeur ajoutée: c'est la règle.
    cela pourrait être normal si 365 est plus strict sur le respect de la syntaxe que 2010,
    ... ou bien l'INSERT INTO contient l'alimentation d'un numéro auto qui ne passe plus sur 365 (bien que, en général, on n'alimente jamais ce type de champ)
    encore faut-il montrer le SQL et la structure de la table concernés
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...

  3. #3
    Membre du Club
    Homme Profil pro
    Logisitique
    Inscrit en
    janvier 2018
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : Logisitique

    Informations forums :
    Inscription : janvier 2018
    Messages : 89
    Points : 51
    Points
    51

    Par défaut

    Voici le code, en rouge la requête qui pose problème et ci-dessous l'organisation de la table:

    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    Private Sub Valider_Comptoir_Click()
    
    Dim base As Database: Dim requete, Just1 As String: Dim ligne As Recordset
    
    'Configuration du numéro automatique, clé primaire de la table T_Transactions
    Me.N_Transaction = AutoNumber("T_Transactions", "num_com", "[YYYY].", 6)
    
    
    
    'Requete inscription du mouvement des points dans la T_MvtPoints
                    Just1 = "Transaction OUT Magasin"
      
                     Set base = Application.CurrentDb
                    requete = "INSERT INTO T_MvtPoints (Matricule,Nom, Prenom, SoldeAnt, QuOUT, Motif, Ref) VALUES ('" & FTMatricule & "', '" & FTNom & "',  '" & FTPrenom & "', " & FTSolde & ", " & Texte60 & ",'" & Just1 & "', " & N_Transaction.Value & " )"
                        base.Execute requete
                     ' test sans ajouter le nouveau solde: , NewSolde     et  , " & txtSoldeRestant & "
                                         
    'Variables pour inscrire le détail de la commande et réaliser la mise à jour des stocks
      Dim Ref_produit, Taille_produit, Matricule_produit, Justifi, justifi2, Memo, CodeArt As String
      Dim qte_produit, Point_produit, Total_produit, Euros_produit, EurosTotal_produit As Integer
     
      
    
    'Requete pour alimenter la table T_Transactions
      Set base = Application.CurrentDb
    
      requete = "INSERT INTO T_Transactions ( num_com, Matricule_Trans, Nom_Trans, Prenom_Trans, Montant1_Trans, Montant2_Trans,  Justification) VALUES ('" & N_Transaction.Value & "', '" & FTMatricule.Value & "', '" & FTNom.Value & "', '" & FTPrenom.Value & "', " & Int(totalCpt.Value) & ", " & Int(totalCde.Value) & ", '" & Just1 & "')"
    
      base.Execute requete
      
      
      
                                         '1°Traitement de la transaction comptoir stock
    
    'Condition afin de vérifier si une commande comptoir à été exécutée
      If (Int(totalCpt.Value) > 0) Then
     
    
    'SQL d'insertion des Champs en Cde comptoir venant de la table temporaire vers la table T_Detail_Transactions et T_Stock
      Set ligne = base.OpenRecordset("SELECT* FROM T_DetailComptoir_Temp", dbOpenDynaset)
      ligne.MoveFirst
        'Boucle DO permettant d'instancier chaque champ de la table temporaire afin de les enregistrer avec requetes respectives dans la T-Detail_Transactions et T_Stock
      Do
      Ref_produit = ligne.Fields("ArtComptoir_Det").Value
      Taille_produit = ligne.Fields("tailleComptoir_Det").Value
      CodeArt = ligne.Fields("CodeArticle").Value
      qte_produit = ligne.Fields("QUComptoir_det").Value
      Point_produit = ligne.Fields("PointComptoir_Det").Value
      Total_produit = ligne.Fields("PointTotalComptoir_Det").Value
      Matricule_produit = ligne.Fields("Matricule_Det").Value
      
      Justifi = "Cde comptoir"
      
    'Requete N°1 dans la boucle DO pour alimenter les champs dans la table T_Detail_Transactions
      requete = "INSERT INTO T_Detail_Transactions (Com_Det, Code_Det, Ref_Det, Taille_Det, qute_Det, Points_Det, TotalPoints_Det, Matricule_Det, Justification) VALUES (" & N_Transaction.Value & ", '" & CodeArt & "','" & Ref_produit & "', '" & Taille_produit & "', " & qte_produit & ", " & Point_produit & ", " & Total_produit & ", '" & Matricule_produit & "', '" & Justifi & "')"
      base.Execute requete
    'Requete N°2 dans la boucle DO por effectuer la mise à jour des stocks de la table T_Stock
    requete = "UPDATE T_Stock SET T_Stock.QUANTITE = [QUANTITE]- " & Int(qte_produit) & " WHERE (((T_Stock.Article)= '" & Ref_produit & "') and ((T_Stock.Taille)= '" & Taille_produit & "'));"
      base.Execute requete
      'requete = "UPDATE T_Stock SET T_Stock.QUANTITE = [QUANTITE]- " & Int(qte_produit) & " WHERE (((T_Stock.Article)= '" & FCOPIEArticle & "') and ((T_Stock.Taille)= '" & FTaille & "'));"
     ' base.Execute requete
        'Boucle à la ligne suivante jusque EOF (dernière ligne)
      ligne.MoveNext
      Loop Until ligne.EOF
    
    
    'Requete de mise à jour des points de la table Personnel
      requete = "UPDATE Personnel SET Personnel.Solde_Points_Pers = [Solde_Points_Pers]- " & Int(totalCpt) & " WHERE Matricule_Pers = '" & FTMatricule & "'"
      base.Execute requete
      
    Me.Critere = Justifi
    'PRINT DU DOCUMENT DE TRANSACTION COMPTOIR
    DoCmd.OpenReport "E_facturation comptoir bis", acViewNormal
    
    Else
    MsgBox "Vous n'avez pas effectué de Transaction au Comptoir"
    End If
    
    
    
                                            '2° Traitement de la commande externe
    
    'condition afin de vérifier si une commande Externe à été exécutée
      If (Int(totalCde.Value) > 0) Then
    
    
    'SQL insertion des Articles commandés dans la table T_Detail_Transactions
    Set ligne = base.OpenRecordset("SELECT* FROM T_DetailCde_Temp", dbOpenDynaset)
    ligne.MoveFirst
        'Boucle DO  LOOP afin d'enregistrer chaque article de la table temporaire
     Do
     Ref_produit = ligne.Fields("ArtCde_Det").Value
     Taille_produit = ligne.Fields("TailleCde_Det").Value
     CodeArt = ligne.Fields("CodeArticle").Value
     qte_produit = ligne.Fields("QUCde_Det").Value
     Point_produit = ligne.Fields("PointCde_Det").Value
     Total_produit = ligne.Fields("PointTotalCde_Det").Value
     Euros_produit = ligne.Fields("PrixCde_Det").Value
     EurosTotal_produit = ligne.Fields("PrixtotalCde_Det").Value
     Matricule_produit = ligne.Fields("Matricule_Det").Value
     
     Justifi = "Cde Externe"
     
     
    'Requete N°1 dans la boucle DO pour alimenter la table T_Detail_Transactions
     requete = "INSERT INTO T_Detail_Transactions (Com_Det, Code_Det, Ref_Det, Taille_Det, qute_Det, Points_Det, TotalPoints_Det, Matricule_Det, Justification) VALUES (" & N_Transaction.Value & ", '" & CodeArt & "','" & Ref_produit & "', '" & Taille_produit & "', " & qte_produit & ", " & Point_produit & ", " & Total_produit & ", '" & Matricule_produit & "', '" & Justifi & "')"
      base.Execute requete
    'Boucle à la ligne suivante jusque EOF (dernière ligne)
    ligne.MoveNext
    Loop Until ligne.EOF
    
    'Requete N°2 de mise à jour des points de la table Personnel
    requete = "UPDATE Personnel SET Personnel.Solde_Points_Pers = [Solde_Points_Pers]- " & Int(totalCde) & " WHERE Matricule_Pers = '" & FTMatricule & "'"
    base.Execute requete
    
    'Requete N°3 ajout dans T_Budget
    
     Memo = "Cde Externe individuelle"
     
      requete = "INSERT INTO T_Budget (OUT_Budget, Justification_Budget, NComm_Budget, SoldePrecedent_Budget ) VALUES (" & BudgetConso.Value & ", '" & Memo & "'," & N_Transaction.Value & ", " & BudgetDispo.Value & ")"
      base.Execute requete
    
    ligne.Close
    base.Close
    Set ligne = Nothing
    Set base = Nothing
    
    Me.Critere = Justifi
    'PRINT DU DOCUMENT DE COMMANDE EXTERNE
    DoCmd.OpenReport "E_facturation Cde externe bis", acViewNormal
    
    Else
    MsgBox "Vous n'avez pas effectué de Commande externe"
    
    End If
    
    
    'Remise à jour des valeurs pour la prochaine transaction
    FTMatricule.Value = ""
    Rech_Article.Value = ""
    Rech_Taille.Value = ""
    FTNom.Value = ""
    FTPrenom.Value = ""
    FTGrade.Value = ""
    FTService.Value = ""
    FTStock.Value = 0
    FTPoints.Value = 0
    FTEuros.Value = 0
    totalCpt.Value = 0
    totalCde.Value = 0
    FTSolde.Value = 0
    BudgetDispo.Value = 0
    BudgetConso.Value = 0
    QuotaMax.Value = ""
    DistribMax.Value = ""
    ConsoAn.Value = 0
    
    purger_table
    
    DoCmd.Requery
    
    End Sub
    Nom : 2019-05-13_163807.png
Affichages : 79
Taille : 27,7 Ko

  4. #4
    Membre du Club
    Homme Profil pro
    Logisitique
    Inscrit en
    janvier 2018
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : Logisitique

    Informations forums :
    Inscription : janvier 2018
    Messages : 89
    Points : 51
    Points
    51

    Par défaut

    apparemment problème à cause de mon numéro automatique, il y à t'il un moyen de contourner...?

  5. #5
    Rédacteur/Modérateur
    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2004
    Messages
    6 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : août 2004
    Messages : 6 205
    Points : 12 926
    Points
    12 926
    Billets dans le blog
    11

    Par défaut

    Bonsoir à tous,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    requete = "INSERT INTO T_Detail_Transactions (Com_Det, Code_Det, Ref_Det, Taille_Det, qute_Det, Points_Det, TotalPoints_Det, Matricule_Det, Justification) VALUES (" & N_Transaction.Value & ", '" & CodeArt & "','" & Ref_produit & "', '" & Taille_produit & "', " & qte_produit & ", " & Point_produit & ", " & Total_produit & ", '" & Matricule_produit & "', '" & Justifi & "')"
      base.Execute requete
    '
    Si qte_produit, Point_produit ou Total_produit contiennent des nombres à virgules, alors il va y avoir une confusion avec les virgules séparant les valeurs dans :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    VALUES (" & N_Transaction.Value & ", '" & CodeArt & "','" & Ref_produit & "', '" & Taille_produit & "', " & qte_produit & ", " & Point_produit & ", " & Total_produit & ", '" & Matricule_produit & "', '" & Justifi & "')"

    Il faudrait tenter quelque chose comme ceci, pour remplacer les virgules par des points par exemple dans Total_produit :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    VALUES (" & N_Transaction.Value & ", '" & CodeArt & "','" & Ref_produit & "', '" & Taille_produit & "', " & qte_produit & ", " & Point_produit & ", " & Replace(Total_produit,",",".") & ", '" & Matricule_produit & "', '" & Justifi & "')"

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information en abondance, plein de bonnes choses à consulter sans modération

    Si vous souhaitez mettre en place une gestion de planning, une gestion de stock, de ventes/achats ou tout autre application Access, je peux vous proposer mes services.
    Pour cela n'hésitez pas à me contacter par courriel ou mp.


    Simple comme bonjour et merci

    Mes tutoriels et contributions sur ma page personnelle.

  6. #6
    Expert éminent
    Avatar de tee_grandbois
    Homme Profil pro
    retraité mais encore activé
    Inscrit en
    novembre 2004
    Messages
    4 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité mais encore activé

    Informations forums :
    Inscription : novembre 2004
    Messages : 4 368
    Points : 7 468
    Points
    7 468

    Par défaut

    bonsoir User et trouvaille,
    Il faudrait tenter quelque chose comme ceci, pour remplacer les virgules par des points par exemple dans Total_produit :
    ou mettre des apostrophes autour de toutes les valeurs car dans une instruction INSERT ... VALUES c'est fortement conseillé et c'est autorisé pour tous les types de valeurs.
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...

  7. #7
    Rédacteur/Modérateur
    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2004
    Messages
    6 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : août 2004
    Messages : 6 205
    Points : 12 926
    Points
    12 926
    Billets dans le blog
    11

    Par défaut

    Citation Envoyé par tee_grandbois Voir le message
    bonsoir User et trouvaille,

    ou mettre des apostrophes autour de toutes les valeurs car dans une instruction INSERT ... VALUES c'est fortement conseillé et c'est autorisé pour tous les types de valeurs.
    Bien vu, je le garde en mémoire

    Je pensais que ça nécessitait de formater les dates entre autre.

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information en abondance, plein de bonnes choses à consulter sans modération

    Si vous souhaitez mettre en place une gestion de planning, une gestion de stock, de ventes/achats ou tout autre application Access, je peux vous proposer mes services.
    Pour cela n'hésitez pas à me contacter par courriel ou mp.


    Simple comme bonjour et merci

    Mes tutoriels et contributions sur ma page personnelle.

  8. #8
    Expert éminent
    Avatar de tee_grandbois
    Homme Profil pro
    retraité mais encore activé
    Inscrit en
    novembre 2004
    Messages
    4 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité mais encore activé

    Informations forums :
    Inscription : novembre 2004
    Messages : 4 368
    Points : 7 468
    Points
    7 468

    Par défaut

    pour être encore plus "secure", on peut remplacer l'apostrophe par les guillemets doublés "", caractère qui est plus rare dans les champs textes francophones que l'apostrophe.
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...

  9. #9
    Rédacteur/Modérateur
    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2004
    Messages
    6 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : août 2004
    Messages : 6 205
    Points : 12 926
    Points
    12 926
    Billets dans le blog
    11

    Par défaut

    Citation Envoyé par tee_grandbois Voir le message
    pour être encore plus "secure", on peut remplacer l'apostrophe par les guillemets doublés "", caractère qui est plus rare dans les champs textes francophones que l'apostrophe.
    Oui, c'est plus sûr.
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information en abondance, plein de bonnes choses à consulter sans modération

    Si vous souhaitez mettre en place une gestion de planning, une gestion de stock, de ventes/achats ou tout autre application Access, je peux vous proposer mes services.
    Pour cela n'hésitez pas à me contacter par courriel ou mp.


    Simple comme bonjour et merci

    Mes tutoriels et contributions sur ma page personnelle.

  10. #10
    Membre du Club
    Homme Profil pro
    Logisitique
    Inscrit en
    janvier 2018
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : Logisitique

    Informations forums :
    Inscription : janvier 2018
    Messages : 89
    Points : 51
    Points
    51

    Par défaut

    Merci de vos réponses.

    J'essaye cela et reviens vers vous.

  11. #11
    Membre du Club
    Homme Profil pro
    Logisitique
    Inscrit en
    janvier 2018
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : Logisitique

    Informations forums :
    Inscription : janvier 2018
    Messages : 89
    Points : 51
    Points
    51

    Par défaut

    Désolé, mais j'ai fais une mauvaise copie du code qui ne fonctionne pas...
    En jaune l'insert donnant le code erreur.
    Pour info, j'avais eu du mal au niveau des prix, ceux-ci étant dan la table avec 2 chiffres après la virgule et le calcul me faisait des arrondis indésirables; Raison pour laquelle mes variables sont en "Double" (je les ai mis en bleu pour les repérer)
    Et, mon calcul n'est pas en interger mais ABS (en vert pour les repérer)


    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    Private Sub Ajout_commande_Click()
    'Oblige qu'un Matricule soit encodé avant le choix d'un article
    If IsNull(FTMatricule) Then
    MsgBox "Un Matricule doît être introduit obligatoirement"
    Exit Sub
    Else
    
    
    
    'Vérification si article disponible à la commande et possibilité de stock en Magasin
    If Actif.Value = "RUPTURE" Then
    MsgBox "Article obsolète chez le fournisseur, mais disponible directement à ce Comptoir"
    Else
    
        'Protège la mise en négatif de points
    If Me.FTQComptoir * Me.FTPoints > Me.txtSoldeRestant.Value Then
    If MsgBox("Le solde points sera négatif, désirez-vous quand même ajouter l'article?", vbYesNo) = vbNo Then
    Exit Sub
    Me.Requery
    End If
    End If
    
    'Protège la mise en négatif du budget
    If Me.FTQCommande.Value * Me.FTEuros.Value > Me.SoldeBudget.Value Then
    If MsgBox("Le solde Budget sera négatif, désirez-vous quand même ajouter l'article?", vbYesNo) = vbNo Then
    Exit Sub
    Me.Requery
    End If
    End If
    
    'Calcul partie commande et insertion dans la table temporaire commande sur formulaire TRANSACTION et mise à jour avec le SELECT des totaux Comptoir ou commande
    Dim base1 As Database: Dim ligne1 As Recordset
    Dim requete1 As String: Dim total1 As Double: Dim total_AchatCde, total2, total_EurosCde As Double:
    
    total1 = Int(FTPoints.Value) * Int(FTQCommande.Value)
    total2 = Abs(FTEuros.Value) * Abs(FTQCommande.Value)
    totalCde = 0
    BudgetConso = 0
    
    
    Set base1 = Application.CurrentDb
    requete1 = "INSERT INTO T_DetailCde_Temp (ArtCde_Det, TailleCde_Det,CodeArticle, QUCde_Det, Pointcde_Det, PointTotalCde_Det,PrixCde_Det, PrixtotalCde_Det,  Matricule_Det) VALUES ('" & Rech_Article & "', '" & Rech_Taille & "', '" & CodeArt & "', " & FTQCommande & ", " & FTPoints & ", " & total1 & ", " & FTEuros & ",  " & total2 & ",  '" & FTMatricule & "')"
    base1.Execute requete1
    
    Set ligne1 = base1.OpenRecordset("SELECT * FROM T_DetailCde_Temp", dbOpenDynaset)
    
    ligne1.MoveFirst
    Do
    total_AchatCde = total_AchatCde + Int(ligne1.Fields("PointTotalCde_Det").Value)
    total_EurosCde = total_EurosCde + Abs(ligne1.Fields("PrixtotalCde_Det").Value)
    
    ligne1.MoveNext
    Loop Until ligne1.EOF
    totalCde.Value = total_AchatCde
    BudgetConso.Value = total_EurosCde
    
    
    If (Int(SoldeBudget.Value) < 0) Then
    MsgBox "Attention, Dépassement du budget financier alloué, Veuillez supprimer des articles et ensuite cliquer sur le bouton correctif de la Commande Externe "
    End If
    
    ligne1.Close
    base1.Close
    Set ligne1 = Nothing
    Set base1 = Nothing
    
    DoCmd.Requery
    End If
    End If
    End Sub
    Nom : table.png
Affichages : 60
Taille : 22,5 Ko

  12. #12
    Expert éminent
    Avatar de tee_grandbois
    Homme Profil pro
    retraité mais encore activé
    Inscrit en
    novembre 2004
    Messages
    4 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité mais encore activé

    Informations forums :
    Inscription : novembre 2004
    Messages : 4 368
    Points : 7 468
    Points
    7 468

    Par défaut

    bonjour,
    Et, mon calcul n'est pas en interger mais ABS (en vert pour les repérer)
    très mauvaise idée de changer les couleurs, car, d'une part, on perd la colorisation de la syntaxe associée au code et, d'autre part, les couleurs choisies font mal aux yeux et, qui plus est, illisible.
    Il vaut mieux indiquer le numéro des lignes concernées: ligne 33 pour le bleu, ligne 36 pour le vert et lignes 41 à 43 pour le jaune.
    Il est possible de voir le résultat final d'un message avec le bouton "Prévisualisation du message", alors utilise-le la prochaine fois pour repérer tes lignes de code.

    Pour ce qui est de ton problème, commence déjà par mettre les apostrophes partout où il y a des valeurs, si l'erreur persiste, ajoute l'instruction Debug.? requete1 juste après cette instruction et poste le résultat qui se trouvera dans la fenêtre d'exécution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    requete1 = "INSERT INTO T_DetailCde_Temp (ArtCde_Det, TailleCde_Det,CodeArticle, QUCde_Det, Pointcde_Det, PointTotalCde_Det,PrixCde_Det, PrixtotalCde_Det,  Matricule_Det) VALUES ('" & Rech_Article & "', '" & Rech_Taille & "', '" & CodeArt & "', '" & FTQCommande & "', '" & FTPoints & "', '" & total1 & "', '" & FTEuros & "',  '" & total2 & "', '" & FTMatricule & "')"
    le calcul me faisait des arrondis indésirables
    pour éviter cela, on peut utiliser Round() pour ne garder que les décimales désirées (en général 2 pour les monétaires) ou Fix() pour ne garder que la partie entière du montant.
    Enfin, le type Integer est à éviter si les montants dépassent 32767.
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...

  13. #13
    Rédacteur/Modérateur
    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2004
    Messages
    6 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : août 2004
    Messages : 6 205
    Points : 12 926
    Points
    12 926
    Billets dans le blog
    11

    Par défaut

    Bonjour,

    Je confirme la remarque de tee_grandbois, cette couleur jaune est illisible

    Une remarque concernant la déclaration de tes variables dans ton code, quand tu déclares :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim total_AchatCde, total2, total_EurosCde As Double
    Cela revient à écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim total_AchatCde as variant, total2 as variant, total_EurosCde As Double
    Dans le cas du type variant, tu laisses Access deviner le type de données au moment de l'affectation d'une valeur à ces variables.

    Il faut typer chaque variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim total_AchatCde As Double, total2 as double, total_EurosCde As Double
    Ou plus précisément pour les variables de type monétaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim total_AchatCde As Currency, total2 as Currency, total_EurosCde As Currency
    D'autre part, normalement les déclarations de variables locales doivent se faire tout en haut de la procédure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Ajout_commande_Click()
    Dim total_AchatCde As Currency, total2 as Currency, total_EurosCde As Currency
    ...
    Note que pour forcer la déclaration explicite de toutes tes variables il te faut ajouter tout en haut de ton module l'instruction :

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information en abondance, plein de bonnes choses à consulter sans modération

    Si vous souhaitez mettre en place une gestion de planning, une gestion de stock, de ventes/achats ou tout autre application Access, je peux vous proposer mes services.
    Pour cela n'hésitez pas à me contacter par courriel ou mp.


    Simple comme bonjour et merci

    Mes tutoriels et contributions sur ma page personnelle.

  14. #14
    Invité
    Invité(e)

    Par défaut

    Bonjour,
    il n'y a peut être pas d'erreur mais juste une incompatibilité de version vba!

    dans vba vas dans Menu=>Outils=>Références et décoche les manquantes si il y en a!

  15. #15
    Responsable
    Office & Excel

    Avatar de Pierre Fauconnier
    Homme Profil pro
    Formateur et développeur informatique indépendant
    Inscrit en
    novembre 2003
    Messages
    13 745
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur informatique indépendant
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 13 745
    Points : 36 777
    Points
    36 777
    Billets dans le blog
    41

    Par défaut

    Salut.

    Pas tout suivi sur le problème des couleurs, mais recomposer une requête d'insertion à coup de concaténation, c'est le casse-pipe assuré. Si tu as une apostrophe dans une de tes valeurs par exemple, ça va immanquablement planter.

    Le plus pro serait de travailler avec des requêtes paramétrées. La construction de ta chaine sera bien plus simple, et tu supprimes les problèmes d'interprétation des caractères à l'intérieur des valeurs à insérer...

    Exemple de code adodb
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      cm.CommandText = "insert into Data (firstname, lastname, duedate, amount, categoryfk) values(?, ?, ?, ?, ?)"
      cm.Parameters.Append cm.CreateParameter("p1", adVarChar, adParamInput, 255, "Pierre")
      cm.Parameters.Append cm.CreateParameter("p2", adVarChar, adParamInput, 255, "Fauconnier")
      cm.Parameters.Append cm.CreateParameter("p3", adDate, adParamInput, , Date)
      cm.Parameters.Append cm.CreateParameter("p4", adDouble, adParamInput, , 1354.25)
      cm.Parameters.Append cm.CreateParameter("p5", adInteger, adParamInput, 4, 2)
      cm.Execute
    Lors de l'insert sur une table avec numéroauto, on ne renseigne pas le numéroauto.

    Tu pourrais aussi travailler sur un recordset en mode ajout et passer les données aux différents champs du recordset.

    Avec Access, tu pourrais aussi travailler avec une requête (querydef) enregistrée dans les requêtes Access. Là aussi, tu pourras utiliser les paramètres pour déléguer à Access le traitement des valeurs (caractères d'échappement et autres joyeusetés). Il est très souvent préférable de travailler sur base de requêtes enregistrées paramétrées que de recomposer la commande sql à la volée.

    Exemple:

    La table Access
    Nom : 2019-05-16_172916.png
Affichages : 56
Taille : 6,4 Ko

    La requête d'ajout paramétrée
    Nom : 2019-05-16_172944.png
Affichages : 54
Taille : 20,6 Ko

    Le code d'ajout
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Test()
      Dim q As QueryDef
     
      Set q = CurrentDb.QueryDefs("insertcontact")
      q.Parameters("@firstname") = "Alain"
      q.Parameters("@lastname") = "Térieur de l'avalanche"
      q.Parameters("@birthdate") = DateSerial(1980, 11, 23)
      q.Parameters("@amount") = 45126.86
      q.Parameters("@active") = True
      q.Execute
    End Sub


    Bref, tu as plusieurs solutions pour éviter la reconstruction de la commande sql par concaténation, car cette technique est la pire qui soit. Elle t'impose de penser toi-même à doubler certains caractères, elle amène à se mélanger les pinceaux entre ' et " lors de la construction de la chaine, etc... Le seul cas où il faut procéder ainsi est la requête de sélection enregistrée dans Access (liée à un formulaire ou un état, par exemple) dont on veut modifier des valeurs. Mais là aussi, il existe des techniques qui permettent de généraliser la substitution des paramètres pour éviter la concaténation.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Une fois pour toutes, je donne mon avis. Je ne vais pas le répéter à chaque message...
    Si je propose une solution générique sur votre solution spécifique, c'est parce que, fainéant de nature, je privilégie le réutilisable...
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Vous souhaitez rédiger pour DVP? Contactez-moi
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  16. #16
    Membre du Club
    Homme Profil pro
    Logisitique
    Inscrit en
    janvier 2018
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : Logisitique

    Informations forums :
    Inscription : janvier 2018
    Messages : 89
    Points : 51
    Points
    51

    Par défaut

    Merci de toutes vos réponses d'expert, cela fait pas mal d'info pour un néophyte comme moi...

    Désolé pour la couleur, en effet pas très lisible sauf en sélectionnant...je le ferai plus...

    Le replace pour placer un point à la place de la virgule fonctionne super.

    Mettre des apostrophes autour de toutes les valeurs, ne changeait rien à mon problème et pour info l'erreur donnée par le debug était Erreur d’exécution 13 incompatibilité de type...

    Etant autodidacte dans Access, travailler avec des concaténations me vient des exemples de base de données qui m'ont servi d'idées afin de réaliser mon premier programme. Le résultat escompté et quasi atteint, certes certainement avec du code long et compliqué mais reflétant l'insuffisance de connaissance actuelle que je possède en Access. Il est vrai que pour un premier jet, j'avoue m'être attaqué à du lourd.

    Promis, je vais approcher les requêtes paramétrées (code adobdb...?) et les (querydef..?), je suppose qu'une fois la méthode comprise, cela me semblera plus aisé que la concaténation.

    Grâce à vous tous, j'en apprend chaque jour dans ce monde vaste dela programmation, mais quel plaisir, de voir son petit programme fonctionner et m'aider dans mes tâches logistiques quotidiennes.

    UN TOUT GRAND MERCI, ET, MERCI AUSSI DE ME PARDONNER DES FOIS MON IGNORANCE OU DE LA HAUTEUR DE MON NIVEAU DE COMPRÉHENSION FACE AU VOTRE.

    A bientôt

    Eric

  17. #17
    Invité
    Invité(e)

    Par défaut

    bonjour,

    pour ce qui me concerne, si ton projet fonctionnait en 2010 il devrait fonctionner en Office 365 sauf cas exceptionnelle!

    avant de se torturer l'esprit ,regarde ce que j'ai dit au poste #14, tu as peut-être l'assignation de 2 version VBA dans ton projet (2010 et 365) ce qui peut entrainer le problème que tu relate!

    Si tu n'as pas de conflit de version tu pourras investiguer le piste proposer, mais avant tout il n'y a pas de macros sens Visual Basic Application !
    Dernière modification par Invité ; 20/05/2019 à 11h53.

  18. #18
    Membre du Club
    Homme Profil pro
    Logisitique
    Inscrit en
    janvier 2018
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : Logisitique

    Informations forums :
    Inscription : janvier 2018
    Messages : 89
    Points : 51
    Points
    51

    Par défaut

    Citation Envoyé par dysorthographie Voir le message
    bonjour,

    pour ce qui me concerne, si ton projet fonctionnait en 2010 il devrait fonctionner en Office 365 sauf cas exceptionnelle!

    avant de se torturer l'esprit ,regarde ce que j'ai dit au poste #14, tu as peut-être l'assignation de 2 version VBA dans ton projet (2010 et 365) ce qui peut entrainer le problème que tu relate!

    Si tu n'as pas de conflit de version tu pourras investiguer le piste proposer, mais avant tout il n'y a pas de macros sens Visual Basic Application !
    J'avais vérifié, mais désolé de ne pas l'avoir signalé dans ma réponse.
    Juste une différence:
    sur 2010: MICROSOFT ACCESS 14.0 Object Library
    sur 365: MICROSOFT ACCESS 16.0 Object Library (mais pas de choix de placer en 14.0

    La fonction replace à résolu chaque dysfonctionnement de code que j'avais en changeant de version (les problèmes se posaient à chaque fois que j'utilisais du monétaire avec virgule)


    Un super merci à toi aussi

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

Discussions similaires

  1. [AC-2010] Compatibilité Access 2010 et Access 2013
    Par gafisa dans le forum Access
    Réponses: 2
    Dernier message: 29/04/2017, 07h26
  2. [AC-2003] Compatibilité Access 2010 et 2003
    Par Tazzou dans le forum Access
    Réponses: 2
    Dernier message: 19/10/2016, 19h04
  3. [AC-2010] Ajout compatibilité paradox 3.x sous access 2010
    Par goridam dans le forum Access
    Réponses: 3
    Dernier message: 03/11/2014, 21h20
  4. compatibilité Access 2007-2010 - liste déroulante
    Par Olivierporcinet dans le forum Access
    Réponses: 2
    Dernier message: 16/09/2013, 20h10
  5. Compatibilité ACCESS 2010
    Par bremmo76 dans le forum Access
    Réponses: 4
    Dernier message: 22/06/2010, 17h37

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