Tri sans lots de vente

Bonjour,

Il y a quelques jours, j'ai fais appel à vous et Optimix a réglé mon problème, que je remercie encore.

Je voudrais me servir de ses macros tri pour un autre fichier, mais le problème que j'ai avec ce fichier c'est que les feuilles n'ont pas le même nombre de lignes et j'aimerais que la macro tri ne prenne pas en compte les lots dans le tri.

Je vous transmet un fichier test.

Merci pour votre aide,

Patrick,

Bonjour

Ci joint ma solution

J'ai d'abord converti tes données en tableau structuré (plus de problàme de ligne et la macro et beaucoup plus petite...

A+ François

Bonjour Fanafan38

Merci pour votre réponse,

mais cela ne marche pas pour moi, les lignes avec comme début de références "lots" ne doivent pas faire partie du tri, de plus une fois le tri effectué sur la colonne M et que l'on remet sur la colonne G, les références lots sont mélangées.

Dans le fichier de fabrication réel, il y a bcp plus de références lots ou assortiments!

C'est colonne la ne doivent pas se trier.

Merci

Bonjour Papout,

En partant du principe que les lignes avec "Lot" sont toujours à la fin

Sub Tri_G()
    Dim wS As Worksheet, lastRow As Long, lastCol As Integer
    Dim Lig As Long
    '
    ActiveSheet.Unprotect
    Set wS = ActiveSheet
    lastRow = wS.Range("H" & Rows.Count).End(xlUp).Row
    ' On part du principe que tout ce qui est lot se toruve à la fin
    For Lig = lastRow To 5 Step -1
      If InStr(1, wS.Cells(Lig, "H"), "Lot", vbTextCompare) = 0 Then
        lastRow = Lig
        Exit For
      End If
    Next Lig
    '
    lastCol = wS.UsedRange.Columns.Count + 1
    With wS.Sort
      .SortFields.Clear
      .SortFields.Add Key:=Range("G1:G" & lastRow), SortOn:=xlSortOnValues, _
        Order:=xlAscending, DataOption:=xlSortNormal
      .SetRange Range(Cells(5, 1), Cells(lastRow, lastCol))
      .Header = xlGuess
      .MatchCase = False
      .Orientation = xlTopToBottom
      .SortMethod = xlPinYin
      .Apply
    End With
    wS.Range("A1").Select
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub

Nota : Perso, je n'utilise jamais ou très peu "UsedRange.Rows.Count" comme l'a fait Optimi, car cela vous donne LastRow = 221
Alors que la bonne vieille méthode quand ce n'est pas un TS, vous donne la bonne ligne = 17

A+

Bonjour Bruno 45,

Merci pour votre macro, cela fonctionne impeccablement.

Juste une info, dans la macro j'ai vu "lot", est-ce que je peux ajouter aussi "kit" ? si non, je renomme la fiche article du produit.

Autre chose, je n'ai rien compris à votre note, mais je suis complétement nul en VBA.

Encore merci,

Patrick,

Re,

Si vous voulez plusieurs critères à ne pas prendre en compte, il faut ajouter une condition

If InStr(1, wS.Cells(Lig, "H"), "Lot", vbTextCompare) = 0  And _
InStr(1, wS.Cells(Lig, "H"), "kit", vbTextCompare) = 0 Then

Attention ! Il faut que "lot" ou "kit" soient des lignes à la fin du tableau, sinon le tri sera faux

Pour mon nota, je voulais juste dire que l'instruction donnée par Optimix peut présenter un gros désavantage de temps.
Sachant qu'elle donne la ligne de la dernière cellule utilisée, qui n'est pas forcément celle du tableau (Excel enregistre plein de chose étrange)

A+

Rechercher des sujets similaires à "tri lots vente"