Gain de vitesse sur Macro

Jo

XLDnaute Nouveau
Bonjour à tous,

Je réalise une macro avec une ligne de commande qui se répète un grand nombre de fois et qui fait tourner l'ordi quelques secondes/minutes.
Je souhaiterai diminuer ce temps de calculs.

Est-il possible d'avoir un code qui réalise la même chose mais beaucoup plus rapide ?

Voici le code :

Range("BASE").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
"BB10000:BL10001"), CopyToRange:=Range("BO10000"), Unique:=False
Range("BO:CE,CG:CI").Select
Selection.Delete
ActiveWorkbook.Names.Add Name:="CCCC1", RefersToR1C1:="=Feuil3!R10000C67:R10020C67"


L'objectif étant de copier une base de données "filtrées" en fonction de critères prédéfinis et de la coller à un endroit.
Ensuite supprimer les colonnes inutiles.
Puis de renommer cette plage de données.

Merci d'avance de vos conseils,
Bien cordialement,
Jo
 

sourcier08

XLDnaute Occasionnel
Re : Gain de vitesse sur Macro

Salut Jo, le forum.

Tu peux déjà supprimer la méthode sélect et empêcher l'affichage à l'écran lors de l'exécution de ta macro.

Code:
Application.ScreenUpdating= False

Range("BASE").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
"BB10000:BL10001"), CopyToRange:=Range("BO10000"), Unique:=False
Range("BO:CE,CG:CI").Delete
ActiveWorkbook.Names.Add Name:="CCCC1", RefersToR1C1:="=Feuil3!R10000C67:R10020C67"

Application.ScreenUpdating= True

Sans le fichier sous la main, on n'arrivera pas à grand chose.
 

Jo

XLDnaute Nouveau
Re : Gain de vitesse sur Macro

Salut Sourcier,

Merci pour tes conseils.
J'ai enlevé la méthode Select aux endroits où je pouvais.
Ca ne m'économise pas beaucoup de temps mais c'est toujours ça !

Pour empêcher l'affichage à l'écran j'avais déjà mis cette commande.

As-tu d'autres conseils peut être ?

Merci.
Jo
 

Jo

XLDnaute Nouveau
Re : Gain de vitesse sur Macro

Bonjour MJ13,

Je le fais sur une autre feuille le filtre avancé.
Je suis sur la feuil3 imaginons et je vais chercher mes "bases" filtrées sur une autre feuille.
Je colle ces bases sur la feuil3.
 

Jo

XLDnaute Nouveau
Re : Gain de vitesse sur Macro

Re-bonjour à tous,

Voici le fichier d’exemple.
La base de données est très courte car ne passait pas dans les tuyaux.
L’idée est d’agrandir la base copier/coller la première ligne jusqu’à environ 15000 lignes pour se rendre compte du temps de calcul.
Ensuite renommez la base de données « BASE ».
Puis cliquez sur le bouton macro en haut à gauche de la Feuil1.
L’objectif serait de trouver un code qui réalise la même manipulation mais beaucoup plus rapidement presque instantané si possible.

Merci de vos conseils,
Jo
 

Pièces jointes

  • BASE.xls
    42.5 KB · Affichages: 39
  • BASE.xls
    42.5 KB · Affichages: 39
  • BASE.xls
    42.5 KB · Affichages: 35

Misange

XLDnaute Barbatruc
Re : Gain de vitesse sur Macro

Bonjour MJ13,

Je le fais sur une autre feuille le filtre avancé.
Je suis sur la feuil3 imaginons et je vais chercher mes "bases" filtrées sur une autre feuille.
Je colle ces bases sur la feuil3.


Bonjour

je ne peux qu'appuyer la suggestion de Michel d'utiliser le filtre avancé. Pas besoin de le faire par macro, l'outil filtre avancé le fait.
Et tu peux définir le nom de la base de données d'arrivée (et de départ) de façon dynamique, soit avec une liste, soit avec la fonction decaler. Mais pour cela il est impératif que les noms des champs soient identiques entre les critères de filtre et la base de données. (pas forcément l'ordre ou le nombre de champs mais les noms des champs oui).
Tu as mis dans ton exemple pays : France, alors que le champ pays n'existe pas dans la base de données
Ce lien n'existe plus
 

Jo

XLDnaute Nouveau
Re : Gain de vitesse sur Macro

Bonjour à tous.

Sourcier j'ai appliqué tes conseils, le temps de calcul a été divisé par 2 environ !
Merci beaucoup pour tes précieux conseils.

Misange je vais tester tes astuces et vous tiens au courant.

Merci beaucoup pour votre aide.
Bonne journée à tous
 

Jo

XLDnaute Nouveau
Re : Gain de vitesse sur Macro

Misange,

"Tu as mis dans ton exemple pays : France, alors que le champ pays n'existe pas dans la base de données"

Je ne comprends pas car dans la base de données ci-dessus je vois bien la colonne A = PAYS avec comme données France !?

"je ne peux qu'appuyer la suggestion de Michel d'utiliser le filtre avancé. Pas besoin de le faire par macro, l'outil filtre avancé le fait.
Et tu peux définir le nom de la base de données d'arrivée (et de départ) de façon dynamique, soit avec une liste, soit avec la fonction decaler."

Concernant le fait d'utiliser le filtre avancé, je ne vois pas trop la méthode ? Peux-tu être plus précis avec un petit fichier éventuellement ? [ Désolé de mon niveau peut être assez limité :) ]

Merci beaucoup !
 

Misange

XLDnaute Barbatruc
Re : Gain de vitesse sur Macro

Oups oui le pays y était bien :)

un exemple avec ta base en PJ
Vitesse : immédiat

1) se placer sur la feuille d'arrivée
2) sélectionner B1:M2
3) lancer le filtre avancé
4) corriger : plage = base et non B2:M6 (mais il faut quand même faire comme ça !)
critère B2:M6
copier dans : la ligne de titre de la base de sortie qui ne contient pas nécessairement tous les items ni dans le même ordre

Base est un nom défini de façon dynamique qui comporte toute la base de données, y compris la ligne de titre
si on utilise la fonction liste dans 2003 ou tableaux ensuite, il faut écrire (pour les tableaux) = base[#TOUT] avec un tableau nommé base, de façoon à inclure la ligne de titre (c'est obligatoire !)
on peut aussi bien sur entrer les coordonnées de la base avec sa ligne de titre ($A$3:$V$27)
tu peux de même nommer de façon dynamique la base d'arrivée.
 

Pièces jointes

  • filtreavancé.xls
    60.5 KB · Affichages: 22

Jo

XLDnaute Nouveau
Re : Gain de vitesse sur Macro

Misange,

Génialissime.

Tu viens de m'apprendre qu'on pouvait aussi filtrer les colonnes qu'on souhaite dans la base d'arrivée avec l'en-tête de colonne. Et en plus dans le désordre ...

Ta formule DECALER pour nommer la "base" est aussi très bonne à prendre !

Un grand merci pour ton aide qui me sera très utile !
 

Discussions similaires

Statistiques des forums

Discussions
312 415
Messages
2 088 235
Membres
103 776
dernier inscrit
Floortin