Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2019 Problème avec Application.Transpose

JUDNS

XLDnaute Nouveau
Bonjour le forum.

Je m'arrache la tête sans trouver de solution depuis un bon bout de temps.
Je m'adresse amicalement à vous pour trouver de l'aide !

Dans procédure du fichier joint je rencontre l'erreur suivante :

pour les lignes

sortedScores = Application.Transpose(scores.Value)
sortedNames = Application.Transpose(players.Value)

J'ai essayé de multiples solution mais je ne m'en sort pas.
Je précise que ma version d'Excel dans MSO Pro 2019.

D'avance un grand merci.
 

Pièces jointes

  • Classement_Joueurs.xlsm
    118.2 KB · Affichages: 4

wDog66

XLDnaute Occasionnel
Bonjour JUDNS,

Sans regarder votre fichier ni aller plus loin, Transpose() attend un tableau
Donc
VB:
sortedScores = Application.Transpose(scores.Value)
est totalement faux avec ".values"

A+
 
Dernière édition:

CHRIS1945

XLDnaute Occasionnel
Bonjour JUDNS et wDog66,
Voici une proposition qui respecte la logique actuelle (il y a moyen de simplifier)
J'ai également rectifié l'ordre (2 1 3)
Bonne continuation
Chris
 

Pièces jointes

  • Classement_Joueurs.xlsm
    117.6 KB · Affichages: 2

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir à tous,

Avoir le tableau trié (par valeurs du plus petit score au plus grand puis en cas d'égalité par le nom) est relativement simple.

Mais il va falloir creuser votre classement. Pourquoi classer différemment des individus qui ont le même score ?

Imaginons que les deux premiers ont le même score. Quelle est la justice d'en mettre un premier et l'autre second ? Si on met les deux premiers comme gagnants, alors le suivant est en seconde position ou en troisième position ?

Imaginons que vous avez deux individus avec le même plus gros score identique et deux individus qui ont le même score juste en dessous. Que faire ?
Si on veut être juste, il faut au moins aller jusqu'au quatrième individu (2 premiers et 2 troisièmes).

Le pire cas est celui où tous les individus auraient le même score. On en prendrait 3 au hasard ou bien les trois premiers par ordre alphabétique (tant pis pour Zoë )

Le code pour le tableau trié :
VB:
Private Sub CommandButton1_Click()
Dim rngResultats As Range, tResultats0, tResultats1
   ' Définir les plages de scores et de noms
   Set rngResultats = Worksheets("Synthese").Range(" b2:c9")   ' plage des résultats
   tResultats0 = rngResultats.Value                            ' tableau initial des résultats
 
   ' Tri des scores et des noms : priorité aux scores (du plus petit au plus grand),
   ' puis au nom en cas d'égalité
   rngResultats.Sort key1:=rngResultats(1, 2), order1:=xlAscending, key2:=rngResultats(1, 1), order2:=xlAscending, Header:=xlNo, MatchCase:=False
   tResultats1 = rngResultats.Value     ' c'est le tableau trié des résultats - les 3 plus faibles scores sont en haut du tableau
   rngResultats.Value = tResultats0     ' on remet sur la feuille les valeurs du tableau initial
 
   ' Affichage des résultats dans les cellules spécifiées
   ' ici il faut d'abord réfléchir au cas des ex aequo avant de faire quelque chose
End Sub
 
Dernière édition:

JUDNS

XLDnaute Nouveau
Bonjour à tous !

Tout d'abord, un grand merci pour vos réponses.
Je suis toujours admiratif de la qualité et du niveau de compétences des intervenants.

Merci à chacun de vous, wDog66, CHRIS1945, et mapomme de m'avoir aidé et ainsi progressé.
Dans un premier temps, je vais m'appuyer sur la proposition de CHRIS1945 mais en inversant le tri.
C'est à dire que les gagnants sont ceux qui ont le moins de points.
Pour le fichier exemple que j'ai transmis, le nombre de joueurs était fixe mais dans mon projet ces informations sont dans un onglet historique qui s'incrémente régulièrement et donc la zone de recherche change régulièrement.
Je joins un fichier en exemple.

Pour l'information pertinente de mapomme, j'y avait pensé sans aller plus loin.
C'est évidement un sujet à garder, si possible à intégrer au projet, car lors de la distribution de lauriers, quel que soit le jeux il faut être juste et respecter les susceptibilités et/ou rivalités.
Tant pis pour "Zoé" ! En plus c'est le nom de ma petite-fille

Je continue à améliorer mon projet et si vous avez d'autres suggestion, je serai ravi de vous lire.
Bonne fêtes à tous
 

Pièces jointes

  • Historique.xlsm
    374.2 KB · Affichages: 1

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…