Trier des lignes et colonnes

Bonjour a tous et merci a tous pour ceux qui m'apporteront leurs aide.

J'ai mis un fichier exemple ou est expliqué ça semble simple a faire mais je me casse les dents avec quand même

41exemple.xls (15.00 Ko)

Bonjour

A vérifier

Super ça fonctionne merci beaucoup par contre comment vous faite pour appliquer l'élimination car je ne vois pas la formule.

Bonsoir à tous,

Salut Banzai,

autre version

Sub SupprimeLigne()
Dim Lg&, i%, x%, Cpt%
    Application.ScreenUpdating = False
    Lg = Range("a" & Rows.Count).End(xlUp).Row
    '--- tri ---
    Range("a2:e" & Lg).Sort _
    Key1:=Range("a2"), Order1:=xlAscending, _
    Key2:=Range("b2"), Order2:=xlAscending, _
    Key3:=Range("c2"), Order3:=xlAscending, _
    Header:=xlNo, OrderCustom:=1, MatchCase:= _
    False, Orientation:=xlTopToBottom
    '---
    Columns("f").Insert
    Range("f2:f" & Lg) = "=a2&b2&c2" 'concatène "A:C"

    For i = 2 To Lg
        If Cells(i + 1, "f") = Cells(i, "f") Then
                x = i
            Do While Cells(x + 1, "f") = Cells(i, "f")
                x = x + 1
            Loop
        Cpt = Application.CountIf(Range(Cells(i, "e"), Cells(x, "e")), "CG") _
            + Application.CountIf(Range(Cells(i, "e"), Cells(x, "e")), "CP")
        End If
        If Cpt > 0 Then Range(Cells(i, "a"), Cells(x, "e")).Clear
                i = x
    Next i
        Columns("f").Delete
        On Error Resume Next
    Range("a2:e" & Lg).SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp
End Sub

Amicalement

Claude

Merci bien ça fonctionne avec les deux formules je vais essayer ça sur mon fichier il y a 29000 ligne le code source ne pose pas de problème ?

Merci a tous


C'est presque bon en faite le petit problème c'est que les lignes a trier partent de la ligne A10 a O10 sur mon fichier original il faudrait qu'il me supprime les ligne entière car il me supprime juste les ligne A2 a E2 alors j'ai tenté de modifier le code pour mon fichier et j'ai mis ça par contre avec plus de 29000 lignes le code 2 me fait ramer le PC et il en voit pas le bout le premier semble plus stable celui de Banzai il arrive a tous supprimer.

Merci de vôtre aide encore une fois a tous mais je pense qu'il manque juste un petit truc .

j'ai modifié le A10/O qui était A2:E et a la fin pareil ici Range("A10:O10") par contre le option explicit je sais pas s'il est au bon endroit.

Option Explicit
Sub Rectangle21_QuandClic()

Dim Tbl1
Dim Tbl2
Dim J As Long
Dim K As Long
Dim Indice As Long

  Tbl1 = Range("A10:O" & Range("A" & Rows.Count).End(xlUp).Row)
  ReDim Tbl2(1 To UBound(Tbl1), 1 To UBound(Tbl1, 2))
  For J = 1 To UBound(Tbl1)
    If Tbl1(J, 5) = "CG" Or Tbl1(J, 5) = "CP" Then
      For K = 1 To UBound(Tbl1)
        If Tbl1(K, 1) = Tbl1(J, 1) And Tbl1(K, 2) = Tbl1(J, 2) And Tbl1(K, 3) = Tbl1(J, 3) Then
          Tbl1(K, 1) = ""
        End If
      Next K
      Tbl1(J, 1) = ""
    End If
  Next J
  For J = 1 To UBound(Tbl1)
    If Tbl1(J, 1) <> "" Then
      Indice = Indice + 1
      For K = 1 To 5
        Tbl2(Indice, K) = Tbl1(J, K)
      Next K
    End If
  Next J
  Range("A10:O10").Resize(UBound(Tbl2), UBound(Tbl2, 2)) = Tbl2

End Sub

Bonjour à tous,

J'ai pas mal cherché pour réduire le temps de traitement,

en partant d'un filtre élaboré.

Au début, j'utilisais une formule "SommeProd" sur les 29000 lignes, => 7 minutes de traitement,

avec =NB.SI.ENS(.....), j'arrivais à 3,50 minutes

C'est l'écriture de la formule qui prend tout ce temps, le filtre étant instantané.

pour info., la macro de Banzai met 2,52 minutes.

J'ai donc opté pour une formule "SommeProd" sur une plage de 100 lignes,

(50 lignes avant et 50 lignes après la cellule concernée), çà devrait suffire comme plage.

Sub Filtre()
'-- macro Claude Dubois pour muratime le 25/09/2011
'-- utilise les colonnes Q:R, les données commencent à la ligne 50
Dim f As Worksheet
Dim Lg&, x
    x = Time
    Application.ScreenUpdating = False
    Lg = Range("a" & Rows.Count).End(xlUp).Row

    Set f = Sheets("Resultat")
    Range("r50:r" & Lg) = "=a50&b50&c50"                'concatène "A:C"

    '-- formule SUMPRODUCT flotant (50 lignes avant et 50 lignes après la cellule) --
    Range("q50:q" & Lg) = _
    "=SumProduct((r1:r100=r50)*((e1:e100=""CG"")+(e1:e100=""CP"")))"

    '--- filtre ---
    Range("q2") = "=and(q50=0,a50>0)"                   'critère
    Rows(49).Copy Destination:=f.Range("a1")            'en-têtes

    Range("a49:q" & Lg).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
    Range("q1:q2"), CopyToRange:=f.Range("a1:p1"), Unique:=False

    Columns("q:r").Clear
    f.Activate
    MsgBox ("temps macro = " & Format(Time - x, "hh:mm:ss"))
End Sub

Ce qui explique pourquoi les données commencent à la ligne 50, (lignes 1 à 40 masquées)

le temps de traitement est inférieur à 2 secondes. (testé avec 29000 lignes)

Les données étant censées être triées par date.

à tester avec données réelles

Amicalement

Claude

Bon bah je crois que ça fonctionne bien j'ai collé les 29000 ligne dans ton fichier et apparemment c'est bon.

Je remercie tous le monde qui m'auront aidé Merci a tous.

je peux cloturer

Bonsoir,

Cette version évite les lignes masquées en haut,

et devrait refléter ton fichier réel.

même principe

Amicalement

Claude

Merci encore

Rechercher des sujets similaires à "trier lignes colonnes"