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 28/03/2011, 16h10   #1
Invité régulier
 
Inscription : octobre 2003
Messages : 25
Détails du profil
Informations forums :
Inscription : octobre 2003
Messages : 25
Points : 6
Points : 6
Par défaut Dupliquer des enregistrements

Bonjour,

Tout d'abord, je vous précise que mon niveau en VBA est assez faible.

Je souhaiterais pouvoir dupliquer les enregistrements d'une table en fonction des champs présents dans celle-ci.

Exemple d'une ligne de la "TableA" :

Champ 1 = Nom (Texte) : Dupont
Champ 2 = Année (Texte) : Vide pour tout le monde
Champ 3 = Montant (Monétaire) : 50,00 €
Champ 4 = RefContact (Numérique) : 4036 -> Liaison avec 1 autre table
Champ 5 = Année 2011 (Case à cocher) : True or False
Champ 6 = Année 2010 (Case à cocher) : True or False
Champ 7 = Année 2009 (Case à cocher) : True or False
Champ 8 = Année 2008 (Case à cocher) : True or False
Champ 9 = Année 2007 (Case à cocher) : True or False
Champ 10 = Année 2006 (Case à cocher) : True or False
Champ 11 = Année 2005 (Case à cocher) : True or False
Champ 12 = Année 2004 (Case à cocher) : True or False
Champ 13 = Année 2003 (Case à cocher) : True or False
Champ 14 = Année 2002 (Case à cocher) : True or False
Champ 15 = Année 2001 (Case à cocher) : True or False

Pour cette ligne, je souhaiterais pouvoir dupliquer autant de ligne que de cases à cocher dont la valeur est à "True" et insérer dans le champ 2 l'année correspondante.

De cette façon pour "Dupont", il y aurait les 3 lignes suivantes (cases à cocher 2011,2008 et 2006 = True) dans la table d'origine :

Ligne 1

Champ 1 = Nom (Texte) : Dupont
Champ 2 = Année (Texte) : 2011
Champ 3 = Montant (Monétaire) : 50,00 €
Champ 4 = RefContact (Numérique) : 4036 -> Liaison avec 1 autre table

Ligne 2

Champ 1 = Nom (Texte) : Dupont
Champ 2 = Année (Texte) : 2008
Champ 3 = Montant (Monétaire) : 50,00 €
Champ 4 = RefContact (Numérique) : 4036 -> Liaison avec 1 autre table

Ligne 3
Champ 1 = Nom (Texte) : Dupont
Champ 2 = Année (Texte) : 2006
Champ 3 = Montant (Monétaire) : 50,00 €
Champ 4 = RefContact (Numérique) : 4036 -> Liaison avec 1 autre table

Comment puis je faire cela ? J'ai 1700 enregistrements dans ma table et je me vois mal faire cela à la main.

Merci pour vos conseils et votre aide.
Vince26exe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 14h06   #2
Membre Expert
 
Homme Jacques Petiot
Indépendant développeur et formateur
Inscription : octobre 2007
Messages : 891
Détails du profil
Informations personnelles :
Nom : Homme Jacques Petiot
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Indépendant développeur et formateur
Secteur : Conseil

Informations forums :
Inscription : octobre 2007
Messages : 891
Points : 1 333
Points : 1 333
Hello
tu n'as besoin d'aucune programation pouur réaliser ton 'rève'
Il suffit de faire des requêtes ajout:
la première avec:
Nom, "2011", Montant, RefContact de la tableA avec Année 2011 (Case à cocher) = vrai
la deuxième avec:
Nom, "2010", Montant, RefContact de la tableA avec Année 2010 (Case à cocher) = vrai
ainsi de suite, ça fat juste 10 requêtes ajout à exéctuer une seule fois chacune
__________________
-------------------Simplifi----------comme si tout était simple--------
Simplifi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 18h56   #3
Membre éclairé
 
Homme Pierre-Jean
Développeur informatique
Inscription : février 2010
Messages : 306
Détails du profil
Informations personnelles :
Nom : Homme Pierre-Jean
Âge : 31
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : février 2010
Messages : 306
Points : 330
Points : 330
Envoyer un message via MSN à paidge
Salut,

Sinon voici une fonction (ça m'a permis de m'entraîner un ti peu ).
Tu places ce code dans un module :
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
Public Function Transfert(tblOrigine As String, tblDestination As String)
 
    Dim i As Integer, j As String
    Dim rstSrc As Recordset, rstDest As Recordset
    Set rstSrc = CurrentDb.OpenRecordset(tblOrigine)
    Set rstDest = CurrentDb.OpenRecordset(tblDestination)
 
    rstSrc.MoveFirst
 
    While Not rstSrc.EOF
        For i = 2001 To 2011
            j = CStr(i)
            If rstSrc(j) = -1 Then
                rstDest.AddNew
                rstDest("Nom") = rstSrc("Nom")
                rstDest("Annee") = i
                rstDest("Montant") = rstSrc("Montant")
                rstDest("RefContact") = rstSrc("RefContact")
                rstDest.Update
            End If
        Next i
        rstSrc.MoveNext
    Wend
 
    Set rstSrc = Nothing
    Set rstDest = Nothing
 
End Function
Puis sur l'évènement Click d'un formulaire tu mets :
Code :
Transfert "MaTable1", "MaTable2"
MaTable1 correspond au nom de ta table d'origine
MaTable2 correspond au nom de ta table de destination

Fais attention au nom et au type des champs(mon champ Année est Numérique et je l'ai écrit sans accent par exemple).

En un click tu transfert toutes tes données J'ai essayé et ça marche
paidge est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2011, 19h03   #4
Invité régulier
 
Inscription : octobre 2003
Messages : 25
Détails du profil
Informations forums :
Inscription : octobre 2003
Messages : 25
Points : 6
Points : 6
Merci beaucoup pour ces informations, j'ai choisi la première solution mais la seconde je la garde sous le coude, plus sympa je trouve.
Ca fonctionne !
Merci à tous les 2
Vince26exe 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 23h54.


 
 
 
 
Partenaires

Hébergement Web