Filtre automatique, tri et VBA - VB/VBA/VBS - Programmation
Marsh Posté le 20-01-2006 à 09:43:53
Salut Zangel
Pour tester des cellules et ajouter des commentaire uniquement sur certaines cellules tu n'as pas besoin en VBA de trier ou de filtrer les colone il suffit de faire un test de valeur.
Je te propose le code suivant qui fait la mise en place de commentaires. Tu devrais pouvoir le modifier en fonction de tes besoins
Code :
|
@+
Marsh Posté le 20-01-2006 à 22:17:47
Watashi,
Oui je sais que je n'ai pas besoin de trier ou de filtrer les colonnes, mais étant donné que j'ai tellement de lignes à traiter, je préfère enlever les lignes inutiles pour accélérer la procédure. Ça prend environ 10 minutes à rouler toute la procédure. J'ai plusieurs critères en prendre en considération dans ma macro et j'ai plusieurs sous-macros reliées à cette procédure. C'est pour ça que ça prend autant de temps.
J'ai découvert qu'on pouvait faire un tri personnalisé (Outils, Options, Liste pers). Cette option est merveilleuse. J'ai fait une liste pour le tri personnalisé avec l'ordre que je veux (le status que je veux en premier). Dans ma macro, quand je suis rendu à un status non voulu, j'efface les lignes de la ligne active jusqu'à la fin. Ainsi, je sauve beaucoup de temps. J'ai fait le test et maintenant, ça me prendre 3-4 minutes pour rouler toute la procédure.
Zangel
watashi a écrit : |
Marsh Posté le 23-01-2006 à 08:57:36
ok bon courage
il est vrai que 10 minutes d'exécution de macro c'est très long. Une astuce que j'ai trouvé pour accélerer le traitement de grand tableau est de travailler sur des Arrays faire travailler la macros sur des données en "virtuel" et éviter les multiples lectures-écriture.
@+
Marsh Posté le 23-01-2006 à 11:20:56
zangel_xyz a écrit : |
salut zangel_xyz,
pour cela tu fais :
Columns("A:A" ).Select
Selection.Sort Key1:=Range("A1" ), Order1:=xlDescending
cela te fais un tri décroissant (xlAscending pour tri croissant) sur la colonne A
car je suposse que tes status sont "non actif" at "actif"
Marsh Posté le 23-01-2006 à 14:11:23
Watashi,
des arrays... hum ça pourrait m'intéressée, sauf que j'en ai jamais entendu parler. As-tu des site Web à me suggérer pour comprendre le tout?
merci.
watashi a écrit : ok bon courage |
Marsh Posté le 23-01-2006 à 16:11:43
zangel_xyz a écrit : Watashi, |
Salut zangel, les arrays sont des tableaux stockés en mémoire tu trouveras de bonne info dans l'aide de visual Basic dans excel. Pour ce qui est des sites web tu as les classiques VBFrance et Excellabo qui ont quelques informations dessus.
Voilà l'exemple d'une macro qui rempli un array à partir des données contenues dans 16 colonnes sur autant de ligne que besoin
Code :
|
Si tu as besoin d'infos en plus hesites pas
@+
Marsh Posté le 19-01-2006 à 22:14:14
Bonjour,
J'ai un fichier avec plus de 2000 lignes. Dans la colonne 2 de chaque ligne, le status est écrit. À l'aide d'un filtre automatique, je peux faire afficher les lignes pour le status que je veux uniquement. Jusque là, pas de problème. Ma macro le fait très bien.
Je dois ajouter un commentaire à toutes les lignes visibles suite au filtre automatique. Pour cela, je dois lire les lignes une à une. Pour ce faire, j'utilise ActiveCell.Offset(0, -1). Sauf qu'en faisant cela, Excel s'arrête au ligne qui sont cachés. Pour remédier à cela, j'ai laissé tomber le filtre automatique et j'ai ajouté une instruction qui supprime les lignes non voulues. Mais là ça prend un éternité à faire rouler la macro.
Comment je peux passer d'une ligne à une autre en allant seulement aux lignes sélectionnées par le filtre automatique?
Existe-t-il une façon de changer l'ordre d'un tri? Par exemple: je voudrais que le status "non actif" s'affiche en premier en faisant un tri.
merci