Macros de tri

Bonjour,

Suite de mon post, je souhaite faire des tris sur différentes colonnes, sachant qu'il y aura de nouvelles données qui s'ajoutent sur les lignes (donc pas de plage fixe).

Je souhaite faire 3 tris (2 sont identiques)

1- Tri selon l'article

2- Tri selon la désignation

3- Tri selon la colonne UTILISE mais sur ce tri, je ne veux voir QUE celles qui ont une valeur > ou = 1 sachant aussi que la valeur qui est affichée est donnée par une formule dans cette meme cellule (sur le fichier original REACH.xlsm feuille "données de substances dangereuses" d'un autre post)

Merci

Christian

Ci joint un petit fichier pour l'exemple

1'510tri-zyglur.xlsm (18.76 Ko)

Bonjour

Pour le tri 1 :

Sub Tri_Article()
'Macro Dan pour zyglur
Dim plage As Range
Set plage = ActiveSheet.Range("A3:D" & Range("A" & Rows.Count).End(xlUp).Row)
plage.Sort Key1:=Range("A4"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, Orientation:=xlTopToBottom
End Sub

Pour le tri 2, même code mais remplace A4 par B4

Pour le tri 3, on cache les lignes vides ??

Amicalement

Oui tout a fait on cache les lignes vides et egale à zéro.

Je teste ca sur mon fichier.

Merci

Christian

-- 16 Avr 2011, 16:43 --

Merci,

Le tri article et designation fonctionne a merveille.

Christian

re,

essaie comme ceci :

Sub Tri_Utilise()
'Macro Dan pour Zyglur
Dim plage As Range
With ActiveSheet
Set plage = .Range("A3:D" & Range("A" & Rows.Count).End(xlUp).Row)
plage.Sort Key1:=Range("D4"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
.Range("D4:D" & Range("A" & Rows.Count).End(xlUp).Row) _
    .SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
End With
End Sub

Les cellules vides ne sont pas sensées contenir une valeur (comme dans ton fichier)

Si tu tries ensuite avec les deux autres macros, le tri ne sera pas effectué correctement dû aux lignes cachées;

Pour éviter cela, dans les deux autres mets cette ligne juste en dessous de Dim plage as range :

Cells.EntireRow.Hidden = False

Amicalement

Bonsoir à tous, Salut Dan,

J'avais commencé à regarder, je poste quand même !

Private Sub Worksheet_Change(ByVal Target As Range)
Dim x%, Plg As Range
'Macro par Claude Dubois pour "zyglur" Excel-Pratique le 16/04/11
    If Not Application.Intersect(Target, Range("f2")) Is Nothing Then
        Application.ScreenUpdating = False
        On Error Resume Next
            ActiveSheet.ShowAllData
            Set Plg = Range("a3:d" & [a65000].End(xlUp).Row)
            x = Application.Match(Target, Rows(3), 0)
        On Error GoTo 0
        If Target.Count > 1 Or Target = "" Or x = 0 Then Exit Sub

        '-- tri --
        Plg.Sort Key1:=Cells(3, x), Order1:=xlAscending, Key2:= _
        Cells(3, "d"), Order2:=xlAscending, Header:=xlYes, OrderCustom:=1, _
        MatchCase:=False, Orientation:=xlTopToBottom

        '-- filtre --
        Range("o2") = "=d4>0"
        Plg.AdvancedFilter Action:=xlFilterInPlace, _
        CriteriaRange:=Range("o1:o2"), Unique:=False
        Range("o2").ClearContents
    End If
End Sub

Amicalement

Claude

584zyglur-tris.xlsm (20.05 Ko)

Bonsoir à tous,

Bonsoir DAN,

J'ai adapté ta macro de tri_utilise sur mon fichier REACH.xlsm, mais cela ne fonctionne pas.

Je mets en ligne 3 images:

La 1ere : Pour renseigner une nomenclature on rempli les 3 colonnes

La 2eme : Colonne H et I (toutes les 2 ont des formules, exemple affiché I39) les éléments s'affichent lorsque la nomenclature est remplie

La 3eme : Résultat que je voudrais obtenir.Rassembler les elements qui composes la nomenclature en triant soit par H soit par I mais comme y'a des formules dedans....

Bonsoir Claude,

Je voudrais bien adapter ton code sur mon fichier REACH.xlsm, mais je ne saisi pas tout.

Tes autres macros étaient plus simples.... On voit que les choses se corsent. Meme après avoir regardé les cours sur le forum, je n'arrive pas a l'adapter.

Merci

Christian

Bonjour à tous,

Si tu choisis ma version, tu n'as plus besoin des boutons et macros "tri",

ce code est à placer dans le VBE de la feuille (non dans un module)

tu choisis le tri sur la liste en "B6"

Private Sub Worksheet_Change(ByVal Target As Range)
Dim x%, Plg As Range
'Macro par Claude Dubois pour "zyglur" Excel-Pratique le 17/04/11
   If Not Application.Intersect(Target, Range("b6")) Is Nothing Then
        Application.ScreenUpdating = False
        On Error Resume Next
            ActiveSheet.ShowAllData
        On Error GoTo 0
        If Target.Count > 1 Or Target = "" Then Exit Sub
            Set Plg = Range("a10:aq" & [c65000].End(xlUp).Row)
                Select Case UCase(Target)
                    Case Is = "ARTICLE": x = 3
                    Case Is = "DESIGNATION": x = 5
                    Case Is = "UTILISE": x = 9
                    Case Else:  Exit Sub
                End Select

        '-- tri (x = N°colonne à trier) --
       Plg.Sort Key1:=Cells(10, x), Order1:=xlAscending, Key2:= _
        Cells(10, "i"), Order2:=xlAscending, Header:=xlYes, OrderCustom:=1, _
        MatchCase:=False, Orientation:=xlTopToBottom

        '-- filtre --
       Range("o2") = "=i11>0"
        Plg.AdvancedFilter Action:=xlFilterInPlace, _
        CriteriaRange:=Range("o1:o2"), Unique:=False
        Range("o2").ClearContents
    End If
End Sub

voici ton fichier en retour :

fichier:

Amicalement

Claude

Bonjour,

Je te remercie, ca marche nickel.

  • A quoi correspond o1 dans tes formules de Range ? J'ai bien vu que tu déclarais la variable o2 mais je ne trouve pas a quoi correspond o1.
  • J'ai hélas besoin des macros de tris par article, car on sait plus facilement ou chercher (dans quelle ligne) vu que c'est notre reference, hélas, les formules sur la feuille composition produit utilisent le classement par désignation car si un article n'est pas dans la liste, il nous propose le plus proche par sa designation, donc par ses caracteristiques que l'on a pu remplir sur le reste des cellules.
Il faudrait juste que le tri par article et designation se fasse sur l'ensemble des lignes.

Je continue de désosser ton code pour ma formation....

Merci

Christian

re,

range(o1:o2)

c'est la zone de critère (filtre), ici on demande la colonne "i" >0

pour n'afficher que ces lignes.

Les résultats obtenus sont identiques aux macros Tri

je vois pas trop où tu veux en venir !

Bon courage

Claude

Merci de l'explication.

En fait j'ai 3 résultats différents:

1- Trié par Article sur l'ensemble de la base sans tenir compte de la colonne I

2- Trié par Désignation sur l'ensemble de la base sans tenir compte de la colonne I

3- Trié par Composant Utilisé colonne I >0

supprimer le filtre pour que quand je choisisse tri 1 ou 2 cela réaffiche l'ensemble des donnees.

Effectivement le choix se fera sur la dite page et il n'y aura qu'un bouton, ce qui est un gain de place.

Merci

Christian

re,

compris !

remplace simplement la partie "filtre"

        '-- filtre --
        If x = 9 Then
            Range("o2") = "=i11>0"
            Plg.AdvancedFilter Action:=xlFilterInPlace, _
            CriteriaRange:=Range("o1:o2"), Unique:=False
            Range("o2").ClearContents
        End If
    End If
End Sub

Claude

Merci, super mega merci.

C'est adopté.

Je cloture le post et remercie tout le monde.

Voila une semaine que j'ai decouvert que l'on pouvait faire plus que des additions avec excel !

C'est vraiment très interressant et enrichissant tous ces partages d'informations.

Comment j'aimerai devenir un Jedi comme vous...

Merci à tous

Et tout particulièrement à Claude, Dan et à Yvouille

Christian

Bonjour Christian, forum,

Je ne réponds pas en MP,

merci de poster tes questions à la suite de ce fil

en joignant ton dernier fichier.

à 1ère vue, il faut annihiler le Private Sub pour modifier "B6" (dans la macro d"enregistrement)

tu peux retirer le résolu

Amicalement

Claude

Bonsoir Claude,

Bonsoir à tous,

Lorsque j'enregistre mon fichier avec le filtre de la feuille 'données-substances dangereuses", il me met une erreur lors de l'ouverture du fichier.

Il suffit d'accepter de récuperer les données et d'alller dans la feuille et de se mettre en "DESIGNATION".

Il faudrait que dans la macro d'enregistrement du fichier, cela revienne automatiquement sur DESIGNATION.

Peut on en meme temps, supprimer toutes les lignes qui ne sont pas en nomenclature du produit, c'est a dire toutes les lignes dont la cellule en H est égale à zéro dans la meme feuille ?

Merci Claude et aux autres

Amicalement

Christian

Ci joint le fichier .xlsm zippé.

Bonsoir,

Il doit y avoir des interférences dans certaines formules !

sinon, macro "Enregistrer" tu ajoute au début

Sub Enregistrer()
Dim Nom As String
    With Sheets("données-substances dangereuses")
        .Activate
        .Range("b6") = "DESIGNATION"
    End With
'-- suite macro
 Sheets("Pas à pas").Activate

Pour supprimer les lignes avec "0" en colonne "H"

Sub SupprLigne() 'supprime lignes avec 0 en colonne "H"
Dim Lg%
        Application.ScreenUpdating = False
    With Sheets("données-substances dangereuses")
        On Error Resume Next
        .ShowAllData
        Lg = .Range("c65536").End(xlUp).Row
        '-- filtre --
        .Range("o2") = "=h11=0"
        .Range("a10:aq" & Lg).AdvancedFilter Action:=xlFilterInPlace, _
            CriteriaRange:=.Range("o1:o2"), Unique:=False
        .Range("o2").ClearContents
        '---
        .Range("a11:a" & Lg).SpecialCells(xlCellTypeVisible).EntireRow.Delete
        .ShowAllData
    End With
End Sub

Amicalement

Claude

Merci Claude.

Ca permet d'alléger mon fichier fichier de résultat.

Bien à toi.

Christian

Si tu repasse par là,

Rechercher des sujets similaires à "macros tri"