Formules pour classement

maval

XLDnaute Barbatruc
Bonjour

Je rencontre un problème qui me paraissait simple à résoudre mais je ne parviens pas à trouver la solution et l'explication sur ce forum.
Sur mon classeur j'ai des feuilles dans laquelle apparait une feuille "1erTours", dans les colonnes, des N° d’équipes, des noms et des points.
J'aimerai récupéré ces valeurs sur la feuille "Classement"
ci joint mon fichier explicatif

Merci d'avance à ceux qui prendront la peine de m'aider

Cordialement
Maval
 

Pièces jointes

  • Classeur5.xlsm
    14.7 KB · Affichages: 60
  • Classeur5.xlsm
    14.7 KB · Affichages: 68
  • Classeur5.xlsm
    14.7 KB · Affichages: 62

job75

XLDnaute Barbatruc
Re : Formules pour classement

Bonjour maval, hoerwind,

Vous utilisez VBA sur tous vos fils, alors une macro de plus :

Code:
Private Sub Worksheet_Activate()
With Sheets("1erTours") 'With Feuil2
  [C3:C200] = .[B3:B200].Value
  [D3:E200] = .[D3:E200].Value
  [F3:F200] = .[G3:G200].Value
End With
End Sub
A placer dans la feuille Classement, se lance quand on active cette feuille.

A+
 

maval

XLDnaute Barbatruc
Re : Formules pour classement

Bonjour Job75,

Je te remercie beaucoup pour les codes Nickel...

Il faut que maintenant je trouve le moyen de recopier la feuille 1erTours une fois l'avoir trier, vers la feuille 2émeTours pour lui rentrer les score?

Merci pour tous

@+

Max
 

job75

XLDnaute Barbatruc
Re : Formules pour classement

Re,

Pour recopier une feuille "Tours" sur la suivante placez dans ThisWorkbook :

Code:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim n As Integer, w As Worksheet
n = Val(Sh.Name) - 1
If n < 1 Then Exit Sub
For Each w In Worksheets
  If Val(w.Name) = n Then w.Cells.Copy Sh.[A1]: Exit For
Next
Sh.[B3:J200].Sort Sh.[F2].Offset(, n), xlDescending, Header:=xlNo
End Sub
J'ai mis un tri en supposant qu'on le fait sur la dernière colonne de points, à vous de voir.

A+
 

job75

XLDnaute Barbatruc
Re : Formules pour classement

Re,

Sur Excel 2007/2010 il faut ajouter une ligne pour vider le presse-papier :

Code:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim n As Integer, w As Worksheet
n = Val(Sh.Name) - 1
If n < 1 Then Exit Sub
For Each w In Worksheets
  If Val(w.Name) = n Then w.Cells.Copy Sh.[A1]: Exit For
Next
Sh.[A1].Copy Sh.[A1] 'vide le presse-papier
Sh.[B3:J200].Sort Sh.[F2].Offset(, n), xlDescending, Header:=xlNo
End Sub
Sinon il y a un avertissement à la fermeture du fichier...

A+
 

job75

XLDnaute Barbatruc
Re : Formules pour classement

Re,

Oui bien sûr, alors ce code dans ThisWorkbook :

Code:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim n As Integer, w As Worksheet
n = Val(Sh.Name) - 1
If n < 1 Then Exit Sub
Sh.[B3:J200].Sort Sh.[B3], xlAscending, Header:=xlNo
For Each w In Worksheets
  If Val(w.Name) = n Then
    w.[B3:J200].Sort w.[B3], xlAscending, Header:=xlNo
    w.[B3:E200].Copy Sh.[B3]
    w.[G3:G200].Resize(, n).Copy Sh.[G3]
    w.[2:2].Copy Sh.[A2] 'titres
    Exit For
  End If
Next
Sh.[B3:J200].Sort Sh.[F3].Offset(, n), xlDescending, Header:=xlNo
End Sub
Il y a 3 tris...

A+
 

job75

XLDnaute Barbatruc
Re : Formules pour classement

Re,

Une autre solution, plus simple, est de ne rien copier si des points ont été entrés dans la feuille.

En effet normalement la feuille du "Tours" précédent a déjà été copiée :

Code:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim n As Integer, w As Worksheet
n = Val(Sh.Name) - 1
If n < 1 Then Exit Sub
If Application.Count(Sh.[G3:G200].Offset(, n)) Then Exit Sub
For Each w In Worksheets
  If Val(w.Name) = n Then w.Cells.Copy Sh.[A1]: Exit For
Next
Sh.[A1].Copy Sh.[A1] 'vide le presse-papier
Sh.[B3:J200].Sort Sh.[F3].Offset(, n), xlDescending, Header:=xlNo
End Sub
A+
 

job75

XLDnaute Barbatruc
Re : Formules pour classement

Re, salut R@chid,

le code seul petit problème est qu'il ne trie pas par points du plus grand au plus petit?

La macro du post#10 fait ce tri à chaque fois qu'on active la feuille.

La macro du post #12 fait le tri tant qu'il n'y a pas de nouveaux points entrés.

Si l'on veut le tri même quand de nouveaux points ont été entrés :

Code:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim n As Integer, w As Worksheet
n = Val(Sh.Name) - 1
If n < 1 Then Exit Sub
If Application.Count(Sh.[G3:G200].Offset(, n)) = 0 Then
  For Each w In Worksheets
    If Val(w.Name) = n Then w.Cells.Copy Sh.[A1]: Exit For
  Next
  Sh.[A1].Copy Sh.[A1] 'vide le presse-papier
End If
Sh.[B3:J200].Sort Sh.[F3].Offset(, n), xlDescending, Header:=xlNo
End Sub
A+
 

Discussions similaires

Réponses
7
Affichages
293

Statistiques des forums

Discussions
312 228
Messages
2 086 421
Membres
103 206
dernier inscrit
diambote