Verba_Tim
XLDnaute Occasionnel
Bonjour ^^
Je me suis mis au VBA il y a peu de temps et je me heurte à un problème qui m'embête et me fais des misères (le méchant...)
Donc pour situer mon problème, j'ai une liste de donné pouvant atteindre jusqu'à 100 000 lignes voir plus. La quantité d'information étant trop grosse, impossible de traité tout a la fois, étant donné que je dois les trier selon plusieurs critère. Jusque la pas de problème. J'ai triée mes données par heure dans 24 pages.
L'idée maintenant c'est de triée toutes ces données ( il s'agit d'un historique d'execution de tache plus précisément) dans les pages correspondantes, ce que j'ai fait, mais un problème subsiste encore et toujours Pour effectué le tri j'ai rangé mes données par ordre alphabétique, puis je sélectionne la parti concerné et enfin je coupe/colle vers la page de destination. Ou est le problème?
Et bien la quantité d'information dans ces pages étant encore trop importante (jusqu'à 7 000 lignes en moyenne), le tri ne se fait que dans un première parti. La suite se colle dans le désordre le plus complet, et en plus toutes les données à déplacer ne le sont pas. Auriez vous une idée d'optimisation? je bloque la...
Mon code:
sub tri_auto()
Page = 0
Do Until Page = 24
' Selection de la page horraire
Sheets("heure" & Page).Select
' tri par ordre alphabétique
Columns("E:E").Select
Range("E2").Activate
ActiveWorkbook.Worksheets("Heure" & Page).Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Heure" & Page).Sort.SortFields.Add Key:=Range("E2"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Heure" & Page).Sort
.SetRange Range("A1:H962")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
ActiveWindow.SmallScroll Down:=36
' comptage, sélection et déplacement des lignes ou apparais ma fonction
nb_ligne = Application.CountIf(Range("E:E"), "Fonction[1.1]")
Range("A1:J" & nb_ligne).Select
Selection.Cut
Sheets("Voie 1").Select
Range("A" & ligne).Select
ligne = ligne + nb_ligne
ActiveSheet.Paste
' suppressions des lignes vides
Sheets("heure" & Page).Select
Selection.EntireRow.Delete
' on passe a la page suivante
Page = Page + 1
Loop
end sub
Cordialement,
Verba_Tim
Je me suis mis au VBA il y a peu de temps et je me heurte à un problème qui m'embête et me fais des misères (le méchant...)
Donc pour situer mon problème, j'ai une liste de donné pouvant atteindre jusqu'à 100 000 lignes voir plus. La quantité d'information étant trop grosse, impossible de traité tout a la fois, étant donné que je dois les trier selon plusieurs critère. Jusque la pas de problème. J'ai triée mes données par heure dans 24 pages.
L'idée maintenant c'est de triée toutes ces données ( il s'agit d'un historique d'execution de tache plus précisément) dans les pages correspondantes, ce que j'ai fait, mais un problème subsiste encore et toujours Pour effectué le tri j'ai rangé mes données par ordre alphabétique, puis je sélectionne la parti concerné et enfin je coupe/colle vers la page de destination. Ou est le problème?
Et bien la quantité d'information dans ces pages étant encore trop importante (jusqu'à 7 000 lignes en moyenne), le tri ne se fait que dans un première parti. La suite se colle dans le désordre le plus complet, et en plus toutes les données à déplacer ne le sont pas. Auriez vous une idée d'optimisation? je bloque la...
Mon code:
sub tri_auto()
Page = 0
Do Until Page = 24
' Selection de la page horraire
Sheets("heure" & Page).Select
' tri par ordre alphabétique
Columns("E:E").Select
Range("E2").Activate
ActiveWorkbook.Worksheets("Heure" & Page).Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Heure" & Page).Sort.SortFields.Add Key:=Range("E2"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Heure" & Page).Sort
.SetRange Range("A1:H962")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
ActiveWindow.SmallScroll Down:=36
' comptage, sélection et déplacement des lignes ou apparais ma fonction
nb_ligne = Application.CountIf(Range("E:E"), "Fonction[1.1]")
Range("A1:J" & nb_ligne).Select
Selection.Cut
Sheets("Voie 1").Select
Range("A" & ligne).Select
ligne = ligne + nb_ligne
ActiveSheet.Paste
' suppressions des lignes vides
Sheets("heure" & Page).Select
Selection.EntireRow.Delete
' on passe a la page suivante
Page = Page + 1
Loop
end sub
Cordialement,
Verba_Tim