Ajout d'une donnée dans une table si inexistante

Messages postés
18
Date d'inscription
jeudi 11 juillet 2019
Statut
Membre
Dernière intervention
14 octobre 2019
- - Dernière réponse : yg_be
Messages postés
8713
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 octobre 2019
- 14 oct. 2019 à 17:20
Bonjour à tous,

J'ai créé une base de donnée qui permet de tenir à jour le stock d'outils d'un atelier.
Dans cette bbd, il y a :
- une table qui contient l'état du stock (avec la référence outil, le fournisseur, la quantité en stock et le type d'outil)
- une table qui contient l'ensemble des fournisseurs auprès des quels nous achetons des outils
- un formulaire qui permet d'intégrer la réception d'une nouvelle référence en stock (avec une case pour chaque champ de la table)
- et un dernier formulaire qui permet de sortir une référence du stock (en tapant simplement la référence)

J'aimerais que, lorsqu'on intègre une nouvelle référence dans la bbd, si le fournisseur saisi n'est pas présent dans la table fournisseur, il s'ajoute automatiquement dans cette table.

Voici mon code d'ajout de référence:
Private Sub btn_ajouter_Click()

Set db = CurrentDb
Set rs = db.OpenRecordset("Stock_atelier")

If Me.txt_reference = "" Or Me.txt_fournisseur = "" Or Me.txt_quantité = "" _
Or Me.txt_outil = "" Then
MsgBox ("Veuillez renseigner toutes les cases")
Else
rs.AddNew
rs!Référence = Me.txt_reference
rs!Fournisseur = Me.txt_fournisseur
rs!Quantité = Me.txt_quantité
rs!Type = Me.txt_outil
rs.Update
MsgBox ("Référence ajoutée avec succès")
txt_reference = ""
txt_fournisseur = ""
txt_quantité = ""
txt_outil = ""
End If

rs.Close
db.Close

Set rs = Nothing
Set db = Nothing

End Sub



Merci d'avance pour votre aide !
Afficher la suite 

1 réponse

Meilleure réponse
Messages postés
8713
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 octobre 2019
436
1
Merci
bonjour,
quand tu partages du code VBA, peux-tu choisir "basic" comme type de code?
suggestion:
Dim rsref As DAO.Recordset

Set rsref = CurrentDb.OpenRecordset("fournisseur", dbOpenDynaset)
rsref.FindFirst ("fournisseur='" + CStr(Me.txt_fournisseur) + "'")
If rsref.NoMatch Then
    rsref.AddNew
    rsref!fournisseur = Me.txt_fournisseur
    rsref.Update
End If

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 63755 internautes nous ont dit merci ce mois-ci

Loic_7447
Messages postés
18
Date d'inscription
jeudi 11 juillet 2019
Statut
Membre
Dernière intervention
14 octobre 2019
-
Bonjour,

Merci de ta réponse, malheureusement je rencontre un problème : lorsque j’exécute le programme en cliquant sur le bouton "btn_ajouter", on m'affiche un message d'erreur : "erreur 3420, l'objet est incorrect ou n'est plus définit",et me surligne la ligne n°33 (rsref.Close).

Voici mon code avec ta solution intégrée (la ligne "Dim rsref as ... se trouve dans l'instruction Option compare database):

Private Sub btn_ajouter_Click()

Set db = CurrentDb
Set rs = db.OpenRecordset("Stock_atelier")

    If Me.txt_reference = "" Or Me.txt_fournisseur = "" Or Me.txt_quantité = "" _
          Or Me.txt_outil = "" Then
        MsgBox ("Veuillez renseigner toutes les cases")
    Else
        rs.AddNew
        rs!Référence = Me.txt_reference
        rs!Fournisseur = Me.txt_fournisseur
        rs!Quantité = Me.txt_quantité
        rs!Type = Me.txt_outil
        rs.Update
            MsgBox ("Référence ajoutée avec succès")
        txt_reference = ""
        txt_fournisseur = ""
        txt_quantité = ""
        txt_outil = ""
    End If

Set rsref = db.OpenRecordset("tFournisseurs", dbOpenDynaset)

rsref.FindFirst ("fournisseur='" + CStr(Me.txt_fournisseur) + "'")
    If rsref.NoMatch Then
        rsref.AddNew
        rsref!Fournisseur = Me.txt_fournisseur
        rsref.Update
    End If

rs.Close
db.Close
rsref.Close

Set rs = Nothing
Set db = Nothing
Set rsref = Nothing

End Sub


J'ai essayé, entre autre, d'enlever la ligne rsref.Close, il n'y avait plus de message d'erreur mais le texte saisit ne s'intégrait pas à ma table tFournisseurs.
yg_be
Messages postés
8713
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
17 octobre 2019
436 > Loic_7447
Messages postés
18
Date d'inscription
jeudi 11 juillet 2019
Statut
Membre
Dernière intervention
14 octobre 2019
-
la ligne
Dim rsref As DAO.Recordset
doit se trouver juste en dessous de la ligne
Private Sub btn_ajouter_Click()

il est recommandé d'ajouter option explicit en début de module (en dessous de la ligne
Option compare database
:cela force à déclarer toutes les variables, c'est beaucoup mieux.
Commenter la réponse de yg_be