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 :

Ajouter plusieurs enregistrements identiques en une fois [AC-2007]


Sujet :

VBA Access

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2011
    Messages : 63
    Points : 42
    Points
    42
    Par défaut Ajouter plusieurs enregistrements identiques en une fois
    Re bonjour,

    Je viens demander cette fois-ci une méthode pour, comme le dit le titre, saisir plusieurs enregistrements en une seule fois.

    J'ai un formulaire où je saisis mes informations. Ce formulaire contient une textbox dont la valeur par défaut est 1.
    Je souhaite réaliser une fonction permettant que le chiffre entrée dans cette textbox soit le nombre d'enregistrements saisis.

    Celà donne effectivement lieu à des doublons dont la seule différence sera leurs Id. Ceux-ci sont modifiés au fur et à mesure et au final n'ont plus grand chose en commun si ce n'est leur Marque et leur Modèle...

    Si ma demande n'est pas claire, je ferai un screenshot

    Pour le moment la saisie se fait en cliquant sur un bouton enregistrer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    'Bouton permettant d'ajouter un enregistrement à la table courante (T_Gestion)
    Private Sub btnEnregistrer_Click()
        DoCmd.RunCommand acCmdSaveRecord
        Form_frmLogiciel!lstResults.Requery
        MsgBox "Modifications enregistrés", vbOKOnly, "Confirmation enregistrement"
    End Sub
    Si quelqu'un a une idée, je suis preneur, je ne trouve pas vraiment ce que je veux dans les tutoriels car les doublons ne sont pas conseillés dans une bd

  2. #2
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Sij'ai compris ce que tu veux, alors peut-être quelque chose comme ça :
    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
    Private Sub btnEnregistrer_Click()
    Dim lngMaxID                                           As Long
    Dim lngNBRecordToCreate                                As Long
    Dim R                                                  As Long
    Dim SQL                                                As String
    Dim DB                                                 As DAO.Database
        'On prend la valeur max (éviter les doublons)
        lngMaxID = DMax("[IDGestion]", "T_Gestion")
        'on vérifie la valeur de nombre à créer
        lngNBRecordToCreate = Nz(Me!IDGestion, 0)
     
        If lngNBRecordToCreate Then
            Set DB = CurrentDb
            For R = 1 To lngNBRecordToCreate
                'On incrément l'ID avec le max de ce qui existe
                SQL = "INSERT INTO T_Gestion (IDGestion, Marque, Modèle) VALUES ( " & R + lngMaxID & ", '" & Me!Marque & "', '" & Me!Modèle & "')"
                DB.Execute SQL, dbFailOnError
            Next
            Me.lstResults.Requery
            MsgBox "Modifications enregistrés", vbOKOnly, "Confirmation enregistrement"
            If Not DB Is Nothing Then DB.Close
            Set DB = Nothing
        Else
            MsgBox "Si c'est 0 que tu entres, comment veux-tu que je créé des enregistrements !!!", vbExclamation, "Pffft"
        End If
    End Sub
    Argy

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2011
    Messages : 63
    Points : 42
    Points
    42
    Par défaut
    Merci argyronet pour ta réponse

    En fait mon formulaire de saisie comporte 27 entrées (textbox, combobox...), Modèle et Marque étaient de simples exemples, je ne sais pas à l'avance quels seront les champs communs aux divers enregistrements...

    Dans ce même formulaire j'ai une textbox "Nombre d'enregistrement(s)"
    Sa valeur par défaut est fixée à 1. Si je mets 4 comme valeur, lorsque je clique sur le bouton Enregistrer, je veux que l'enregistrement se fasse 4 fois dans ma table T_Gestion

  4. #4
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    C'est le cas, sauf que l'ID s'incrémente.
    Si tu ne veux pas, il ne faut pas qu'il soit indéxé et/ou primaire.
    S'il y a 27 champ, à toi de modifier la clause INSERT en conséquence.

    Argy

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2011
    Messages : 63
    Points : 42
    Points
    42
    Par défaut
    Effectivement, je peux mettre mes 27 champs dans la requête, je n'ai pas encore testé mais j'imagine que s'ils sont vides, ça passe!

    Sinon, peux-tu m'expliquer où est le nombre d'enregistrements saisis dans ma texbox dans ton code ? (valeur par défaut à 1)

    Merci beaucoup en tout cas

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2011
    Messages : 63
    Points : 42
    Points
    42
    Par défaut
    J'ai fait le fénéant, encore merci argyronet

    Voici mon code adapté avec la saisie dans une textbox:

    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
    Private Sub btnEnregistrer_Click()
        Dim lngMaxID As Long
        Dim lngNBRecordToCreate As Long
        Dim R As Long
        Dim SQL As String
        Dim DB As DAO.Database
        'On prend la valeur max (éviter les doublons)
        lngMaxID = DMax("[Id]", "T_Gestion")
        'on vérifie la valeur de nombre à créer
        'lngNBRecordToCreate = Nz(Me!Id, 0)
        lngNBRecordToCreate = txtNbRecord
     
        If lngNBRecordToCreate Then
            Set DB = CurrentDb
            For R = 1 To lngNBRecordToCreate
                'On incrément l'ID avec le max de ce qui existe
                SQL = "INSERT INTO T_Gestion (Id, Constr, Modèle) VALUES ( " & R + lngMaxID & ", '" & Me!Constr & "', '" & Me!Modèle & "')"
                DB.Execute SQL, dbFailOnError
            Next
            Form_frmLogiciel!lstResults.Requery
            MsgBox "Modifications enregistrés", vbOKOnly, "Confirmation enregistrement"
            If Not DB Is Nothing Then DB.Close
            Set DB = Nothing
        Else
            MsgBox "Si c'est 0 que tu entres, comment veux-tu que je créé des enregistrements !!!", vbExclamation, "Pffft"
        End If
    End Sub

  7. #7
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    Je ne savais pas comment s'appelaient tes champs donc j'ai imposé une norme compréhensive.
    Mon champ Me!IDGestion correspond à ton txtNbRecord qui correspond au champ de table Id.
    Il faut donc modifier le code comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lngNBRecordToCreate = Nz(Me!txtNbRecord, 0)
    Il faut laisser le Nz() de manière à ne pas avoir d'erreur 13 et faire en sorte que lngNBRecordToCreate soit égale à 0 si la valeur NULL est présente dans ce champ ce qui lèveerait une erreur 94.

    Il faut que ton contrôle txtNbRecord cible le champ numérique dans la table T_Gestion ; dans mon exemple, je l'avais nommé IDGestion.

    Voici le code modifié :
    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
    Private Sub btnEnregistrer_Click()
    Dim lngMaxID                                           As Long
    Dim lngNBRecordToCreate                                As Long
    Dim R                                                  As Long
    Dim SQL                                                As String
    Dim DB                                                 As DAO.Database
        'On prend la valeur max (éviter les doublons)
        lngMaxID = Nz(DMax("[Id]", "T_Gestion"), 0)
        'on vérifie la valeur de nombre à créer
        lngNBRecordToCreate = Nz(Me!txtNbRecord, 0)
     
        If lngNBRecordToCreate Then
            Set DB = CurrentDb
            For R = 1 To lngNBRecordToCreate
                'On incrément l'ID avec le max de ce qui existe
                SQL = "INSERT INTO T_Gestion (Id, Constr, Modèle) VALUES ( " & R + lngMaxID & ", '" & Nz(Me!Constr, "") & "', '" & Nz(Me!Modèle, "") & "')"
                DB.Execute SQL, dbFailOnError
            Next
            Me.lstResults.Requery
            MsgBox "Modifications enregistrés", vbOKOnly, "Confirmation enregistrement"
            If Not DB Is Nothing Then DB.Close
            Set DB = Nothing
            Me!txtNbRecord = 1
            Me!Constr = ""
            Me!Modèle = ""
        Else
            MsgBox "Si c'est 0 que tu entres, comment veux-tu que je créé des enregistrements !!!", vbExclamation, "Pffft"
        End If
    End Sub
    Et ça donne :
    Images attachées Images attachées  

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2011
    Messages : 63
    Points : 42
    Points
    42
    Par défaut
    Ca marche parfaitement avec ton complément

    Merci beaucoup pour tes explications

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ajouter plusieurs enregistrements à la fois.
    Par bluegone dans le forum IHM
    Réponses: 1
    Dernier message: 22/09/2011, 08h29
  2. Réponses: 4
    Dernier message: 20/07/2006, 21h10
  3. [Cookies] Plusieurs cookies créés en une fois?
    Par trihanhcie dans le forum Langage
    Réponses: 1
    Dernier message: 29/06/2006, 17h41
  4. Réponses: 9
    Dernier message: 14/10/2005, 13h46
  5. SQL et Access : ajouter plusieurs enregistrements
    Par Bernard M dans le forum Bases de données
    Réponses: 3
    Dernier message: 23/04/2004, 21h39

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