Trier des données en Excel... pour les pro des Alogrithmes...
cs_Charlie
Messages postés110Date d'inscriptionjeudi 9 mai 2002StatutMembreDernière intervention11 mars 2010
-
12 juil. 2002 à 15:45
cs_DeathAngel
Messages postés117Date d'inscriptionvendredi 12 avril 2002StatutMembreDernière intervention13 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!
A voir également:
Trier des données en Excel... pour les pro des Alogrithmes...
exterminator1er
Messages postés7Date d'inscriptionjeudi 27 juin 2002StatutMembreDernière intervention24 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 !!!!!
cs_DeathAngel
Messages postés117Date d'inscriptionvendredi 12 avril 2002StatutMembreDernière intervention13 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.
cs_DeathAngel
Messages postés117Date d'inscriptionvendredi 12 avril 2002StatutMembreDernière intervention13 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 :)
cs_DeathAngel
Messages postés117Date d'inscriptionvendredi 12 avril 2002StatutMembreDernière intervention13 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.