Fonction de tri VBA qui ne fonctionne pas

Bonjour à tous, étant nouveau sur ce forum, veuillez m'excuser de ma petite maladresse pour l'écriture de ce post.

Voici mon projet, je suis en train de créer un petit code VBA pour aider une entreprise dans la classification de ses produits (je tient à préciser que je ne suis pas du tout professionnel, c'est une connaissance qui m'a demandé de l'aider sur ce projet, or mais connaissances en VBA sont très restreintes, ce pourquoi je requiert votre aide ici)
Comme cité dans le titre ci-dessus, la fonction de tri qui j'ai créé permet de classer les produits en fonction de leur clé de tri, unique à chacun, or cette fonction fonctionne parfaitement pour la première feuille, mais uniquement pour celle-ci.
Voici le code :

'Ce sont ces premières variables qu'il faut modifier
Const Products_nb = 8
Const Sectors_number = 3

'Pas celle-ci :
Const Products_number = Products_nb + 1

Sub Tri(feuille As Worksheet)
    feuille.Sort.SortFields.Clear
    feuille.Range(Cells(1, 1), _
    Cells(feuille.UsedRange.Rows.Count, feuille.UsedRange.Columns.Count)).Sort _
    Key1:=feuille.Range("B1"), Order1:=xlAscending, Header:=xlYes
End Sub

Sub COPY_PASTE()

    'Ici on peut constater que le fonction s'effectue avec brio
    Tri Worksheets("GROUPE")

    Dim table_names(Sectors_number)
    table_names(1) = "ARC"
    table_names(2) = "BZT"
    table_names(3) = "COR"
    'table_names(2) = "xxx"
    'table_names(3) = "xxx"

    For i = 1 To Sectors_number
        Column = 7 + i

        Worksheets(table_names(i)).Sort.SortFields.Clear

        'Cette fonction est remplacée par le code juste en dessous
        'Tri Worksheets(table_names(i))

        'Lors de l'execution de la fonction copy_paste "ok 1" s'affiche, mais pas "ok 2"
        MsgBox ("ok 1")
        'Pourtant ce code est exactement le même que la fonction tri, mais plus épuré
        Worksheets("ARC").Range(Cells(1, 1), Cells(10, 7)).Sort _
        Key1:=Worksheets("ARC").Range("B1"), Order1:=xlAscending, Header:=xlYes

        MsgBox ("ok 2")

        For j = 2 To Products_number
            If Worksheets("GROUPE").Cells(j, Column) = ChrW(&H2713) Then

                Worksheets(table_names(i)).Cells(j, 2).Value = Worksheets("GROUPE").Cells(j, 2).Value
                Worksheets(table_names(i)).Cells(j, 3).Value = Worksheets("GROUPE").Cells(j, 3).Value
                Worksheets(table_names(i)).Cells(j, 4).Value = Worksheets("GROUPE").Cells(j, 4).Value
                Worksheets(table_names(i)).Cells(j, 5).Value = Worksheets("GROUPE").Cells(j, 6).Value
                Worksheets(table_names(i)).Cells(j, 6).Value = Worksheets("GROUPE").Cells(j, 11).Value
                Worksheets(table_names(i)).Cells(j, 7).Value = Worksheets("GROUPE").Cells(j, 12).Value

                Worksheets(table_names(i)).Rows(j).EntireRow.Hidden = False

            Else
                Worksheets(table_names(i)).Rows(j).EntireRow.Hidden = True

            End If
        Next
    Next
End Sub

En espérant que les commentaires que j'ai rajouté puissent vous aider...
Donc je n'arrive pas du tout à comprendre pourquoi le code de ma fonction tri ne marche que sur la feuille ("GROUPE"), et me fait une erreur 400 sur les autres feuilles.
Merci à tous ceux qui prendront de leur temps pour étudier mon problème.

Cordialement, Axel

bonjour

il faut que le parent de tes object range(ou cell) soit précisés partout

Sub Tri(feuille As Worksheet)
feuille.Sort.SortFields.Clear
feuille.Range(feuille.Cells(1, 1), _
Cells(feuille.UsedRange.Rows.Count, feuille.UsedRange.Columns.Count)).Sort _
Key1:=feuille.Range("B1"), Order1:=xlAscending, Header:=xlYes
End Sub

et pour le rendre un peu moins piquant aux yeux tu peux le mettre dans un bloc with

Sub Tri(feuille As Worksheet)
   With feuille
   .Sort.SortFields.Clear
    .Range(.Cells(1, 1), .Cells(.UsedRange.Rows.Count, .UsedRange.Columns.Count)).Sort _
    Key1:=.Range("B1"), Order1:=xlAscending, Header:=xlYes
End With
End Sub

Ah alors oui en effet je n'avais pas pensé à çela, merci beaucoup, et dans le with il ne faut donc pas rajouter le "feuille" à chaque fois si j'ai bien compris
En tout cas merci beaucoup
Et simple question, j'ai une question toute bête qui est "Peut ont mentionner une variable par concaténation ? Sans que le programme me reproche d'utiliser un Str (c'est pour éviter d'utiliser un tableau)"
Devrais-je rouvrir un nouveau sujets pour la poser ?

re

re

oui dans un bloc with pas besoins de "feuille" MAIS ATTENTION !!! il faut le point "." devant tout le temps

"Peut ont mentionner une variable par concaténation ? Sans que le
programme me reproche d'utiliser un Str (c'est pour éviter d'utiliser un
tableau)"

???????????????????????????????????????

En fait je veux mentionner des variables telles que :

Const table_names_1 = "ARC"
Const table_names_2 = "BZT"
Const table_names_3 = "COR"
Const table_names_4 = "xxx"
Const table_names_5 = "xxx"

Et pouvoir utiliser une fonction qui fait ça par exemple :

For i = 1 To 3
    MsgBox ("table_names_" & i)
Next

Pour m'écrire : "ARC", "BZT", ... et pas table_names_1, table_names_2, ...

Rechercher des sujets similaires à "fonction tri vba qui fonctionne pas"