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

Résolu
Loic_7447 Messages postés 32 Date d'inscription   Statut Membre Dernière intervention   -  
yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   -
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

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    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
    1. Loic_7447 Messages postés 32 Date d'inscription   Statut Membre Dernière intervention  
       
      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
      1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Loic_7447 Messages postés 32 Date d'inscription   Statut Membre Dernière intervention  
         
        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