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 :

Récupérer les champs d'un formulaire dans un nouvel enregistrement dans une table


Sujet :

VBA Access

  1. #1
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 161
    Points : 101
    Points
    101
    Par défaut Récupérer les champs d'un formulaire dans un nouvel enregistrement dans une table
    Voilà, j'ai créé un formulaire, dans lequel j'ai des champs texte à compléter.
    Une fois ces champs remplis par l'utilisateur, j'aimerais que ceux-ci soient ajouter en tant que nouvel enregistrement dans une table.

    Voici mon code VBA (que j'ai récupéré sur le net) :
    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
    Dim MaTable as RecordSet
    Set MaTable = CurrentDb.OpenRecordset("Utilisateurs", dbOpenDynaset)
    On Error Resume Next
    With MaTable
        .AddNew
        !Nom = Form_ajout!txtnom
        !Prenom = Form_ajout!txtprenom
        !Service = Form_ajout!lstservice
        .Update
        .Requery
    End With
    If Err.Number <> 0 Then
        MsgBox Err.Description, , Err.Number
        GoTo Fin:
    End If
    MaTable.Close
    Set MaTable = Nothing
    Fin:
    End Sub
    Or, j'ai un soucis, lors du clic sur le bouton auquel j'ai associé de code, j'ai une box d'erreur qui apparait avec l'information ;

    Erreur d'exécution '13' : Incompatibilité de type
    Et en cliquant sur Débogage, je retourne sur mon code en VBA, où la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set MaTable = CurrentDb.OpenRecordset("Utiisateurs", dbOpenDynaset)
    est surlignée en jaune.


    Quelqu'un pourrait-il me guider afin de débloquer ma situation?

    Merci.

  2. #2
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut Récupérer les champs d'un formulaire.....
    Salut Byrdo,

    Le plus simple serait de rattacher le formulaire à la table qui va recevoir les données.

    Dans les propriétés du formulaire, il existe une propriété Record Source dans laquelle tu peux indiquer la table qui sera liée au formulaire.
    Les différents champs que tu poses sur le formulaire sont directement liés à la source et renseigne l'enregistrement automatiquement.

    A+

    Jeannot
    Jeannot

    Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., Sources VBA

    Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre

  3. #3
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 161
    Points : 101
    Points
    101
    Par défaut
    Cette propriété Record Source se trouve dans les propriétés du bouton que j'ai créé pour envoyer les données?

    Dois-je donner à mes champs texte les mêmes noms que les différentes colonnes de la table que je veux incrémenter avec un nouvel enregistrement?

  4. #4
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut Récupérer les champs d'un formulaire ....
    Bonjour byrdo

    Reprenons les choses depuis le début. Un formulaire peut être soit indépendant soit dépendant.
    On dit qu'il est indépendant s'il n'est rattaché à aucune table ou requete. Il est dépendant dans le cas contraire c'est à dire attaché à une table ou une requete.

    1) Comment rendre dépendant un formulaire
    -Deux méthodes:
    a) Lors de la création du formulaire : Lorsque dans la fenêtre base de données tu fais dans l'onglet "Formulaire" : "Nouveau". Une boite de dialogue te demande de choisir la source
    b) Si tu double clic sur "Créer un formulaire en mode creation". Il te faut alors afficher les propriétés du formulaire et dans l'onglet "Données" au niveau de Record Source, tu choisis la source à rattacher.

    2) Positionner les champs attachés sur le formulaire
    Tu affiches la liste des champs. Tu cliques maintenu sur le champ qui est concerné et tu le glisses sur le formulaire. (le nom du champ apparait dan la partie droite (Zone de texte = partie rattachée directement à la table) et la partie gauche (Etiquette = affiche le nom de champ ou la légende que tu pourrais avoir créer dans ta structure de table) du controle.

    Le fait de rattacher une table à un formulaire et la manière la plus simple de renseigner une table (ajout ou modif d'enregistrement)


    A+

    Jeannot
    Jeannot

    Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., Sources VBA

    Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre

  5. #5
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 161
    Points : 101
    Points
    101
    Par défaut
    Je pense avoir perçu le fonctionnement que tu préconises.

    En revanche, je désirai passer par l'utilisation de VBA.

    De plus, je vais aussi avoir besoin de supprimer ou de modifier des champs dans ma table, par l'intermédiaire d'autres formulaires similaires.

    Je voudrais que l'utilisateur puisse entrer des valeurs dans les champs, valeurs qui sur clic d'un bouton se retrouve incrémentées dans la table.

  6. #6
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut Recupérer les champs....
    Re,

    Dans ce cas, modifie la procédure comme suit

    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
    Dim MaTable as DAO.RecordSet
    Set MaTable = CurrentDb.OpenRecordset("Utilisateurs")
    On Error Resume Next
    With MaTable
    .AddNew
    .Fields("Nom") = Form_ajout!txtnom
    .Fields("PreNom")= Form_ajout!txtprenom
    .Fields("Service")= Form_ajout!lstservice
    .Update
    End With
    If Err.Number <> 0 Then
    MsgBox Err.Description, , Err.Number
    GoTo Fin:
    End If
    MaTable.Close
    Set MaTable = Nothing
    Fin:
    End Sub
    A+

    Jeannot
    Jeannot

    Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., Sources VBA

    Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre

  7. #7
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 161
    Points : 101
    Points
    101
    Par défaut
    Après modification, lors du clic sur le bouton, j'ai une petite fenêtre nommée "424", qui contient le message "Objet requis".

  8. #8
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut
    Salut byrdo,

    tu devrais vérifier si la bibliothèque DAO est activée dans les références du vb.

    Quand tu es dans la fenêtre VBE, tu cliques sur Outils référence et tu recherche la bibliothèque : Microsoft DAO 3.6 Object Library

    A+

    Jeannot
    Jeannot

    Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., Sources VBA

    Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre

  9. #9
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 161
    Points : 101
    Points
    101
    Par défaut
    Cette bibliothèque est déjà cochée.


  10. #10
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut
    Pourrais tu modifier le début du code comme suit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim MaTable as DAO.RecordSet
    Dim strSqlMaTable as String
    strSqlMatable = "SELECT * FROM Utilisateurs"
    Set MaTable = CurrentDb.OpenRecordset(strSqlMatable)
    On Error Resume Next
    With MaTable
    .AddNew
    .Fields("Nom") = Form_ajout!txtnom
    .Fields("PreNom")= Form_ajout!txtprenom
    .Fields("Service")= Form_ajout!lstservice
    .Update
    End With
    Vérifie également les noms de champ à utiliser

    A+

    Jeannot
    Jeannot

    Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., Sources VBA

    Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre

  11. #11
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 161
    Points : 101
    Points
    101
    Par défaut
    J'ai tenté la modification, mais sans succès.

    Comme j'avais utilisé tes explications précédentes (notamment rendre le formulaire dépendant de la table), je suis malgré tout parvenu à un résultat conforme à mes attentes.

    Cependant, j'avoue être agacé par le fait que je n'arrive pas à utiliser ce code VBA, qui serait quand même plus recherché et plus modulable en vue d'autres utilisations.

  12. #12
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut
    Désolé et j'avoue que je ne comprends pas j'utilise moi-même cette procédure pour ajouter des enregistrements dans des tables et je ne rencontre pas de problèmes.

    Un dernière solution (celle que j'utilise ...)
    Plutot que de saisir les noms de champs, je me sers de l'index en fonction de la position du champ dans la requete

    ainsi imaginons que la table soit Nom / Prenom / Service, la procédure donnerait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    .Fields(0) = txtNom
    .Fields(1) = txtPrenom
    .Fields(2) = txtService
    Remarque que l'index commence à 0

    Voilà ....

    A+
    Jeannot
    Jeannot

    Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., Sources VBA

    Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre

Discussions similaires

  1. Comment récupérer les champs d'un formulaire
    Par clyver dans le forum Langage
    Réponses: 4
    Dernier message: 28/02/2014, 22h03
  2. Réponses: 2
    Dernier message: 07/10/2008, 22h21
  3. [MySQL] Problème pour récupèrer les champs d'un formulaire qui se trouve dans un while
    Par mademoizel dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 21/03/2008, 14h59
  4. Récupérer les champs d'un formulaire dans une jsp
    Par lalyly dans le forum Struts 1
    Réponses: 1
    Dernier message: 19/04/2007, 10h50
  5. Réponses: 2
    Dernier message: 29/01/2007, 19h34

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