Trier 4 variables en vba

guainflo

XLDnaute Junior
Bonjour,

Je désire trier 4 variables, en fait il s’agit de réaliser le classement d’un groupe de 4 (coupe du monde de football) à partir des ces variables.

Voici les variables pour le nombre de points :
PtsFRA
PtsAFR
PtsURU
PtsMEX
Voici les variables pour les différences de but :
DIFFRA
DIFAFR
DIFURU
DIFMEX
Voici les variables pour lr nombre de buts inscrits :
BMFRA
BMAFR
BMURU
BMMEX

Je désire mettre la position de chaque pays dans ces variables :
PosFRA
PosAFR
PosURU
PosMEX

Par exemple PosFRA = 1 ; PosAFR = 3 ; … c’est un exemple, lol.

Le classement se calcul comme ceci :
1) On utilise d’abord le nombre de points.
2) Puis en cas d’égalité entre 2 équipes ou plus, la diff de but.
3) Puis en cas d’égalité (encore), le nombre de buts marqués.
Si il y a des équipes avec exactement les mêmes statistiques, un tirage au sort est effectué (je ne veux pas le faire, seulement indiqué qu’un tirage au sort doit être effectué et donner la même position).

Es-ce qu’il existe une fonction permettant de trier un tableau de plusieurs dimensions (en remplissant un tableau avec le nombre de point, les diff et les nombres de buts marqués) ou faut t’il créer un algorithme ?
J’ai pensé à comparer avec des if les variables points pour classer puis en cas d’égalité, comparer les diff puis le nombres de buts marqués, mais c’est pas réalisable ou très compliqué (avec en plus 3 ou 4 égalité).

Avez-vous une idée ?
 

Benjy

XLDnaute Occasionnel
Re : Trier 4 variables en vba

L'étrange impression d'avoir fait un voyage dans le temps.
Sans trie ou formule mathématique je peux te fournir la position de la France dans cette poule :rolleyes:

Sinon un petit tour par la case recherche du forum te permettra sans doute de trouver ton bohneur.
 
Dernière édition:

soenda

XLDnaute Accro
Re : Trier 4 variables en vba

Bonjour le fil, Benjy, guainflo

Peut-on trier un tableau à pusieurs dimensions en une seule instruction ?
Je ne crois pas.

Mais deux techniques simples (il y a beaucoup de variantes) sont applicables.

1 - Copier le tableau dans une feuille de calcul, effectuer le tri, recharger le tableau éventuellement
* pour le nombre d'égalité, il suffit d'appliquer la formule : =NBVAL(plage)-SOMMEPROD(1/(NB.SI(plage;plage)))

2 - Faire la somme pondérée dans un tableau total() à une dimensions,
puis se servir de total() pour trier le tableau à plusieurs dimensions
* pour le nombre d'égalité, il suffira de regarder dans le tableau total()

A plus
 

guainflo

XLDnaute Junior
Re : Trier 4 variables en vba

Bonjour à vous 2,

J'ai rempli une feuille (Classements) avec les valeurs calculées (points, différences de but, buts marqués, ...). Puis ensuite je souhaite effectuer le tri directement sur la feuille.

J'ai enregistré une macro pour connaître les lignes de code, voici ce que excel me donne :
Code:
Sub Macro2()
'
' Macro2 Macro
' Macro enregistrée le 24/06/2010 par ****
'

'
    Sheets("Classements").Select
    Range("C4:K8").Select
    Selection.Sort Key1:=Range("K5"), Order1:=xlDescending, Key2:=Range("J5") _
        , Order2:=xlDescending, Key3:=Range("H5"), Order3:=xlDescending, Header _
        :=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End Sub

J'ajoute ca a mon programme :

Code:
Worksheets("Classements").Range("C5") = "France"
Worksheets("Classements").Range("C6") = "Afrique du sud"
Worksheets("Classements").Range("C7") = "Uruguay"
Worksheets("Classements").Range("C8") = "Mexique"
Worksheets("Classements").Range("D5") = MJFRA
Worksheets("Classements").Range("D6") = MJAFR
Worksheets("Classements").Range("D7") = MJURU
Worksheets("Classements").Range("D8") = MJMEX
Worksheets("Classements").Range("E5") = GFRA
Worksheets("Classements").Range("E6") = GAFR
Worksheets("Classements").Range("E7") = GURU
Worksheets("Classements").Range("E8") = GMEX
Worksheets("Classements").Range("F5") = NFRA
Worksheets("Classements").Range("F6") = NAFR
Worksheets("Classements").Range("F7") = NURU
Worksheets("Classements").Range("F8") = NMEX
Worksheets("Classements").Range("G5") = PFRA
Worksheets("Classements").Range("G6") = PAFR
Worksheets("Classements").Range("G7") = PURU
Worksheets("Classements").Range("G8") = PMEX
Worksheets("Classements").Range("H5") = BMFRA
Worksheets("Classements").Range("H6") = BMAFR
Worksheets("Classements").Range("H7") = BMURU
Worksheets("Classements").Range("H8") = BMMEX
Worksheets("Classements").Range("I5") = BEFRA
Worksheets("Classements").Range("I6") = BEAFR
Worksheets("Classements").Range("I7") = BEURU
Worksheets("Classements").Range("I8") = BEMEX
Worksheets("Classements").Range("J5") = DIFFRA
Worksheets("Classements").Range("J6") = DIFAFR
Worksheets("Classements").Range("J7") = DIFURU
Worksheets("Classements").Range("J8") = DIFMEX
Worksheets("Classements").Range("K5") = PtsFRA
Worksheets("Classements").Range("K6") = PtsAFR
Worksheets("Classements").Range("K7") = PtsURU
Worksheets("Classements").Range("K8") = PtsMEX


    Sheets("Classements").Select
    Range("C4:K8").Select
    Selection.Sort Key1:=Range("K5"), Order1:=xlDescending, Key2:=Range("J5") _
        , Order2:=xlDescending, Key3:=Range("H5"), Order3:=xlDescending, Header _
        :=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Sheets("Résultats").Select

Et il me met un message d'erreur :
Erreur d'exécution '1004'
La méthode select de la calsse Range a échoué.

Mon programme se trouve sur la feuille Résultats, c'est pour cela qu'il y a la ligne : Sheets("Classements").Select
 

guainflo

XLDnaute Junior
Re : Trier 4 variables en vba

Quelqu'un a une idée sur l'erreur quand il sélectionne la plage?

Sheets("Classements").Select
Range("C4:K8").Select
Selection.Sort Key1:=Range("K5"), Order1:=xlDescending, Key2:=Range("J5") _
, Order2:=xlDescending, Key3:=Range("H5"), Order3:=xlDescending, Header _
:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Sheets("Résultats").Select

J'ai essayé : Sheets("Classements").Range("C4:K8").Select, ca donne la même erreur.
 

Fo_rum

XLDnaute Accro
Re : Trier 4 variables en vba

salut

Toujours ce problème : dans quelle feuille ...
A essayer (sans oublier les .)
Code:
... 
With Sheets("Classements")
    .Range("C5") = "France"
    .Range("C6") = "Afrique du sud"
    .Range("C7") = "Uruguay"
    .Range("C8") = "Mexique"
    .Range("D5") = MJFRA
    .Range("D6") = MJAFR
    .Range("D7") = MJURU
    .Range("D8") = MJMEX
    .Range("E5") = GFRA
    .Range("E6") = GAFR
    .Range("E7") = GURU
    .Range("E8") = GMEX
    .Range("F5") = NFRA
    .Range("F6") = NAFR
    .Range("F7") = NURU
    .Range("F8") = NMEX
    .Range("G5") = PFRA
    .Range("G6") = PAFR
    .Range("G7") = PURU
    .Range("G8") = PMEX
    .Range("H5") = BMFRA
    .Range("H6") = BMAFR
    .Range("H7") = BMURU
    .Range("H8") = BMMEX
    .Range("I5") = BEFRA
    .Range("I6") = BEAFR
    .Range("I7") = BEURU
    .Range("I8") = BEMEX
    .Range("J5") = DIFFRA
    .Range("J6") = DIFAFR
    .Range("J7") = DIFURU
    .Range("J8") = DIFMEX
    .Range("K5") = PtsFRA
    .Range("K6") = PtsAFR
    .Range("K7") = PtsURU
    .Range("K8") = PtsMEX
    .Range("C5:K8").Sort Key1:=.Range("K5"), Order1:=xlDescending, Key2:=.Range("J5") _
                       , Order2:=xlDescending, Key3:=.Range("H5"), Order3:=xlDescending
  End With
...
 

Discussions similaires

Réponses
7
Affichages
4 K

Statistiques des forums

Discussions
312 298
Messages
2 086 977
Membres
103 416
dernier inscrit
SEB28110