Trier des données en Excel... pour les pro des Alogrithmes...

Signaler
Messages postés
110
Date d'inscription
jeudi 9 mai 2002
Statut
Membre
Dernière intervention
11 mars 2010
-
Messages postés
117
Date d'inscription
vendredi 12 avril 2002
Statut
Membre
Dernière intervention
13 avril 2007
-
Allo...

J'ai un tableau de 10 colonnes et je voudrais trier mes données selon la colonne 10. Les valeurs de cetet colonnes sont comprises entre 0 et 16. Ce que je veux faire c'est, a partir d'une feuille avec tous mes enregistrement, créer des feuilles pour chaque class...

Ex.: FEuil1... tous les enregistrements
Feuil2... Enregistrement avec la Valeur 0
Feuil3... Enregistrement avec la Valeur 0

Alors, j'ai besoin d'un léger algorithme pour m'aider a faire ma sélection...

Pour les amateurs des boucles for.. je sais comment le faire avec ca mais c'est pas optimal... Ma boucle prend 2 min du au grand nombre de données a copier... Ce qui me faut c'est utiliser les fonctions d'excel qui sont francehement rapide...

Soir un tri ou un filtre pour arranger tout ca... Mais le filtre a un petit prob car il ne décale pas les éléments mais cache les lignes non voulu. Alors, si tu fait un copier-coller... tu n'est pas capable de savoir qu'elle donnée sont caché ou non...

Merci!

5 réponses

Messages postés
7
Date d'inscription
jeudi 27 juin 2002
Statut
Membre
Dernière intervention
24 juillet 2002

Pourquoi pas commencer par faire un tri avec critere la colonne 10

ensuite tu te sert de SELECT CASE pour tester la valeur des lignes dans la colonne 10

a chaque valeur differente tu copie ta ligne dans un onglet different en mettant comme nom la valeur de la colonne 10

attention a la boucle sur la lecture des lignes=> tester le nombre de ligne a traiter et s'en servir comme valeur pour le for l= 1 to XXXX

ca devrait etre plus rapide

@+++

Exterminator1er un vrai débutant
toujours dans le besoin, jamais content, toujours curieux
j'essaye d'aprendre vite et d'arrêté de vous poser des questions de ouf !!!!!
0
Messages postés
117
Date d'inscription
vendredi 12 avril 2002
Statut
Membre
Dernière intervention
13 avril 2007

Salut charlie !

Ben si, on peut copier uniquement les cellules visibles :)

voilà comment faire :

Dim i As Integer

For i = 0 To 16
ActiveWorkbook.Sheets.Add
ActiveSheet.Name = "FeuilleDonnees" & i
ActiveWorkbook.Sheets("Feuil1").Select
ActiveSheet.Range("MesDonnees").Select
Selection.AutoFilter Field:=Range("MonTri").Column, Criteria1:=CStr(i)
Range("MesDonnees").SpecialCells(xlCellTypeVisible).Select
Selection.Copy Destination:=Worksheets("FeuilleDonnees" & i).Range("A1")
Next i

Une feuille est créée pour chaque valeur (de 0 à 16)
Il faut seulement que tu pense à laisser une ligne vierge au dessus de tes données pour afficher les combos du autofilter, sinon, la première ligne sera copiée quelle que soit la valeur filtrée.

voilou.

@peluche et bon dev'
DA
0
Messages postés
117
Date d'inscription
vendredi 12 avril 2002
Statut
Membre
Dernière intervention
13 avril 2007

Ah bah j'ai pas expliqué :
MesDonnees est le range qui contient tout ton tableau
MonTri est la collonne de MesDonnees qui contient tes valeurs à filtrer.

Note que l'on ne fait qu'utiliser des commandes excel, donc on peut pas faire plus rapide :)

@peluche
DA
0
Messages postés
110
Date d'inscription
jeudi 9 mai 2002
Statut
Membre
Dernière intervention
11 mars 2010
1
Merci beaucoup...

Juste un petit détail

Y'a tu un moyen de vérifier, avant de faire le paste, qu'il y a quelque chose dans le clipborad?

Ce que je veux dire c'est que je ne veux pas créer une feuille et la laisser vide (par exemple... si le filtre avec i=4 ne contient aucune donnée...)

Merci!
0
Messages postés
117
Date d'inscription
vendredi 12 avril 2002
Statut
Membre
Dernière intervention
13 avril 2007

Salut,

Ah c'est bon les Week Ends :)

bon, si tu veux plus les feuilles vides, il faut faire comme ça :

Dim i As Integer
Dim a As Integer
Dim j As Integer

For i = 0 To 16
ActiveWorkbook.Sheets("Feuil1").Select
ActiveSheet.Range("MesDonnees").Select
Selection.AutoFilter Field:=Range("MonTri").Column, Criteria1:=CStr(i)
Range("MesDonnees").SpecialCells(xlCellTypeVisible).Select

a = Selection.Areas.Count
j = 0
If a <= 1 Then
j = Selection.Rows.Count
Else
For Each area In Selection.Areas
j = j + area.Rows.Count
Next area
End If

If j > 1 Then
ActiveWorkbook.Sheets.Add
ActiveSheet.Name = "FeuilleDonnees" & i
Sheets("Feuil1").Activate
Selection.Copy Destination:=Worksheets("FeuilleDonnees" & i).Range("A1")
End If
Next i

On a rajouté un compteur de lignes, parce que avec ce code, mêmes'il n'y a pas de lignes correspondantes, la première ligne est sélectionnée.

Voilou

@peluche
DA
0