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

cs_Charlie Messages postés 110 Date d'inscription jeudi 9 mai 2002 Statut Membre Dernière intervention 11 mars 2010 - 12 juil. 2002 à 15:45
cs_DeathAngel Messages postés 117 Date d'inscription vendredi 12 avril 2002 Statut Membre Dernière intervention 13 avril 2007 - 15 juil. 2002 à 09:14
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

exterminator1er Messages postés 7 Date d'inscription jeudi 27 juin 2002 Statut Membre Dernière intervention 24 juillet 2002
12 juil. 2002 à 15:59
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
cs_DeathAngel Messages postés 117 Date d'inscription vendredi 12 avril 2002 Statut Membre Dernière intervention 13 avril 2007
12 juil. 2002 à 16:17
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
cs_DeathAngel Messages postés 117 Date d'inscription vendredi 12 avril 2002 Statut Membre Dernière intervention 13 avril 2007
12 juil. 2002 à 16:29
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
cs_Charlie Messages postés 110 Date d'inscription jeudi 9 mai 2002 Statut Membre Dernière intervention 11 mars 2010 1
12 juil. 2002 à 21:05
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_DeathAngel Messages postés 117 Date d'inscription vendredi 12 avril 2002 Statut Membre Dernière intervention 13 avril 2007
15 juil. 2002 à 09:14
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