Etablir un classement (Excel/VBA)

Résolu
jpleroisse Messages postés 1788 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 11 mars 2006 - 18 mars 2005 à 14:43
jpleroisse Messages postés 1788 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 11 mars 2006 - 19 mars 2005 à 15:15
Bonjour,
Mon problème est le suivant, je dois établir un classement relatif à un Cross, pour le classement général pas de problème, la fonction exel marche très bien.Par contre ,comme il y a plusieurs cathégories de coureurs et il faut aussi établir le classement dans leurs cathégoeries et c'est la que j'ai un problème car la fonction Filtres automatique d'exel ne permet pas ce genre de chose.
Si quelqu'un avait une idée, elle serait la bienvenue.
A B
1 EM
2 DE
3 EM
4 SM

Il faudrait donc que dans A1 s'inscrive 1, en A2 1, en A3 2, en A4 1 et ainsi de suite .
D'avance merci (Si mon explication n'est pas assez claire faite le moi savoir )

jpleroisse

6 réponses

galopin01 Messages postés 133 Date d'inscription lundi 4 octobre 2004 Statut Membre Dernière intervention 14 octobre 2011 1
19 mars 2005 à 07:52
Bonjour,
Le code suivant fait exactement le contraire :
Tu mets les catégories en colonne A et il te les classe en colonne B

Sub ClassementParCat()
'libre adaption d'une routine de zon par galopin
Dim Plage As Range, T
Set Plage = Range([A1], [A65536].End(xlUp))
T = ExtD(Plage.Value, 1)
If IsArray(T) Then
T = InverseTab(T, 1)
For i = 1 To UBound(T)
TLookUp (T(i, 1))
Next
Else
MsgBox "Error1"
End If
End Sub


Function ExtD(T, ColT As Byte)
'libre adaption d'une routine de zon
Dim i&, j&, k&, Tablo As New Collection, Tmp()
For i = LBound(T, 1) To UBound(T, 1)
On Error Resume Next
Tablo.Add T(i, ColT), CStr(T(i, ColT))
If Err = 0 Then
ReDim Preserve Tmp(1 To UBound(T, 2), 1 To j + 1)
For k = 1 To UBound(Tmp)
Tmp(k, j + 1) = T(i, k)
Next k
j = j + 1
End If
Next i
ExtD = IIf(j > 0, Tmp, "")
End Function


Function InvTab(T, Optional Base As Byte = 0)
'libre adaption d'une routine de zon
Dim Temp(), i&, j&
ReDim Temp(Base To UBound(T, 2), Base To UBound(T))
For i = LBound(T, 2) To UBound(T, 2)
For j = LBound(T) To UBound(T)
Temp(i, j) = T(j, i)
Next j
Next i
InvTab = Temp
End Function


Sub TLookUp(Z)
'libre adaption d'une routine de zon
Dim T As Range, t1$, n%, tR%
n = 1If Range("A1").Value Z Then n n + 1
Set T = Range("A1:A" & Range("A65000").End(xlUp).Row).Find(Z)
If Not T Is Nothing Then
t1 = T.Address
Do
tR = T.Row
Range("B" & tR).Value = n
n = n + 1
Set T = Range("A1:A" & Range("A65000").End(xlUp).Row).FindNext(T)
Loop While Not T Is Nothing And T.Address <> t1
End If
Range("B1").Value = 1
End Sub
A+
3
NHenry Messages postés 15116 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 9 mai 2024 159
18 mars 2005 à 15:17
Essaye :
i=1
Plage="B1"

do while (plage).offset(i,0).value<>""
if (plage).offset(i,0).value>(plage).offset(i-1,0).value then
'intervertir
i=0
end if
i=i+1
loop

NH
0
jpleroisse Messages postés 1788 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 11 mars 2006 27
18 mars 2005 à 16:00
Merci NH
J'ai essayé, mais cela ne marche pas ,je lance la macro, le sablier apparaît et plus rien ne se passe , je dois faire Echap. pour arrêter.
Je vais essayer de la modifier, si de ton côté tu as une idée de la raison pour laquelle cela ne marche pas , elle sera de nouveau la bienvene.

jpleroisse
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
18 mars 2005 à 23:52
Salut,

Effectivement, ce n'est pas très clair. En tous cas pour moi.
Tu expliques ce que tu veux obtenir mais pas à partir de quoi.
Comment est agencé ton tableau d'origine ? (ou tes tableaux)

Loup Gris
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
galopin01 Messages postés 133 Date d'inscription lundi 4 octobre 2004 Statut Membre Dernière intervention 14 octobre 2011 1
19 mars 2005 à 07:55
Errata
dans la 1ère macro remplacer :
InverseTab
par :
InvTab
0
jpleroisse Messages postés 1788 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 11 mars 2006 27
19 mars 2005 à 15:15
OK Merci à tous , la méthode de galopin01 marche très bien.
0
Rejoignez-nous