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

Access Discussion :

Dupliquer les enregistrements d'une table Access par la valeur d'un champ de la table via VBA


Sujet :

Access

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Dupliquer les enregistrements d'une table Access par la valeur d'un champ de la table via VBA
    Bonjour, j’aimerai savoir si quelqu’un peut m’aider à résoudre un petit problème sur VBA ACCESS.
    Il s’agit de dupliquer des enregistrements d’une table Access un certain nombre de fois, basé sur la valeur d’un champ de la table. Je m’explique plus en détail.
    Voici la table la table

    Nom Prénom Nombre de convocation date de la première convocation
    Jean Dupond 3 12/09/2012
    Marie Blanchard 1 01/01/1999
    John Kerry 2 02/02/2010

    Ce que je souhaite obtenir, c’est de modifier la table ou d’en créer une autre qui duplique chaque enregistrement par le nombre de convocation de chaque individu et créer un quatrième champ ‘date de la prochaine convocation’ qui correspond a la date de la première convocation implémenter d’un mois a chaque ligne dupliquée.
    Le résultat donnerai quelque chose qui ressemble a ceci :

    Nom Prénom Nombre date de la Date de la
    de convocation première convocation prochaine convocation

    Jean Dupond 3 12/09/2012 12/10/2012
    Jean Dupond 3 12/09/2012 12/11/2012
    Jean Dupond 3 12/09/2012 12/12/2012
    Jean Dupond 3 12/09/2012 12/01/2013
    Marie Blanchard 1 01/01/1999 01/02/1999
    Marie Blanchard 1 01/01/1999 01/03/1999
    John Kerry 2 02/02/2010 02/03/2010
    John Kerry 2 02/02/2010 02/04/2010
    John Kerry 2 02/02/2010 02/05/2010

    Voici le code que j’ai écrit mais qui ne fonctionne pas .


    Sub dupliquer()
    Dim rst As Object
    Dim rst2 As Object
    Dim i As Integer
    Dim n2 As Integer
    Dim valeur As Integer
    Set rst = CurrentDb.OpenRecordset("Ma Table")
    Set rst2 = CurrentDb.OpenRecordset("Ma Table ")
    For i = 1 To rst![Nombre_de_convocation]
    rst2.AddNew
    rst2![ Nom] = rst![ Nom]
    rst2![Prenom] = rst![Prenom]
    rst2![Nombre_de_concovaction] = rst![Nombre_de_concovaction]
    rst2![Date_de_premiere_concovaction] = rst![ Date_de_premiere_concovaction]
    rst2![Date_de_prochaine_concovaction] = DateSerial(Year(rst.[ Date_de_premiere_concovaction]), Month(rst.[ Date_de_premiere_concovaction]) + i, 0)Next i
    rst.Close
    rst2.Close
    Set rst2 = Nothing
    End Sub

    Pourriez vous svp m’aider a l’améliorer ou la modifier complètement.
    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Madiabo,

    J'ai repris ton code et changé quelques petites choses (tu renommeras le nom des champs pour l'adapter à ton cas de situation).

    Il est préférable d'utiliser deux tables et ceci pour deux raisons évidentes :

    1. en remplissant ta table et en bouclant dessus, les nouveaux enregistrements intègrent cette boucle et tu arrives à une boucle sans fin
    2. en cas d'erreur tu vides la table source et garde l'historique des convocations initiales.

    Ensuite il te manquait un update (écriture de l'enregistrement) et le movenext (boucle sur les enregistrements de la table origine).



    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
    Sub dupliquer()
    Dim rst As Recordset
    Dim rst2 As Recordset
    Dim i As Integer
    Dim n2 As Integer
    Dim valeur As Integer
    Set rst = CurrentDb.OpenRecordset("MaTable")
    Do Until rst.EOF
    Set rst2 = CurrentDb.OpenRecordset("MaTable2")
    For i = 1 To rst![NombreConvocations]
        rst2.AddNew
            rst2![Nom] = rst![Nom]
            rst2![Prenom] = rst![Prenom]
            rst2![NombreConvocations] = rst![NombreConvocations]
            rst2![DateConvocationInitiale] = rst![DateConvocationInitiale]
            rst2![DateProchaineConvocation] = DateSerial(Year(rst![DateConvocationInitiale]), Month(rst![DateConvocationInitiale]) + i, 0)
        rst2.Update
    Next i
    rst.MoveNext    ' Enregistrement suivant
    Loop
    '
    ' Fermeture et libération des objets
    '
    rst.Close
    rst2.Close
    Set rst = Nothing
    Set rst2 = Nothing
    End Sub
    Bonne continuation

    JimBoLion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci JimBoLion. ca fonctionne parfaitement

  4. #4
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Madiabo,

    Tu penseras à mettre résolu

    JimBoLion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

Discussions similaires

  1. Réponses: 7
    Dernier message: 18/03/2013, 20h39
  2. Réponses: 1
    Dernier message: 07/05/2012, 11h03
  3. afficher les enregistrements d'une table Access
    Par melancolie dans le forum Accès aux données
    Réponses: 1
    Dernier message: 22/11/2010, 01h01
  4. [MySQL] modifier les enregistrement d'une table mysql par un formulaire
    Par belakhdarbts10 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 15/05/2007, 11h09
  5. Rechercher un mot dans les enregistrements d'une table access
    Par codial dans le forum Bases de données
    Réponses: 3
    Dernier message: 08/11/2006, 21h35

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