IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Enregistrement via inputbox pour table liées


Sujet :

VBA Access

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2013
    Messages : 103
    Points : 44
    Points
    44
    Par défaut Enregistrement via inputbox pour table liées
    Bonjour j'aimerais savoir comment faire pour ajouter un enregistrement sur une table via un bouton commande et des inputbox ! Le problème c'est que les valeurs insérées dans mes inputbox font parties des tables liés à la table Table_Qualification à laquelle je veux ajouter mon enregistrement...

    Par exemple dans la table Table_Soudeur, il y a deux champs: Code Nom et Nom. Bien évidemment quand l'utilisateur voudra ajouter un enregistrement il devra saisir dans l' inputbox le Nom et non le Code Nom sauf que c'est bien le Code Nom qui devra apparaître le nouvel enregistrement !

    Une sorte de récupération du Code Nom suivant le Nom saisi....

    J'ai déjà posé la question et zoom61 m'a répondu mais je n'y arrive toujours pas !



    Cordialement !

  2. #2
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 878
    Points : 3 467
    Points
    3 467
    Par défaut
    Bonjour Alexbreizhst,
    Je n'ai pas lu l'autre discussion tu pourrais peut-être mettre le lien. Voici une manière parmi tant d'autres de fonctionner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Private Sub btnEnregistrerUnSoudeur_Click()
     
        Dim db As DAO.Database
        Dim rst As DAO.Recordset
        Dim strSQL As String, strNom As String
        Dim intNom As Integer 'Ici il faudra choisir le même type de variable que ton champ Code Nom
     
        strNom = InputBox("Entrez le nom", "Choix d'un soudeur")
        If strNom <> "" Then 'Si on a mis du texte et fait OK
            'Vérification dans la table si ce nom existe
            'Si oui on insère dans l'autre table
            'Cependant si tu as 2 fois le même nom dans la table????
            'De plus c'est jamais bon de choisir Nom pour le nom d'un champ
            strSQL = "SELECT Table_Soudeur.Code_Nom, Table_Soudeur.Nom FROM Table_Soudeur " _
            & "WHERE (((Table_Soudeur.Nom)=""" & strNom & """));"
            Set db = CurrentDb
            Set rst = db.OpenRecordset(strSQL)
            If rst.EOF = False Then 'On a trouvé le nom correspondant
                intNom = rst("Code_Nom")
                'On inscrit dans l'autre table
                strSQL = "INSERT INTO Table_Qualification (LeChampDeLatable) VALUES (" & intNom & ");"
                DoCmd.RunSQL (strSQL)
            Else
                MsgBox "Ce nom ne fait pas partie de la liste", vbCritical 'Message si on ne trouve pas le nom
            End If
            rst.Close
            Set rst = Nothing
            Set db = Nothing
        End If
     
     
    End Sub
    Bonne journée

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2013
    Messages : 103
    Points : 44
    Points
    44
    Par défaut
    Tout d'abord merci pour le temps que tu consacres à me répondre Robert1957

    Voici le lien de la discussion:
    http://www.developpez.net/forums/d13...-tables-liees/

    Et ensuite voici le code que j'ai actuellement mis en place avec zoom61 !
    Je n'ai pas encore regardé de près ton code mais voici le mien:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Option Compare Database
     
    Public Sub Ajouter_QS_Click()
     
     
    '================ Interface homme-machine ===============================
    NouvelEnregistrement = InputBox("Voulez-vous ajouter une qualification soudeur ? [Oui/Non]")
        If NouvelEnregistrement = "Non" Or IsNull(NouvelEnregistrement) Then
            Exit Sub
        Else
     
     '================ Ajout de l'Identification de la qualification ==============================
    Dim strID As String
    Dim strSQL As String
    strID = InputBox("Veuillez indiquer l'identifiant de qualification ?")
    strSQL = "INSERT INTO Table_Qualification (Identification) VALUES ('" & strID & "')"
     
    DoCmd.SetWarnings False
     
    sql = "SELECT * FROM Table_Qualification WHERE Identification = '" & strID & "'"
    Set oSQL = CurrentDb.OpenRecordset(sql)
    If oSQL.RecordCount = 1 Then
                MsgBox " L'identification de cette qualification existe déjà"
                Else
                DoCmd.RunCommand acCmdSaveRecord
                DoCmd.RunSQL strSQL
    End If
     
    '================ Ajout du nom du soudeur ==============================
    Dim Name As String
    Dim strSQL2 As String
    Name = InputBox("Veuillez indiquer le nom du soudeur ?")
    strSQL2 = "INSERT INTO Table_Soudeur (Nom) VALUES ('" & Name & "')"
     
    DoCmd.SetWarnings False
     
    sql = "SELECT * FROM Table_Soudeur WHERE Nom = '" & Name & "'"
    Set oSQL = CurrentDb.OpenRecordset(sql)
    If oSQL.RecordCount = 1 Then
                'Il existe =============================================
                CodeNom = oSQL("ID BAUME")
                 Else
                'Il n'existe pas j'insère le nom ========================
                DoCmd.RunSQL strSQL2
                'Je récupère le code ===================================
                sql = "SELECT * FROM Table_Soudeur WHERE Nom = '" & Name & "'"
                Set oSQL = CurrentDb.OpenRecordset(sql)
                CodeNom = oSQL("ID BAUME")
                End If
                DoCmd.SetWarnings True
                'Je mets le code nom dans le champ du formulaire =======
                Forms![Qualification soudeur]![Code BAUME] = CodeNom
     
    Dim rsName As DAO.Recordset
    Set rsName = CurrentDb.OpenRecordset("select Identification from Table_Qualification", dbOpenDynaset)
        rsName.AddNew
            If Name = rsName.Fields("Nom").Value Then
            MsgBox ("L'élément saisi existe déjà dans la liste.")
            Else
        rsName![Nom] = Forms!Formulaire!Name
        rsName.Update
        rsName.MoveLast
        MsgBox "Le Nom " & Forms![Qualification soudeur]!Name & " a bien été ajoutée", vbOKOnly + vbInformation, "Confirmation d'ajout..."
            End If
     
          End If
    End Sub
    Mais je rencontre quelques problème...
    C'est pourquoi je vais essayer de voir avec ton code si cela marche !

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2013
    Messages : 103
    Points : 44
    Points
    44
    Par défaut
    J'ai adapté ton code ROBERT1957, je n'ai aucuns message d'erreur mais comment être sur que cela fonctionne réellement, que cela m'ajoute un enregistrement ?

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2013
    Messages : 103
    Points : 44
    Points
    44
    Par défaut
    toujours le même problème lors de l'exécution de la ligne
    DoCmd.RunSQL (strSQL)
    qui me dit que
    La table 'Table_Qualification est déjà ouverte en mode exclusif par un autre utilisateur, ou elle est déjà ouverte par l'interface utilisateur et ne peux pas être manipulée par programmation.
    Si quelqu'un à une idée de comment contourner ce problème ??

    La commande de sauvegarde comme mentionné par zoom61 ne fonctionne pas !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DoCmd.RunCommand acCmdSaveRecord
    DoCmd.RunSQL strSQL

  6. #6
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 878
    Points : 3 467
    Points
    3 467
    Par défaut
    Tu peux regarder dans ta table s'il y a un nouvel enregistrement?
    Je regarde l'autre discussion et je vois que tu as mis ta BD est-ce la dernière version?
    Petit commentaire
    Option Compare Database

    Public Sub Ajouter_QS_Click()
    Tu devrait ajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Option Compare Database
    Option Explicit
     
    Public Sub Ajouter_QS_Click()
    Ça relève immédiatement les problèmes de variables non déclarées ou fautes de frappe etc...

    Et une autre question, pourquoi ne pas faire un formulaire en mode "Fen indépendante" et "Fen modale" tu pourrais ainsi inclure les formations dans une liste déroulante ainsi que les soudeurs etc. Pour l'utilisateur ce serait plus rapide et pour toi les vérifications seraient plus simples. Et ce formulaire fonctionnerait comme un inputbox.

Discussions similaires

  1. Réponses: 26
    Dernier message: 30/04/2013, 16h11
  2. Mot de passe pour tables liées
    Par Secco dans le forum Sécurité
    Réponses: 7
    Dernier message: 04/09/2009, 21h08
  3. openforseek pour table liée
    Par adelsunwind dans le forum IHM
    Réponses: 1
    Dernier message: 16/10/2008, 21h39
  4. Chemin relatif pour tables liées
    Par kiki_b dans le forum Access
    Réponses: 8
    Dernier message: 15/06/2006, 19h17
  5. definir chemin pour table liée
    Par branqueira dans le forum Access
    Réponses: 4
    Dernier message: 22/10/2005, 14h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo