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 :

Dupliquer des enregistrements selon la valeur d'un champ [AC-2007]


Sujet :

VBA Access

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    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 : 4
    Points
    4
    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

  2. #2
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 405
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 405
    Points : 16 245
    Points
    16 245
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 175
    Points : 129
    Points
    129
    Par défaut
    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 : 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
    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

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    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 : 4
    Points
    4
    Par défaut
    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 : 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
    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

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

Discussions similaires

  1. [AC-2010] Compter des enregistrements selon 2 critères sur 2 champs différents
    Par nlbmoi dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 03/07/2015, 11h10
  2. Regrouper des données selon les valeurs d'un champ
    Par ecarbill dans le forum Requêtes
    Réponses: 1
    Dernier message: 01/06/2015, 08h30
  3. [AC-2003] Modification d'un enregistrement selon la valeur d'un champ
    Par jeankliss dans le forum VBA Access
    Réponses: 4
    Dernier message: 25/07/2011, 18h57
  4. Lucene : éliminer des documents selon la valeur d'un champ
    Par yannux dans le forum Zend Framework
    Réponses: 2
    Dernier message: 18/07/2008, 11h55
  5. Réponses: 2
    Dernier message: 30/11/2007, 18h54

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