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 18/08/2011, 13h02   #1
Invité de passage
 
Homme
Étudiant
Inscription : août 2011
Messages : 3
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Maroc

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2011
Messages : 3
Points : 1
Points : 1
Par défaut Dupliquer des enregistrements selon la valeur d'un champ

Bonjour

Je voudrais dupliquer N lignes en dessous d'une ligne
1) se positionner sur un enregistrement x ( là : je lis une valeur N )
2) Inserer N lignes juste en dessous de la ligne x
3) Copier toute la ligne x
4) Coller toute la ligne X sur les N lignes suivantes en incrémentant index par 1

Exemple :

__Champ1__N____index
1___A_____2
2___B_____1
3___C_____3


Resultat :


___Champ1__N__index
1___A______2____1
2___A______2____2
3___B______1____1
4___C______3____1
5___C______3____2
6___C______3____3


Comment Faire ???

Marciii D'avance
youssefbsf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 14h02   #2
Membre émérite
 
Conseil + Formation
Inscription : février 2010
Messages : 583
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Conseil + Formation

Informations forums :
Inscription : février 2010
Messages : 583
Points : 885
Points : 885
Bonjour

Ta question montre une approche un peu trop excellienne.

Dans une base de données, les enregistrements se placent les uns à la suite des autres, le tri n'est qu'une vue.

Crées un table contenant un champ et remplis là avec les valeurs de 1 à N (selon la valeur maximum N de ton champ N).
Appelons la SCALAIRE par exemple de même que le champ unique

Ensuite crées une requête
Code :
1
2
3
4
SELECT matable.champ1, matable.N, scalaire.scalaire AS [index]
FROM matable, scalaire
WHERE (((scalaire.scalaire)<=[N]))
ORDER BY matable.nom, matable.N, scalaire.scalaire;
Tu peux toujours convertir cette requête en requête ajout et l'intéger à du VBA.

Ton exemple ne correspond d'ailleurs pas à ton énoncé car on ne vois pas la ligne X telle quà l'origine.
78chris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 14h12   #3
Membre régulier
 
Guillaume
Inscription : décembre 2007
Messages : 161
Détails du profil
Informations personnelles :
Nom : Guillaume
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations forums :
Inscription : décembre 2007
Messages : 161
Points : 91
Points : 91
Effectivement ça ressemble plus à une question Excel...

Ce n'est pas très clair. Où veux-tu effectuer celà ? Dans une nouvelle table ?

Voici une autre approche par recordset :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Public Sub Dupliquer()
    Dim rst, rst1 As DAO.Recordset
    Dim i As Integer
 
    Set rst = CurrentDb.OpenRecordset("MaTableSource")
    Set rst1 = CurrentDb.OpenRecordset("MaTableDestination")
 
    While Not rst.EOF
        For i = 1 To rst.Fields("N").Value
            rst1.AddNew
            rst1.Fields("champ1").Value = rst.Fields("champ1").Value
            rst1.Fields("N").Value = rst.Fields("N").Value
            rst1.Fields("Index").Value = i
            rst1.Update
        Next i
        rst.MoveNext
    Wend
 
    rst.Close
    rst1.Close
    Set rst = Nothing
    Set rst1 = Nothing
End Sub
dut-dut est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 18/08/2011, 14h27   #4
Invité de passage
 
Homme
Étudiant
Inscription : août 2011
Messages : 3
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Maroc

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2011
Messages : 3
Points : 1
Points : 1
Citation:
Envoyé par dut-dut Voir le message
Effectivement ça ressemble plus à une question Excel...

Ce n'est pas très clair. Où veux-tu effectuer celà ? Dans une nouvelle table ?

Voici une autre approche par recordset :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Public Sub Dupliquer()
    Dim rst, rst1 As DAO.Recordset
    Dim i As Integer
 
    Set rst = CurrentDb.OpenRecordset("MaTableSource")
    Set rst1 = CurrentDb.OpenRecordset("MaTableDestination")
 
    While Not rst.EOF
        For i = 1 To rst.Fields("N").Value
            rst1.AddNew
            rst1.Fields("champ1").Value = rst.Fields("champ1").Value
            rst1.Fields("N").Value = rst.Fields("N").Value
            rst1.Fields("Index").Value = i
            rst1.Update
        Next i
        rst.MoveNext
    Wend
 
    rst.Close
    rst1.Close
    Set rst = Nothing
    Set rst1 = Nothing
End Sub
Merciiii !!! Ca Marche
youssefbsf 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 16h12.


 
 
 
 
Partenaires

Hébergement Web