Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Tri et classement complexe

5 réponses
Avatar
Arkaneo
Bonjour.

Tout d'abord, je vous présente mes meilleurs voeux pour 2008, en vous
souhaitant toutes les meilleures choses.

Je suis totalement débutant en programmation, VBA ou autre, si j'arrive,
via Internet et divers forums, à m'en tirer pas trop mal, j'avoue être
devant une colle où je ne trouve aucune solution (ou je l'ai croisé,
mais mon manque d'expérience fait que je ne l'ai pas reconnu).

Je voudrais savoir comment il est possible, en partant d'un tableau avec

en entête, un numéro de dossart (de 1 à 20), et en dessous, classé par
lignes, le résultat de 20 participants multiplié par 10 équipes (donc 10
lignes), de classer, par numéro de dossart et par équipe, chaque
participant en fonction de son résultat (du meilleur au moins bon).

Fichier joint : http://cjoint.com/?bgbSxanrFC

Je vous remercie d'avance de l'aide que vous pourrez m'apporter.

Je vous remercie égalemenet, pour mon apprentissage, si vous voulez bien
décrire un minimum la procédure, pour que je ne fasse pas un bête
copier/coller, mais que je puisse progresser en apprenant pour pouvoir
réutiliser, voir adapter, mais je ne pense pas que ce soit pour demain...

Encore merci

5 réponses

Avatar
MichDenis
Copie ceci dans le module feuille où l'action se déroule :

P.S. Dans ton tableau du haut, tu n'as pas d'équipe 4
pourtant, elle est bien présente dans le tableau du bas.
Faudra corriger !

Élaboré sous Excel 2003
'-----------------------------------
Sub test()
Dim rg As Range, B As Long, C As Long
Dim A As Long, NbLigne As Long

Application.ScreenUpdating = False
NbLigne = Range("G4:Z20").Rows.Count
For A = 1 To NbLigne Step 2
Set rg = Range("G2:Z" & A + 3)
B = rg.Rows.Count
With rg
.Sort Key1:=.Cells(B, 1), Order1:=xlDescending, _
Header:=xlNo, Orientation:=xlLeftToRight
C = C + 1
With Range("G26:Z35")
With .Rows(C)
.Value = rg.Rows(1).Value
End With
End With
.Sort Key1:=.Cells(1, 1), Order1:=xlAscending, _
Header:=xlNo, Orientation:=xlLeftToRight
End With
Next
End Sub
'-----------------------------------



"Arkaneo" a écrit dans le message de news:
%23E5Ef1$
Bonjour.

Tout d'abord, je vous présente mes meilleurs voeux pour 2008, en vous
souhaitant toutes les meilleures choses.

Je suis totalement débutant en programmation, VBA ou autre, si j'arrive,
via Internet et divers forums, à m'en tirer pas trop mal, j'avoue être
devant une colle où je ne trouve aucune solution (ou je l'ai croisé,
mais mon manque d'expérience fait que je ne l'ai pas reconnu).

Je voudrais savoir comment il est possible, en partant d'un tableau avec

en entête, un numéro de dossart (de 1 à 20), et en dessous, classé par
lignes, le résultat de 20 participants multiplié par 10 équipes (donc 10
lignes), de classer, par numéro de dossart et par équipe, chaque
participant en fonction de son résultat (du meilleur au moins bon).

Fichier joint : http://cjoint.com/?bgbSxanrFC

Je vous remercie d'avance de l'aide que vous pourrez m'apporter.

Je vous remercie égalemenet, pour mon apprentissage, si vous voulez bien
décrire un minimum la procédure, pour que je ne fasse pas un bête
copier/coller, mais que je puisse progresser en apprenant pour pouvoir
réutiliser, voir adapter, mais je ne pense pas que ce soit pour demain...

Encore merci
Avatar
Philippe.R
Bonjour,
Une solution sans macro, avec en G26 de ton tableau :

=INDEX($G$2:$Z$2;EQUIV(GRANDE.VALEUR($G4:$Z4;COLONNE()-6);$G4:$Z4;0))

à recopier vers la droite ; pour la recopie vers le bas, dans l'état actuel
de ton tableau, il faut adapter à chaque ligne, ainsi pour l'équipe 2 :

=INDEX($G$2:$Z$2;EQUIV(GRANDE.VALEUR($G6:$Z6;COLONNE()-6);$G6:$Z6;0))

Si tu décidais d'avoir le même enchainement de lignes entre les tableaux du
haut et du bas (avec ou sans saut de ligne, au choix, mais dito dans les 2),
tu pourrais simplement recopier vers le bas sans adaptation
--
Avec plaisir
http://dj.joss.free.fr/trombine.htm
Philippe.R
Pour se connecter au forum :
http://www.excelabo.net/mpfe/connexion.php
News://news.microsoft.com/microsoft.public.fr.excel
"Arkaneo" a écrit dans le message de
news:%23E5Ef1$
Bonjour.

Tout d'abord, je vous présente mes meilleurs voeux pour 2008, en vous
souhaitant toutes les meilleures choses.

Je suis totalement débutant en programmation, VBA ou autre, si j'arrive,
via Internet et divers forums, à m'en tirer pas trop mal, j'avoue être
devant une colle où je ne trouve aucune solution (ou je l'ai croisé, mais
mon manque d'expérience fait que je ne l'ai pas reconnu).

Je voudrais savoir comment il est possible, en partant d'un tableau avec
en entête, un numéro de dossart (de 1 à 20), et en dessous, classé par
lignes, le résultat de 20 participants multiplié par 10 équipes (donc 10
lignes), de classer, par numéro de dossart et par équipe, chaque
participant en fonction de son résultat (du meilleur au moins bon).

Fichier joint : http://cjoint.com/?bgbSxanrFC

Je vous remercie d'avance de l'aide que vous pourrez m'apporter.

Je vous remercie égalemenet, pour mon apprentissage, si vous voulez bien
décrire un minimum la procédure, pour que je ne fasse pas un bête
copier/coller, mais que je puisse progresser en apprenant pour pouvoir
réutiliser, voir adapter, mais je ne pense pas que ce soit pour demain...

Encore merci


Avatar
Arkaneo
Bonjour,
Une solution sans macro, avec en G26 de ton tableau :

=INDEX($G$2:$Z$2;EQUIV(GRANDE.VALEUR($G4:$Z4;COLONNE()-6);$G4:$Z4;0))

à recopier vers la droite ; pour la recopie vers le bas, dans l'état
actuel de ton tableau, il faut adapter à chaque ligne, ainsi pour
l'équipe 2 :

=INDEX($G$2:$Z$2;EQUIV(GRANDE.VALEUR($G6:$Z6;COLONNE()-6);$G6:$Z6;0))

Si tu décidais d'avoir le même enchainement de lignes entre les tableaux
du haut et du bas (avec ou sans saut de ligne, au choix, mais dito dans
les 2), tu pourrais simplement recopier vers le bas sans adaptation


Bonjour,

je te remercie sincèrement, ça marche.

J'avais essayer cette méthode, mais je n'arrivais pas à la mettre en place.

Vraiment super, encore merci.

Avatar
Arkaneo
Copie ceci dans le module feuille où l'action se déroule :

P.S. Dans ton tableau du haut, tu n'as pas d'équipe 4
pourtant, elle est bien présente dans le tableau du bas.
Faudra corriger !

Élaboré sous Excel 2003
'-----------------------------------
Sub test()
Dim rg As Range, B As Long, C As Long
Dim A As Long, NbLigne As Long

Application.ScreenUpdating = False
NbLigne = Range("G4:Z20").Rows.Count
For A = 1 To NbLigne Step 2
Set rg = Range("G2:Z" & A + 3)
B = rg.Rows.Count
With rg
.Sort Key1:=.Cells(B, 1), Order1:=xlDescending, _
Header:=xlNo, Orientation:=xlLeftToRight
C = C + 1
With Range("G26:Z35")
With .Rows(C)
.Value = rg.Rows(1).Value
End With
End With
.Sort Key1:=.Cells(1, 1), Order1:=xlAscending, _
Header:=xlNo, Orientation:=xlLeftToRight
End With
Next
End Sub
'-----------------------------------



"Arkaneo" a écrit dans le message de news:
%23E5Ef1$
Bonjour.

Tout d'abord, je vous présente mes meilleurs voeux pour 2008, en vous
souhaitant toutes les meilleures choses.

Je suis totalement débutant en programmation, VBA ou autre, si j'arrive,
via Internet et divers forums, à m'en tirer pas trop mal, j'avoue être
devant une colle où je ne trouve aucune solution (ou je l'ai croisé,
mais mon manque d'expérience fait que je ne l'ai pas reconnu).

Je voudrais savoir comment il est possible, en partant d'un tableau avec

en entête, un numéro de dossart (de 1 à 20), et en dessous, classé par
lignes, le résultat de 20 participants multiplié par 10 équipes (donc 10
lignes), de classer, par numéro de dossart et par équipe, chaque
participant en fonction de son résultat (du meilleur au moins bon).

Fichier joint : http://cjoint.com/?bgbSxanrFC

Je vous remercie d'avance de l'aide que vous pourrez m'apporter.

Je vous remercie égalemenet, pour mon apprentissage, si vous voulez bien
décrire un minimum la procédure, pour que je ne fasse pas un bête
copier/coller, mais que je puisse progresser en apprenant pour pouvoir
réutiliser, voir adapter, mais je ne pense pas que ce soit pour demain...

Encore merci


Bonjour,


je te remercie sincèrement, ça marche aussi.

J'avais essayer la méthode de Philippe.R, mais je n'arrivais pas à la
mettre en place.

Grâce à vous deux, j'ai les deux méthodes, ce qui me permet, non
seulement de me corriger, mais aussi de progresser.

Vraiment super, encore merci.

Avatar
Arkaneo
Merci à MichDenis et à Philippe.R

Gràce à eux, voici les deux méthodes, avec et sans VBA :

----- Méthode avec VBA : -----

Copie ceci dans le module feuille où l'action se déroule :

P.S. Dans ton tableau du haut, tu n'as pas d'équipe 4
pourtant, elle est bien présente dans le tableau du bas.
Faudra corriger !

Élaboré sous Excel 2003
'-----------------------------------
Sub test()
Dim rg As Range, B As Long, C As Long
Dim A As Long, NbLigne As Long

Application.ScreenUpdating = False
NbLigne = Range("G4:Z20").Rows.Count
For A = 1 To NbLigne Step 2
Set rg = Range("G2:Z" & A + 3)
B = rg.Rows.Count
With rg
.Sort Key1:=.Cells(B, 1), Order1:=xlDescending, _
Header:=xlNo, Orientation:=xlLeftToRight
C = C + 1
With Range("G26:Z35")
With .Rows(C)
.Value = rg.Rows(1).Value
End With
End With
.Sort Key1:=.Cells(1, 1), Order1:=xlAscending, _
Header:=xlNo, Orientation:=xlLeftToRight
End With
Next
End Sub
'-----------------------------------

----- Méthode sans VBA : -----

Une solution sans macro, avec en G26 de ton tableau :

=INDEX($G$2:$Z$2;EQUIV(GRANDE.VALEUR($G4:$Z4;COLONNE()-6);$G4:$Z4;0))

à recopier vers la droite ; pour la recopie vers le bas, dans l'état
actuel de ton tableau, il faut adapter à chaque ligne, ainsi pour
l'équipe 2 :

=INDEX($G$2:$Z$2;EQUIV(GRANDE.VALEUR($G6:$Z6;COLONNE()-6);$G6:$Z6;0))

Si tu décidais d'avoir le même enchainement de lignes entre les tableaux
du haut et du bas (avec ou sans saut de ligne, au choix, mais dito dans
les 2), tu pourrais simplement recopier vers le bas sans adaptation

'---------------------------------------

Voilà vraiment un super forum

Bon courage et bon développement à tous