Appliquer tri sur tableau avec une macro VBA

Bonjour a tous,

Je viens vers vous parce que je bloque sur mon code.

J'ai un tableau que l'utilisateur va remplir sur la feuille "carloric value".

Le début du code, qui fonctionne, consiste en copier a la modificationce tableau de la feuille "carloric value" sur une feuille appelé "Europe", pour ensuite le completer avce d'autre donnée puisée dans la feuille data et ensuitre appliqué des tris dessus. Je bloque sur l'application de tris.

Voici mon code

Private Sub Worksheet_Change(ByVal Target As Range)

Application.ScreenUpdating = False

Dim Ingredients As Range
Dim IngredientLabel As Range

Set Ingredients = Sheets("caloric Value").Range("Ingredient_percent_eu")
Set IngredientLabel = Sheets("Europe").Range("ingredient_label_eu")

If Not Application.Intersect(Ingredients, Range(Target.Address)) Is Nothing Then

Ingredients.Copy

IngredientLabel.Value = Sheets("caloric Value").Range("Ingredient_percent_eu").Value

Application.CutCopyMode = False

    ActiveWorkbook.Worksheets("Europe").ListObjects("Tableau10").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Europe").ListObjects("Tableau10").Sort.SortFields. _
        Add Key:=Range("Tableau10[statut]"), SortOn:=xlSortOnValues, Order:= _
        xlDescending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Europe").ListObjects("Tableau10").Sort.SortFields. _
        Add Key:=Range("Tableau10[%]"), SortOn:=xlSortOnValues, Order:= _
        xlDescending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Europe").ListObjects("Tableau10").Sort.SortFields. _
        Add Key:=Range("Tableau10[Label EU]"), SortOn:=xlSortOnValues, Order:= _
        xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Europe").ListObjects("Tableau10").Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .Apply
    End With

End If

End Sub

Je souhaite applique un tris a multiple niveau.

Niveau 1: colonne "Statut", tris de Z à A

Niveau 2:colonne "%", tris par ordre decroissant

Niveau 3:colonne "Label EU", tris de A à Z

Visiblement, ya quelque chose que j'ai mal fait dans la paretie tris du tableau sur la page "Europe" car j'ai un message de bug

image

Sur le bout de code suivant

ActiveWorkbook.Worksheets("Europe").ListObjects("Tableau10").Sort.SortFields. _
        Add Key:=Range("Tableau10[statut]"), SortOn:=xlSortOnValues, Order:= _
        xlDescending, DataOption:=xlSortNormal

Je vous remercie par avance pour votre aide

Voici mon fichier

Bastien

Bonjour

Modifiez cette partie de code

With Worksheets("Europe").ListObjects("Tableau10").Sort
    .SortFields.Clear
    .SortFields.Add Key:=Worksheets("Europe").Range("Tableau10[status]"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    .SortFields.Add Key:=Worksheets("Europe").Range("Tableau10[%]"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    .SortFields.Add Key:=Worksheets("Europe").Range("Tableau10[Label EU]"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .Apply
End With

Cordfialement

Bonjour,

Merci pour votre aide

J'ai appliqué la modif proposée mais il semblerait que ça bloque toujours, il semblerait que ce soit toujours au même endroit :-(

Merci para avance pour votre aide

Private Sub Worksheet_Change(ByVal Target As Range)

Application.ScreenUpdating = False

Dim Ingredients As Range
Dim IngredientLabel As Range

Set Ingredients = Sheets("caloric Value").Range("Ingredient_percent_eu")
Set IngredientLabel = Sheets("Europe").Range("ingredient_label_eu")

If Not Application.Intersect(Ingredients, Range(Target.Address)) Is Nothing Then

Ingredients.Copy

IngredientLabel.Value = Sheets("caloric Value").Range("Ingredient_percent_eu").Value

Application.CutCopyMode = False

With Worksheets("Europe").ListObjects("Tableau10").Sort
    .SortFields.Clear
    .SortFields.Add Key:=Worksheets("Europe").Range("Tableau10[status]"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    .SortFields.Add Key:=Worksheets("Europe").Range("Tableau10[%]"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    .SortFields.Add Key:=Worksheets("Europe").Range("Tableau10[Label EU]"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .Apply
End With

End If

End Sub
image

Bonjour

Cela fonctionne bien chez moi pourtant.

Ce sera plus simple si je vous renvoie votre fichier avec le code proposé. J'ai aussi inhibé quelques lignes qui ne servent pas

Cordialement

Bonjour,

Peut-être est-ce lié à un nom mal orthographié (je n'ai pas ouvert les fichiers) parce que je vois statut et status suivant les codes. Sinon, pouvez-vous essayer ainsi :

With Worksheets("Europe").ListObjects("Tableau10").Sort
    with .SortFields
        .Clear
        .Add Key:=Worksheets("Europe").Range("Tableau10[status]"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
        .Add Key:=Worksheets("Europe").Range("Tableau10[%]"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
        .Add Key:=Worksheets("Europe").Range("Tableau10[Label EU]"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    end with
    .setrange range("Tableau10")
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .Apply
End With

'OU BIEN

With Worksheets("Europe").range("Tableau10").Sort
    .SortFields.Clear
    .SortFields.Add Key:=Worksheets("Europe").Range("Tableau10[status]"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    .SortFields.Add Key:=Worksheets("Europe").Range("Tableau10[%]"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    .SortFields.Add Key:=Worksheets("Europe").Range("Tableau10[Label EU]"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .Apply
End With

En restant attentif au paramètre Header (qu'il faudra peut-être passer sur xlno)

Cdlt,

Bonjour

Cela fonctionne bien chez moi pourtant.

Ce sera plus simple si je vous renvoie votre fichier avec le code proposé. J'ai aussi inhibé quelques lignes qui ne servent pas

Cordialement

Hello

Merci beaucoup pour votre aide et les sumplification.

ça fonctionne très bien.

Bonne semaine a tous

Bastien

Bonjour

Cordialement

Rechercher des sujets similaires à "appliquer tri tableau macro vba"