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 :

Optimiser code VBA


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 423
    Par défaut Optimiser code VBA
    Bonjour à tous,

    Je travail avec access 2003
    J'utilise des boucles pour effectuer une tâche, mais ce processus est très longue.

    Voici l'énoncé du problème :
    J'ai une table (Table_1) de la forme
    Table_1 (Idt, Date1, Lbl1, Date2, Lbl2)
    Lbl1 peut prendre les valeurs (A ou B) et Date1 (la date à laquelle la valeur Lbl1 a été affectée)
    Lbl2 peut prendre les valeurs (C ou D) et Date2 (la date à laquelle la valeur Lbl2 a été affectée)

    le but est de créer une nouvelle table (Table_2)
    Table_2 (Idt, Date_A, Date_B, Date_C, Date_D)

    Idt de la table(Table_2) est identique à Idt de la table (Table_1)
    Date_A est égale à la valeur de Date1 si Lbl1 est égale à "A"
    Date_B "" "" "" "" "" "B"
    Date_C est égla à la valeur de Date2 si Lbl2 est égale à "C"
    Date_D "" "" "" "" "" "D"

    J'ai procédé de la façon suivante :

    J'ai utilisé un recordset pour avoir la liste des identifiants (select distinct Idt from Table_1)

    J'ouvre le recordset
    Je le parcours aved la méthoe

    do
    J'Ouvre d'autres recordset

    select Date1 from Table_1 where Lbl1 = "A"

    Idem pour "B", "C" et "D"

    Les valeurs sont stokées dans des variables

    Et j'utilise la méthode Insert into pour renseiger la talbe Table_2

    loop while rs.eof = false

    En espérant que j'ai été suffisament clair
    Si quelqu'un a un autre moyen pour arriver à ce résultat (Méthode permettant d'accelérer le processus) !

    Merci
    Willy

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Par défaut
    pas besoin de boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Select idt, iif(lb1="A",date1,null) as dat1, iif(lb1="B",date1,null) as dat2, iif(lb2="C",date2,null) as dat3, iif(lb2="D",date2,null) as dat4
     
    From table1;

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 423
    Par défaut Merci
    Merci,

    Je vais essayer de réadapter mon code

    Willy

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 423
    Par défaut
    Bonjour,

    Tout d'abord merci pour la fonction (iif), c'est génial
    Mon problème s'est en parti résolu
    Existe-t-il une solution aussi simple pour résoudre la suite de mon problème
    Suite à l'utilisation de la fonction précédente, j'ai le résultat suivant :

    Pour un identifiant identiqaue, j'ai plusieur lignes par exemple :
    Idt = 1, Date_1 = Date, Date_2 = null
    Idt = 1, Date_1 = null, Date_2 = Date

    Je voudrais obtenir le résultat suivant :
    Idt = 1, Date_1 = Date, Date_2 = Date
    C'est-à-dire, regrouper les lignes ayant le même identifiant
    Je pourrais le faire avec des boucles, mais si vous avez une autre idée, je suis prenant



    Y a-t-il un moyen d'enrichir la requête qui m'a été proposée
    Est-t-il possible de détecter les valeurs des identifiants avec et sans doublon
    Je voudrais traîter séparemment les doublons, car je pourrais insérer dans la nouvelle table les lignes qui ne sont pas en doublon (Pour limiter le temp de traitement)

    Merci
    Willy

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Par défaut
    Citation Envoyé par willytito Voir le message

    Je voudrais obtenir le résultat suivant :
    Idt = 1, Date_1 = Date, Date_2 = Date
    C'est-à-dire, regrouper les lignes ayant le même identifiant
    http://www.developpez.net/forums/sho...d.php?t=442384

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 423
    Par défaut Merci
    Bonjour,

    J'ai été sur le lien et celà m'a donné des idées.
    J'avance dans ma résolution
    Merci

    Willy

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

Discussions similaires

  1. [XL-2010] Aide pour optimisation code VBA
    Par adelas93 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 27/11/2014, 13h56
  2. Optimisation code VBA Blocs With
    Par Ariaar dans le forum Général VBA
    Réponses: 0
    Dernier message: 13/12/2012, 17h15
  3. [VBA-E optimisation code] ameliorer la méthode pour cacher des lignes
    Par EvaristeGaloisBis dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/07/2008, 09h53
  4. Optimisation de code VBA
    Par MartinezGarcia dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 25/02/2008, 13h11
  5. Réponses: 13
    Dernier message: 20/04/2006, 15h37

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