Tri et classement complexe

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
MichDenis
Le #5338541
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" %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
Philippe.R
Le #5338491
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" 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


Arkaneo
Le #5338361
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.

Arkaneo
Le #5338351
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" %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.

Arkaneo
Le #5338341
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
Publicité
Poster une réponse
Anonyme