Petit soucis... je sèche

Bonjour les génies de la VBA

Donc moi je suis novice, et j'aimerai simplifier ce qui suit :

C'est surtout la fin qui me pose problème : le tri d'un tableau déclarer (Poule_10A).
Il faut que j'arrive à écrire la même chose, mais avec des variables.

Il s'agit d'un classeur qui va me servir dans l'organisation de tournoi de coinche. Je "bidouille" avec VBA ! comme je vous l'ai dit, je suis novice.
Mais dans l'idée, j'ai 2 feuilles par nombre d'équipe inscrite de 4 à 16 équipes. La première feuille me sert a rentrer les scores des matchs de Poule et je doit les trier pour renvoyer sur la deuxième feuille, les phases finales.

Avec des macro enregistrées, ça fonctionne, mais j'aimerai avoir tout mon code de création d'un tableau déclaré et tri de celui ci avec des variables (zones des résultats avant tri, zone du tableau trié, nom du tableau) pour n'avoir QUE ces variables à déclarer dans toutes mes feuilles.

En fait, j'ai juste fait des macro de ce que je veux faire et je les ai modifiées...
J'ai fait ça jusqu'à 9 équipes, et pour le reste, j'essaye de faire en sorte de n'avoir qu'un copier-coller à faire en renommant la macro et les plages qui m'interressent.

Faut dire qu'il y a 1 tri par poule, et plus j'avance, plus c'est long de tout modifier ligne par ligne...

Ca se passe dans le Module 1 du fichier, merci de pas vous moquer !

Voila voilà, j'espère que quelqu'un pourra m'aider, là je sèche...

Sub POULE10_A_PTS()
'
' Résultats de la poule 10A
'

' Liste des variables :

    Dim T As Range
    Dim A As Range
    Dim R As Range
    Dim N As String

' Zone des résultats triés
    Set T = Columns("H:K").Rows("16:21")

' Cellule de début de tableau à créer
    Set A = Range("H16")

' Zone des résultat NON TRIES
    Set R = Columns("N:Q").Rows("16:21")

' Nom du tableau
    N = "Poule_10A"

'
'

' Tri de la poule 10A

    T.Select
    Selection.ClearContents
    ActiveWindow.ScrollColumn = 2
    ActiveWindow.ScrollColumn = 3
    ActiveWindow.ScrollColumn = 4
    R.Select
    Selection.Copy
    A.Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    ActiveSheet.ListObjects.Add(xlSrcRange, T, , xlYes).Name = _
        N
    T.Select
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With

    ActiveWorkbook.Worksheets("MATCH POULE 10").ListObjects("Poule_10A").Sort. _
        SortFields.Clear
    ActiveWorkbook.Worksheets("MATCH POULE 10").ListObjects("Poule_10A").Sort. _
        SortFields.Add Key:=Range("Poule_10A[[#All],[POINTS]]"), SortOn:= _
        xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("MATCH POULE 10").ListObjects("Poule_10A").Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

End Sub

Bonsoir à tous !

Olich98...et il est où votre fichier ?

Ca se passe dans le Module 1 du fichier, merci de pas vous moquer

Bonne soirée!

oups, il est pas parti on dirait... Le voilà :

6tri-vba.xlsm (104.06 Ko)

Bonsoir à tous !

Olich98, tout le code en haut peut être remplacé par celui-ci

Sub POULE10_A_PTS()
' Résultats de la poule 10A
' Liste des variables :
    Dim T, A, R As Range
    Dim N As String
Set T = Range("H16:K21") ' Zone des résultats triés
Set A = Range("H16") ' Cellule de début de tableau à créer
Set R = Range("N16:Q21") ' Zone des résultat NON TRIES
N = "Poule_10A" ' Nom du tableau

' Tri de la poule 10A
T.ClearContents
Application.ScreenUpdating = False
R.Copy
A.PasteSpecial Paste:=xlPasteValues
ActiveSheet.ListObjects.Add(xlSrcRange, T, , xlYes).Name = N
Range("H16").CurrentRegion.Sort Key1:=Range("J16"), Order1:=xlDescending, Header:=xlYes
Range("H15").Select
Application.ScreenUpdating = True
End Sub

Bonne nuit!

Bonjour @Nordik_Nation,

Merci beaucoup, c'est clair que ça simplifie la chose !!

Crois tu que c'est possible de remplacer dans la fin de ton code le Range("H16"), Range("J16") et Range("H15") par des variable que je modifierais au début ?

En calculant vite fait tout a l'heure, j'ai dans mon fichier au total 36 fois à répéter cette commande ! avec des plages différentes à chaque fois
Il faut que je n'ai a modifier que le début, c'est a dire que la partie ou j'assigne les variables.

Je vais me coucher, demain matin j'essayerais cette solution ! Un grand merci déjà, ça me parait beaucoup plus clair !!

Bonjour,

Ca fonctionne, j'ai remplacer ce que je voulait par des variables, mais ça ne marche plus dès que je change la colonne de tri (hors macro)

Je pense qu'il faudrait effacer tous les objets SortFields stockés. (j'ai vu ca sur un autre site)

En enregistremant de Macro, il y acette ligne :

ActiveWorkbook.Worksheets("MATCH POULE 10").Sort.SortFields.Clear

Je met donc la ligne suivante (en suivant le modèle que m'a donner Nordik_Nation plus haut):

' effacer les ancien mode de triage
A.CurrentRegion.Sort.SortFields.Clear

Malheureusement ca ne fonctionne pas...

Vous auriez une idée ?

Bonne soirée, journée a tous

Re bonjour.

Autant pour moi, je me suis tromper. c'est dans la feuille active qu'il faut effacer les preferences de tri...

Ca donne ça :

' effacer les ancien mode de triage
ActiveSheet.Sort.SortFields.Clear

Mais ça ne fonctionne pas qd meme...

en entier :

Sub POULE10_A_PTS2()
' Résultats de la poule 10A
' Liste des variables :
    Dim T, A, R, K As Range
    Dim N As String
Set T = Range("H16:K21") ' Zone des résultats triés
Set A = Range("H16") ' Cellule de début de tableau à créer
Set R = Range("N16:Q21") ' Zone des résultat NON TRIES
Set K = Range("J16") ' Colonne de triage
N = "Poule_10A" ' Nom du tableau

' Tri de la poule 10A
T.ClearContents
Application.ScreenUpdating = False
R.Copy
A.PasteSpecial Paste:=xlPasteValues

' effacer les ancien mode de triage
ActiveSheet.Sort.SortFields.Clear

' Nommer et Trier le tableau
ActiveSheet.ListObjects.Add(xlSrcRange, T, , xlYes).Name = N

    'c'est ici qu'il y a un soucis !
A.CurrentRegion.Sort Key1:=K, Order1:=xlDescending, Header:=xlYes

A.Select
Application.ScreenUpdating = True
End Sub

Bonsoir à tous!

Olich98, voici un fichier pour tes poules, pour le tri il ne faut pas que les colonnes se touchent si tu en rajoutes...jette un coup d'oeil sur celui-ci

Bonne soirée !

5olich98-ver2.xlsm (29.03 Ko)

Pour répondre à ta question sur le tri si les variables sont déclarées ça devrait fonctionner

Dim R, x As Range
Set R = F2.Range("H23:K27")
Set x = F2.Range("J23")

R.CurrentRegion.Sort Key1:=x, Order1:=xlDescending, Header:=xlYes

Super, ça fonctionne en rajoutant F2 !!

Merci, je continue avec ça en espérant que le reste se passe comme prévus.

Et merci beaucoup pour le V2, ca m'inspire ! et ça va me faire gagner un temps fou !!!

A bientôt

Bonjour Nordik_Nation,

Je trouve le V2 est infiniment plus pratique, seulement j'aimerais comprendre le fonctionnement du code. J'avoue que je ne peux pas trop la modifier pour arriver à ce que je veux, et c'est très frustrant.

Si je pouvais avoir des commentaires dans le code, histoire de détailler les méthodes de calculs, ça me permettrais d'en comprendre le fonctionnement et de pouvoir le modifier.

Bonne journée,

Olich

Pour info, le tri ne voulait pas se faire quand la création d'un tableau se faisait sur un tableau nommé récemment. Il suffisait que je veuille déplacer mon futur tableau d'une ligne et plus rien ne marchait..... Il fallait transformer l'ancien tableau en plage de donnée (et de ce fait supprimer l'ancien tableau) pour que la création du nouveau puisse se faire.

Rechercher des sujets similaires à "petit soucis seche"