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 :

Tri rapide en mémoire et regroupement [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2003
    Messages
    604
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 604
    Par défaut Tri rapide en mémoire et regroupement
    Bonjour,
    Je souhaite faire apparaitre des données regroupées par type dans un bon de commande.
    Cependant ma procédure d'ecriture des données me parait relativement lente.
    ( on voit les données s'ecrire une à une, bien que je sois en mode Enable.events=false)
    Au lieu d'écrire les données par une à une dans chaque cellule de ma feuille Excel et faire ensuite une requette Sql sur les données de la feuille pour les regrouper dans l'ordre qu'il me convient, ne pourrais je pas les mettre dans un tableau et ensuite interroger ce tableau pour sortir mes données rapidement et efficacement dans l'ordre qu'il me convient ?

    J'espère avoir été clair, N'hésitez pas si vous voulez me demander des précisions.

    D'avance merci de vos réponses.

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 174
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    1) Pour accélérer l'affichage écran, ce n'est pas Enable.events=false mais Application.ScreenUpdating = False
    2) Tu ne dis pas comment sont organisées tes données, il est difficile d'apporter une réponse correcte mais s'il s'agit d'exporter un type de données d'une feuille vers une autre et ensuite les trier, j'utiliserais
    a) La méthode AdvancedFilter de l'objet Range (Filtre avancé avec exportation).
    b) La méthode Sort du même objet (Tri).
    Cette opération ne prendra pas plus de 30 secondes
    3) Tu évoques une requête SQL, tes données viennent-elle d'Access ou utilises-tu le modèle ADO ?
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre éclairé
    Inscrit en
    Janvier 2003
    Messages
    604
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 604
    Par défaut
    Bonjour,
    Pour être plus clair, dans une premiere passe je selectionne mes données dans plusieurs feuilles en fonction de différents critères.
    J'ai fait un premier export et je constate que les données que j'affiche mettent un certain temps à remplir ma feuille cible.
    Je pourrais ensuite faire une requette SQL dans ma feuille Excel avec ADO pour rassembler mes données correctement et les grouper comme le souhaite l'utilisateur (en SQL group by sur une PlageNommee + order by).
    Précision je ne fais pas d'Access seulement du SQL avec Excel.
    Mais toute cette procédure dure effectivement plus que 15 secondes.
    Du coup je me demandais si je ne peux pas définir un type en Ram qui serait peut être plus rapide que passer par des objets de feuille Excel style Range sur lequel il reste à lancer un Sort.
    J'ai vu que les procédures de QuickSort que proposait Boisgontier était rapide.
    Alors je me disais qu'il serait peut être plus rapide de définir un type
    Type...End Type
    géré dans un tableau et avec l'algo adéquat le traiter rapidement. C'est peut être pas possible mais je veux éviter à mes utilisateurs de patienter plus de 30 secondes pour sortir le bon de commande aux clients. (pendant ce temps le client risque de changer d'avis )
    Merci d'avance de vos idées.

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 174
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je ne connais pas le nombre d'enregistrements que tu traites mais très sincèrement le Tri d'excel est pratiquement instantané. (Dans ma signature tu verras un lien avec une procédure toute faite (fonctionne aussi en version 2003) avec des exemples.
    Les exportations avec AdvancedFilter sont également très rapide. Une exportation de 10000 lignes avec filtres en +/- 2 secondes.
    Voir tutoriel Les filtres avancés ou élaborés dans Excel
    Pour d'autres types d'exportations, j'ai des codes avec classeurs exemples sur mon blog mais également dans la rubrique Contribuez.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre éclairé
    Inscrit en
    Janvier 2003
    Messages
    604
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 604
    Par défaut
    Super, j'ignorais que l'on pouvait faire tant de choses dans les filtres.
    Merci bien.

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

Discussions similaires

  1. Pb tri rapide
    Par Vinzius dans le forum C
    Réponses: 9
    Dernier message: 10/04/2006, 18h55
  2. tri rapide étéractif
    Par renardmp dans le forum Général Python
    Réponses: 3
    Dernier message: 20/02/2006, 02h12
  3. Tri rapide
    Par mikees dans le forum Assembleur
    Réponses: 1
    Dernier message: 19/12/2005, 21h53
  4. Tri Rapide sur un CLIST
    Par ensisoft dans le forum MFC
    Réponses: 9
    Dernier message: 13/12/2005, 23h22
  5. Tri rapide
    Par DBBB dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 10/12/2004, 17h54

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