Hello world !

Je reviens vers vous après un petit silence respectable, afin de vous soumettre une question :

J'ai actuellement un bout de code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    Dim p0 As Long
    Dim p1 As Long
    p0 = 0
    p1 = 2
        For p0 = Range("E" & Rows.Count).End(xlUp).Row To 1 Step -1
         If InStr(Cells(p0, 5).Value, "HA") = 1 Or InStr(Cells(p0, 5).Value, "B2") = 1 Then Cells(p0, 5).EntireRow.Copy Destination:=Sheets("X2").Rows(p1)
         If InStr(Cells(p0, 5).Value, "BA") = 1 Then Cells(p0, 5).EntireRow.Copy Destination:=Sheets("X3").Rows(p1)
         If InStr(Cells(p0, 5).Value, "BB") = 1 Then Cells(p0, 5).EntireRow.Copy Destination:=Sheets("X3").Rows(p1)
         If InStr(Cells(p0, 5).Value, "BC") = 1 Then Cells(p0, 5).EntireRow.Copy Destination:=Sheets("X3").Rows(p1)
         If InStr(Cells(p0, 5).Value, "B4") = 1 Then Cells(p0, 5).EntireRow.Copy Destination:=Sheets("X4").Rows(p1)
         If InStr(Cells(p0, 5).Value, "BB4") = 1 Then Cells(p0, 5).EntireRow.Copy Destination:=Sheets("X4").Rows(p1)
         If InStr(Cells(p0, 5).Value, "BB3") = 1 Then Cells(p0, 5).EntireRow.Copy Destination:=Sheets("X4").Rows(p1)
         If InStr(Cells(p0, 5).Value, "XX") = 1 Then Cells(p0, 5).EntireRow.Copy Destination:=Sheets("XY").Rows(p1)
         If InStr(Cells(p0, 5).Value, "XV") = 1 Then Cells(p0, 5).EntireRow.Copy Destination:=Sheets("XK").Rows(p1)
         p1 = p1 + 1
        Next p0
Ce dernier fait partie d'une procédure plus complète mais je ne mets que la selection qui me pose problème.

J'ai un fichier qui varie de 5.000 à 30.000 lignes, et le petit code précédent, fait une recherche sur une partie de valeur dans la colonne E, et si la valeur est égale à HA (par exemple), copie la ligne complète dans l'onglet de destination (X2 pour cet exemple).

J'ai deux problèmes avec ce code.

1. Il est LONG !
Selon mon fichier, ce petit bout de code à une durée qui varie de 2minutes à 8-10minutes, et j'ai pourtant épuré la procédure autant que possible (j'ai déjà effectué une recherche sur la marche à suivre pour accelérer une macro, et suivi les conseils trouvés)

2. Je suis obligé de ré-organiser mes onglets de destination (avec un .sort)après l'utilisation de cette partie de macro, car des lignes vierges sont présentes un peu partout.

J'ai effectué des recherches plus ou moins avancées sur ces deux problèmes, mais je n'ai malheureusement que trop peu de temps par jour pour trouver une solution vraiment satisfaisante pour les besoins de mon travail.

Aussi ... Si quelqu'un avait la moindre idée d'une marche à suivre, d'une fonction, ou une boucle moins lourde ... Je serais très reconnaissant !

PS : Je ne demande pas nécessaire une solution toute faite (quoique ça ferait un bon gain de temps!), mais des idées, des conseils, des pensées...
Plusieurs cerveaux valent mieux qu'un

Par avance, merci !