Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2501 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Filtre automatique, tri et VBA

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Filtre automatique, tri et VBA

n°1287944
zangel_xyz
Posté le 19-01-2006 à 22:14:14  profilanswer
 

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

mood
Publicité
Posté le 19-01-2006 à 22:14:14  profilanswer
 

n°1288083
watashi
La démotivation : JAMAIS !
Posté le 20-01-2006 à 09:43:53  profilanswer
 

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 :
  1. Sub CommentaireSelonContenu()
  2. 'Déclaration des variable
  3. Dim i As Integer 'Variable pour la boucle
  4. Dim DerniereLigne As Double
  5. Dim TexteCommentaire As String
  6. 'Mise en place de la boucle pour parcourir le tableau
  7. With Sheets(1) 'définir la feuille à traiter
  8.     DerniereLigne = .Cells(65536, 1).End(xlUp).Row
  9.     For i = 1 To DerniereLigne
  10.         Select Case .Cells(i, 1).Value 'mettons que le critère soi dans la colonne 1
  11.             Case Is = 0
  12.                 TexteCommentaire = "Affaire terminée"
  13.             Case Is = 1
  14.                 TexteCommentaire = "Attente paiement"
  15.             '...
  16.             '...
  17.             Case Else
  18.                 TexteCommentaire = ""
  19.         End Select
  20.         If TexteCommentaire <> "" Then
  21.             With .Cells(i, 2) 'Mettons que tu veuilles le commentaire sur la colone B
  22.                 .Select
  23.                 .ClearComments  'enleve les commentaire s'il y en avait avant
  24.                 .AddComment
  25.                 .Comment.Text Text:=TexteCommentaire
  26.             End With
  27.         Else
  28.         End If
  29.     Next i
  30. End With
  31. End Sub


@+


---------------
Je bidouillle c'est sur... Mais j'essaye de faire en sorte que ça marche ;-)
n°1288671
zangel_xyz
Posté le 20-01-2006 à 22:17:47  profilanswer
 

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 :


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.
@+


n°1289842
watashi
La démotivation : JAMAIS !
Posté le 23-01-2006 à 08:57:36  profilanswer
 

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.
@+


---------------
Je bidouillle c'est sur... Mais j'essaye de faire en sorte que ça marche ;-)
n°1289906
DamienCYS
Posté le 23-01-2006 à 11:20:56  profilanswer
 

zangel_xyz a écrit :


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.


 
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"

n°1290054
zangel_xyz
Posté le 23-01-2006 à 14:11:23  profilanswer
 

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 :)
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.
@+


n°1290221
watashi
La démotivation : JAMAIS !
Posté le 23-01-2006 à 16:11:43  profilanswer
 

zangel_xyz a écrit :

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.


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 :
  1. Dim MonArray() as variant
  2. Dim DeniereLigne as Double
  3. Derniereligne = cells(65536,1).End(xlup).row
  4. Dim c as integer
  5. Dim l as integer   
  6. With Workbooks(1).Sheets(1)
  7.            ReDim Preserve Nomen(15, DerniereLigne - 1)  '-2 si tu as une ligne de titre
  8.            For l = 1 to Deniereligne Step 1    ' l = 2 si tu as une ligne de titre
  9.                 For c = 1 To 16 Step 1
  10.                     MonArray(l - 1, c - 1) = .Cells(l, c).Value 'l-2 si ligne de titre
  11.                 Next c
  12.             Next l
  13. End With


 
Si tu as besoin d'infos en plus hesites pas ;)
@+


---------------
Je bidouillle c'est sur... Mais j'essaye de faire en sorte que ça marche ;-)

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Filtre automatique, tri et VBA

 

Sujets relatifs
creation d'application en VBA sous catia[VBA] Installer une librairie
[TOPIC UNIK] VBA et Excel 200x exemples de code[Resolu][VBA EXCEL ] ouvrir un pdf à l'aide d'EXCEL
VBA Excel - Retrouver RGB à partir de ColorIndex[VBA] Capacité à manipuler des String ?
[excel] application automatique d'une macro à une caseIgnorer les messages de confirmation (VBA Excel)
diaporama simple xml/flash automatique sans navigation[VBA EXCEL 2003]Lister les noms des dossiers d'un repertoire > listbox
Plus de sujets relatifs à : Filtre automatique, tri et VBA


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR