Ajout d'une donnée dans une table si inexistante [Résolu]

Signaler
Messages postés
33
Date d'inscription
jeudi 11 juillet 2019
Statut
Membre
Dernière intervention
8 juin 2020
-
Messages postés
11512
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 juillet 2020
-
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

Messages postés
11512
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 juillet 2020
659
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
Messages postés
33
Date d'inscription
jeudi 11 juillet 2019
Statut
Membre
Dernière intervention
8 juin 2020

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.
Messages postés
11512
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 juillet 2020
659 >
Messages postés
33
Date d'inscription
jeudi 11 juillet 2019
Statut
Membre
Dernière intervention
8 juin 2020

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.