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

Macros et VBA Excel Discussion :

[VBA]performance de combinaison,tri et élimination doublons


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Inscrit en
    Janvier 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Janvier 2006
    Messages : 103
    Points : 98
    Points
    98
    Par défaut [VBA]performance de combinaison,tri et élimination doublons
    Bonjour tour le monde,

    je suis devant un pb un peu complexe.

    J'ai des fichiers txt en entrée contient 80 milles lignes de données.

    Parmi ces lignes de données, chacun est un produit ou un sous-produit appartenant à un produit et qui le suivent.
    Il y a à peu près 10000 produits en total.
    exemple sur cette colonne "Nom"
    ex:
    nom
    Produit1
    ss-produit1
    ss-produit2
    ss-produit3
    ss-produit4
    Produit2
    ss-produit3
    ss-produit1
    Produit3
    ss-produit6
    ss-produit8
    ss-produit1

    Mon but est de prendre cette colonne depuis le fichier txt, faire le calcul de corrélation possible de tous les ss-produits.

    ça veut dire dans mon fichier de sortie final

    je dois avoir la couple"ss-produit1,ss-produit2" qui sont présents ds produit1
    je dois avoir la couple"ss-produit6,ss-produit8" qui sont présents ds produit3

    Le résultat final contient à peu près 60 milles combinaisons possibles .


    Gentlemen, si vous avez bien compris ce pb, je commence donc à vous raconter ma solution actuelle:

    Je lis d'abord le fichier txt, et mettre les infos de la colonne "nom" ds une collection, 80000, ultra rapide.

    après, qd j'identifie le début d'un produit et la fin, je fais donc, une boucle de début de ses ss produit à la fin de ses ss-produit, pour coupler, et verifier si la coupe n'est pas ds ma collection finale à retourner, j'ajoute ds la collection(J'applique un peu l'idée de tri d'insertion ici et faire l'élimination de doublons en même temps)

    Mais le pb est qu'au bout d'avoir + de 6000 couples, ds la collection, l'ajout devient de + en + lent, parce que pour ajouter un truc, je suis obligé de parcourir 6000 trucs, imagines après ce sera encore plus lent.

    Mon souci est que la collection ne peuvent pas ajouter un élément à sont milieu, si ceci devient possible, dès le début, je peux mettre la collection ds bon ordre.
    et faire une condition si > i-1 and < i then insert between, je pense ceci permet de progresser bcp sur la performance.

    Il existe un object permettant d'ajouter des élts au milieu?


    Je suis désolé, mais les méthodes de la collection est trop faibles, seulement 4 méthodes disponible...

    Si vous avez des idées, n'hésitez pas.

    Merci bien tout le monde!!

  2. #2
    Membre régulier
    Inscrit en
    Janvier 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Janvier 2006
    Messages : 103
    Points : 98
    Points
    98
    Par défaut
    Ma question en gros est qu'il existe qch comme HashMap en Java, qui permet d'ajouter des éléments au milieu d'une table ou collection?

  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Citation Envoyé par tangjuncn
    Ma question en gros est qu'il existe qch comme HashMap en Java, qui permet d'ajouter des éléments au milieu d'une table ou collection?
    Non, enfin je ne connais pas... Par contre, tu peux définir un tableau à plusieurs dimensions... Malheureusement, si l'on peut redimensionner le tableau, on ne peut par redéfinir les dimensions.
    ex : dans Tableau(i,j) tu peux redimensionner j mais pas i
    Ceci dans l'hypothèse où tu passerais par un tableau à défaut de HacheMap
    Sinon, avec Excel, et compte tenu du nombre de lignes, tu peux insérer une page par produit et une colonne par sous-produit. Ta page portant le nom du produit.
    Mais il ya peut-être d'autres solutions plus sioux...
    J'ai une idée mais je vais voir si c'est facilement réalisable et... utilisable

  4. #4
    Membre régulier
    Inscrit en
    Janvier 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Janvier 2006
    Messages : 103
    Points : 98
    Points
    98
    Par défaut
    hehe
    merci bien
    actuellement je suis en train d'ecrire des functions pour pouvoir réaliser l'idée.
    Mais, j'ai l'impression que qd je veux décaler tous les élt d'une position vers la droite pour ajouter une par

    set Collect.item(j)=Collect.item(j-1)
    ou sans set,

    il me disent toujours "Object requied"

    Tu vois peut-etre l'erreur?
    dans tous mes items de collection, ce n'est que des String.

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Tu as créé une collection ou Collect est un tableau ?

  6. #6
    Membre régulier
    Inscrit en
    Janvier 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Janvier 2006
    Messages : 103
    Points : 98
    Points
    98
    Par défaut
    Je suis peut-etre obligé de dire que je suis con,

    j'ai l'impression dans collection.add qu'on a des champs optionels comme "before" et "after".
    ça me sauve peut-etre la vie
    Je vais tester

  7. #7
    Membre régulier
    Inscrit en
    Janvier 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Janvier 2006
    Messages : 103
    Points : 98
    Points
    98
    Par défaut
    c une collection,

    j'arrive finalement à ajouter dynamiquement les élts

    le sytaxe qui marche est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Collect.Add chaine, , Before:=i
    chaine est un String, i est mon index en Long

    J'ai trouvé +sieurs exemple, seulement celui-ci marche.

    l'exemple est là:
    http://www.info-3000.com/vbvba/collection.php

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Ok.
    Je reviens sur mon idée. Juste pour l'idée, tout de suite je n'ai pas le temps d'aller plus loin.
    Le premier mémorise les noms de produits
    Un second tableau les ssproduits et l'index du produit dans le TableauProduits

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim TableauProduits()
    Dim TableauSsProduits(1 To 2, 1)
    Pour chaque produit trouvé
        i = i + 1
        Redim Preserve TableauProduits(i)
        TableauProduits(i) = LeProduit
        Tant que le produit ne change pas
             j = j + 1
             ReDim Preserve TableauSsProduits(1 To 2, 1 To j)
             TableauSsProduits(1,j) = i
             TableauSsProduits(2,j) = SsProduit  ' => SsProduit(TableauProduits(i))
             'A ce niveau de la boucle TableauProduits(i) est toujours je même, pas besoin de before ^^^
        loop
    Loop
    A+

    Edit
    J'ai corrigé un bêêêtise

  9. #9
    Membre régulier
    Inscrit en
    Janvier 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Janvier 2006
    Messages : 103
    Points : 98
    Points
    98
    Par défaut
    Je vois bien ce que tu veux dire chef.
    je vais essayer les 2 pour comparer la performance entre collection et table de variant.
    Je reviens lundi pour les 2.
    Bon we!!

Discussions similaires

  1. [VBA-E]Faire un tri sans activer la feuille
    Par Lahax dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 26/05/2006, 12h05
  2. Réponses: 2
    Dernier message: 12/05/2006, 08h35
  3. [VBA-E] répéter un tri décroissant pour plusieurs lignes
    Par rajmoule dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 30/03/2006, 17h12
  4. [Performances]Filtre et tri en relation avec DB
    Par stoukou dans le forum Général Java
    Réponses: 6
    Dernier message: 19/09/2005, 11h46
  5. Recherche et tri sur des doublons XSLT
    Par MusSDev dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 01/06/2005, 09h27

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