XL 2019 Problème avec Application.Transpose

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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 :
1734710334358.png

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

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:
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

Bonjour à tous,
Je profite de l'occasion pour vous souhaitez un Joyeux Noël et mes meilleurs vœux pour 2025.

Je suis content que ma solution te convienne et je rebondis sur tes commentaires :
"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."

Sache que si tu utilises les Tableaux structurés (TS) tu n'auras pas à ajuster à chaque fois que tu adaptes : cela se fera automatiquement.
Si tu expliques en détail comment fonctionne ton application, je pourrai te montrer comment faire mais avec le peu d'éléments que tu as envoyé ce n'est pas possible de comprendre la logique.
Expliques par exemple, de quel jeu il s'agit... Ensuite tu envoies en premier lieu le fichier se synthèse et puis, en deuxième lieu, le fichier historique sans la synthèse. Et manifestement l'historique ne correspond pas à la synthèse (pas les mêmes noms). Il est donc pas possible de comprendre la logique entre les deux.
Bref, si tu veux plus d'assistance, il faut que tu décrives tout le processus avec un exemple cohérent (historique - synthèse) et je pourrai alors transformer les tableaux en TS.
A bientôt
Chris
 
Bonjour à toutes & à tous, bonjour @JUDNS
Pour répondre à la question initiale ce sont les déclarations
Dim sortedScores() As Integer
Dim sortedNames() As String
Qui posent problème car Scores.value et Players.value renvoient des tableaux de variant et non d'entiers ou de chaînes
Donc remplace ces déclarations par :
Dim sortedScores()
Dim sortedNames()
Et tu n'auras plus l'erreur
Pour le reste je fais de toutes façons confiance à @CHRIS1945 et @mapomme 😉
 
Bonjour à tous,
Je profite de l'occasion pour vous souhaitez un Joyeux Noël et mes meilleurs vœux pour 2025.

Je suis content que ma solution te convienne et je rebondis sur tes commentaires :
"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."

Sache que si tu utilises les Tableaux structurés (TS) tu n'auras pas à ajuster à chaque fois que tu adaptes : cela se fera automatiquement.
Si tu expliques en détail comment fonctionne ton application, je pourrai te montrer comment faire mais avec le peu d'éléments que tu as envoyé ce n'est pas possible de comprendre la logique.
Expliques par exemple, de quel jeu il s'agit... Ensuite tu envoies en premier lieu le fichier se synthèse et puis, en deuxième lieu, le fichier historique sans la synthèse. Et manifestement l'historique ne correspond pas à la synthèse (pas les mêmes noms). Il est donc pas possible de comprendre la logique entre les deux.
Bref, si tu veux plus d'assistance, il faut que tu décrives tout le processus avec un exemple cohérent (historique - synthèse) et je pourrai alors transformer les tableaux en TS.
A bientôt
Chris
Re-bonjour à tous les passionnés qui même en ces périodes de fêtes familiales sont disponible pour apporter de l'aide.

Chris1945, je suis désolé de n'avoir pas été très clair surtout dans les données que j'avais plus ou moins anonymisées.
Cependant comme mon fichier n'est en aucun cas classé défense, je le joins à ce post avec le précédant que vous aviez déjà amélioré.

Dans l'idée, ce que je voulais faire c'est que la procédure "CommandButton1_Click" du fichier Classement_Joueurs_croissant
soit adaptée pour remplacer plus efficacement les 2 procédures "SelectPlageDatesPodiumSkyjo" et "Sub SelectPlageDatesPodiumYaniv" du fichier Nos_Jeux_en_travaux.

Comme le fichier Nos_Jeux_en_travaux dépasse la taille, je fais un lien wetransfer.

J'espère que ça fonctionnera.

Amicalement
JuDns
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour