Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/07/2011, 13h24   #1
Invité régulier
 
Homme
Étudiant
Inscription : mai 2011
Messages : 14
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Matériel informatique

Informations forums :
Inscription : mai 2011
Messages : 14
Points : 6
Points : 6
Par défaut Bouton commande: INSERT + UPDATE

Bonjour à tous les lecteurs!

Présentation du projet: Logiciel de gestion de magasin d'outillage
Tables concernées: OUTILS, CONSOMMATION

Je dispose d'un formulaire de consommations dans lequel je rentre plusieurs données (référence d'outil, nuance d'outil, référence de la machine qui consomme, date de consommation, quantité consommée, prix final de consommation). Sur ce formulaire, il y a un bouton "insérer" afin d'enregistrer la consommation.
=> Ce bouton a pour but: Insérer la consommation rentrée dans la table CONSOMMATION et baisser la quantité de stock d'une X quantité rentrée dans la table OUTILS pour l'outil concerné.

=> Problème rencontré: Tout se passe à merveille au début, mais (un gros mais lol) le formulaire reste bloqué sur l'enregistrement qui vient d'être inséré! Si un utilisateur veut réinsérer une seconde consommation bah...il doit fermer le formulaire et le rouvrir... (pas top...)

Code VBA:

Code :
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
Private Sub bt_insert_Click()
    Dim code_conso As String
    Dim ref_outil As String
    Dim nuance As String
    Dim ref_machine As String
    Dim qte As Integer
    Dim prixFinal As Double
    Dim sDate As Date
    Dim test_stock As Long
    Dim test_mini As Long
    Dim req As String
    Dim req_insert As String
    Dim req_update As String
    Dim bdd As Database
    Dim rs As Recordset
    Dim rs_insert As DAO.Recordset
    Dim rs_update As DAO.Recordset
    Dim dbs As Database
 
    On Error GoTo Err_bt_insert_Click
 
    'Vérification pour éviter le NULL
    If ((IsNull(Me.qte)) Or (IsNull(Me.ref_outil)) Or (IsNull(Me.nuance)) Or (IsNull(Me.ref_machine))) Then
        MsgBox "Veuillez remplir tout les champs."
        Exit Sub
    Else
        'Test pour assurer un calcul du prix final
        If (IsNull(Me.txt_prixFinal)) Then
            MsgBox "Veuillez calculer le prix final."
            Exit Sub
        Else
            'Affection des valeurs aux variables
            '(code_conso est auto-incrémenté)
            code_conso = Me.code_conso.Value
            ref_outil = Me.ref_outil.Value
            nuance = Me.nuance.Value
            ref_machine = Me.ref_machine.Value
            qte = Me.qte.Value
            prixFinal = Me.txt_prixFinal.Value
            sDate = Me.sDate.Value
 
            'Récupération des données de stock de la table OUTILS
            req = "SELECT qte_stock, stockMini "
            req = req & "FROM OUTILS "
            req = req & "WHERE ref_outil = '" & ref_outil & "' "
            req = req & "AND nuance = '" & nuance & "';"
 
            Set bdd = CurrentDb
            Set rs = bdd.OpenRecordset(req)
 
            'Affection des valeurs aux variables
            test_mini = rs!stockMini
            test_stock = rs!qte_stock
 
            'Test pour ne pas avoir un stock negatif
            If (0 > (test_stock - qte)) Then
                MsgBox "Opération impossible, vous n'avez plus assez de stock!", vbOKOnly
                Exit Sub
            Else
                'Test pour prévenir l'user que le stock descend sous son seuil minimal
                If (test_mini > (test_stock - qte)) Then
                    If (MsgBox("Attention vous depassez le seuil de stock minimal! Voulez-vous continuer?", vbYesCancel) = vbCancel) Then
                        Exit Sub
                    End If
                Else
                    'Requêtes SQL
                    req_insert = "INSERT INTO CONSOMMATION (code_conso, ref_outil, nuance, ref_machine, qte, prixFinal, sDate) "
                    req_insert = req_insert & "VALUES ('" & code_conso & "', '" & ref_outil & "', '" & nuance & "', '" & ref_machine & "', " & qte & ", " & prixFinal & ", #" & sDate & "#);"
 
                    req_update = "UPDATE OUTILS "
                    req_update = req_update & "SET qte_stock = qte_stock - " & qte & " "
                    req_update = req_update & "WHERE ref_outil = '" & ref_outil & "' "
                    req_update = req_update & "AND nuance = '" & nuance & "';"
 
                    'Initialisation et ouverture de la BDD
                    Set dbs = CurrentDb
                    dbs.Execute req_insert, dbFailOnError
                    dbs.Execute req_update, dbFailOnError
 
                    'Rachaîchissement de la liste qui affiche la table CONSOMMATION
                    Me.lst_conso.Requery
 
                    'Activation du prochain enregistrement
                    DoCmd.GoToRecord , , acNewRec
                End If
            End If
        End If
    End If
 
Exit_bt_insert_Click:
    Exit Sub
 
Err_bt_insert_Click:
    MsgBox Err.description
    Resume Exit_bt_insert_Click
 
End Sub
Merci de m'aider a régler ce problème qui est "majeur" pour mon projet.
Dutchou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 13h31   #2
Invité régulier
 
Homme
Étudiant
Inscription : mai 2011
Messages : 14
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Matériel informatique

Informations forums :
Inscription : mai 2011
Messages : 14
Points : 6
Points : 6
Par défaut Merci

Oui je sais, j'étais entrain de le faire pendant ta réponse, merci
Dutchou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 13h31   #3
Membre du Club
 
Homme Pierrick
Étudiant
Inscription : avril 2011
Messages : 57
Détails du profil
Informations personnelles :
Nom : Homme Pierrick
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Étudiant
Secteur : Industrie

Informations forums :
Inscription : avril 2011
Messages : 57
Points : 45
Points : 45
Citation:
Envoyé par Dutchou Voir le message
Oui je sais, j'étais entrain de le faire pendant ta réponse, merci
Désolé je n'savais pas =)
Je sus en train de me pencher sur ton problème, je te tiens au courant, j'espère dans l'apres-midi (j'ai tout un tas de truc a faire ^^)
koluche est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2011, 07h26   #4
Invité régulier
 
Homme
Étudiant
Inscription : mai 2011
Messages : 14
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Matériel informatique

Informations forums :
Inscription : mai 2011
Messages : 14
Points : 6
Points : 6
Par défaut Résolu

Problème résolu, il fallait simplement que je laisse faire l'insertion par :
Code :
DoCmd.GoToRecord , , acNewRec
Et donc retirer la requête INSERT ainsi que son ".Execute".

Merci à toi koluche de m'avoir répondu.
Dutchou est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h49.


 
 
 
 
Partenaires

Hébergement Web