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

Résolu/Fermé
Loic_7447 Messages postés 49 Date d'inscription jeudi 11 juillet 2019 Statut Membre Dernière intervention 17 novembre 2020 - 9 oct. 2019 à 09:03
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 - 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 !

1 réponse

yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471
9 oct. 2019 à 15:20
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
1
Loic_7447 Messages postés 49 Date d'inscription jeudi 11 juillet 2019 Statut Membre Dernière intervention 17 novembre 2020
14 oct. 2019 à 16:48
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.
0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471 > Loic_7447 Messages postés 49 Date d'inscription jeudi 11 juillet 2019 Statut Membre Dernière intervention 17 novembre 2020
14 oct. 2019 à 17:20
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.
0