Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/07/2011, 15h36   #1
Nouveau Membre du Club
 
Homme
Étudiant
Inscription : 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 : 27
Points : 27
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 :
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
facedeharicot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2011, 16h22   #2
Rédacteur/Modérateur

 
Avatar de argyronet
 
Homme Jean-Philippe AMBROSINO
Panseur de bobos en solutions ETL
Inscription : mai 2004
Messages : 3 650
Détails du profil
Informations personnelles :
Nom : Homme Jean-Philippe AMBROSINO
Localisation : France

Informations professionnelles :
Activité : Panseur de bobos en solutions ETL
Secteur : Finance

Informations forums :
Inscription : mai 2004
Messages : 3 650
Points : 6 209
Points : 6 209
Envoyer un message via MSN à argyronet
Bonjour,

Sij'ai compris ce que tu veux, alors peut-être quelque chose comme ça :
Code :
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
__________________
Ils comptent sur vous...

Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

Web Site@Mail
Livres : VBA pour OFFICE 2007 et MICROSOFT ACCESS 2007
Nouveau Tutoriel : Déployer vos applications avec Microsoft Access 2010
MDB Viewer : Visionneuse Access v4.0
argyronet est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/07/2011, 16h55   #3
Nouveau Membre du Club
 
Homme
Étudiant
Inscription : 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 : 27
Points : 27
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
facedeharicot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2011, 17h11   #4
Rédacteur/Modérateur

 
Avatar de argyronet
 
Homme Jean-Philippe AMBROSINO
Panseur de bobos en solutions ETL
Inscription : mai 2004
Messages : 3 650
Détails du profil
Informations personnelles :
Nom : Homme Jean-Philippe AMBROSINO
Localisation : France

Informations professionnelles :
Activité : Panseur de bobos en solutions ETL
Secteur : Finance

Informations forums :
Inscription : mai 2004
Messages : 3 650
Points : 6 209
Points : 6 209
Envoyer un message via MSN à argyronet
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
__________________
Ils comptent sur vous...

Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

Web Site@Mail
Livres : VBA pour OFFICE 2007 et MICROSOFT ACCESS 2007
Nouveau Tutoriel : Déployer vos applications avec Microsoft Access 2010
MDB Viewer : Visionneuse Access v4.0
argyronet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2011, 17h22   #5
Nouveau Membre du Club
 
Homme
Étudiant
Inscription : 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 : 27
Points : 27
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
facedeharicot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2011, 17h47   #6
Nouveau Membre du Club
 
Homme
Étudiant
Inscription : 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 : 27
Points : 27
J'ai fait le fénéant, encore merci argyronet

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

Code :
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
facedeharicot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 09h51   #7
Rédacteur/Modérateur

 
Avatar de argyronet
 
Homme Jean-Philippe AMBROSINO
Panseur de bobos en solutions ETL
Inscription : mai 2004
Messages : 3 650
Détails du profil
Informations personnelles :
Nom : Homme Jean-Philippe AMBROSINO
Localisation : France

Informations professionnelles :
Activité : Panseur de bobos en solutions ETL
Secteur : Finance

Informations forums :
Inscription : mai 2004
Messages : 3 650
Points : 6 209
Points : 6 209
Envoyer un message via MSN à argyronet
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 :
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 :
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
Type de fichier : jpg facedeharicot.JPG (18,0 Ko, 6 affichages)
__________________
Ils comptent sur vous...

Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

Web Site@Mail
Livres : VBA pour OFFICE 2007 et MICROSOFT ACCESS 2007
Nouveau Tutoriel : Déployer vos applications avec Microsoft Access 2010
MDB Viewer : Visionneuse Access v4.0
argyronet est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 27/07/2011, 13h38   #8
Nouveau Membre du Club
 
Homme
Étudiant
Inscription : 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 : 27
Points : 27
Ca marche parfaitement avec ton complément

Merci beaucoup pour tes explications
facedeharicot est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h44.


 
 
 
 
Partenaires

Hébergement Web