DECALER(INDIRECT("AL"&(ENT((LIGNE()-6)/8)*10+6));;;8)
Bonjour
Une possibilité en pièce jointe.
Le principe :
- Pour ce qui est du classement
* pondérer chaque paramètre avec des coefficients de plus en plus petits pour qu'ils comptent de moins en moins, ce qui donne la colonne AL, PTS pondérés, plus exactement la plage AL6:AL13 dans le cas de la première poule
* classer ces points pondérés avec GRANDE.VALEUR dans la colonne AN
- Pour ce qui est de pouvoir utiliser ces formules pour chaque plage
On ne peut pas mettre directement, en dur, AL6:AL13 dans la formule dans la colonne AN, car elle prendrait toujours comme référence les résultats de la poule1, ce qui ne conviendrait pas pour les poules suivantes. J'ai donc défini dans le gestionnaire de noms PTSponderespoule avec la formule
ce qui correspond à une plage verticale de 8 cellules commençant en AL6, puis AL16, puis AL26...en fonction de la position active.Code:DECALER(INDIRECT("AL"&(ENT((LIGNE()-6)/8)*10+6));;;8)
Il suffit de tirer ces formules vers le bas pour avoir les résultats pour les autres poules.
Il ne faut surtout pas changer la disposition des tableaux (toujours 10 lignes par poules)
@ plus
Bonjour
Cf. en pièce jointe. Dis moi si cela fonctionne correctement.
Si tu veux transposer cela dans un autre fichier, il faut créer le mots PTSponderespoule :
Sélectionner AN6, puis -->Formules--> gestionnaire de noms --> Nouveau --> Ecrire PTSponderespoule --> Dans fait référence à, écrire la formule donner dans mon précédent post sans oublier les ; finaux.
@ plus
With CreateObject("ADODB.Connection")
.Provider = "Microsoft.ACE.OLEDB.12.0"
.ConnectionString = "Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0 Xml;HDR=Yes;IMEX=1;"""
.Open
Range("Feuil1!AL6").CopyFromRecordset .Execute("Select [Equipe] from [Feuil1$AC5:AL13] Order By PTS DESC,[DIF],[B P] DESC,[B C] DESC,[Coef] DESC ")
.Close
End With
???Bonsoir
Code:With CreateObject("ADODB.Connection") .Provider = "Microsoft.ACE.OLEDB.12.0" .ConnectionString = "Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0 Xml;HDR=Yes;IMEX=1;""" .Open Range("Feuil1!AL6").CopyFromRecordset .Execute("Select [Equipe] from [Feuil1$AC5:AL13] Order By PTS DESC,[DIF],[B P] DESC,[B C] DESC,[Coef] DESC ") .Close End With
Bonjour CISCOBonsoir à tous
jmco, comme tu as réussi à trouver d'où venait ton problème, tout va bien. Il ne reste plus qu'à tester le code proposé par dysorthographie...
@ plus
Bonjour dysorthographie,Tu as clické sur le bouton Go?
Mais si la méthode de CISCO te convient te prends pas la tête !
Bonsoir
Voila, c'est fait.
Il y avait trois erreurs :
* Dans PTSponderespoule, j'avais écris un /8, alors qu'il fallait écrire un /10, puisqu'il y a 10 lignes par poule (1ère poule avec des valeurs de la ligne 6 à la ligne 13, seconde de 16 (=6 +10) à 23 (= 13 + 10) et ainsi de suite...).
* Dans mon premier post, je disais qu'il fallait prendre quelques précautions pour prendre en compte la bonne plage comportant les points pondérés, AL6:AL13 pour la 1ère poule, AL16:AL23 pour la seconde, et ainsi de suite... Il faut faire de même avec les plages contenant les noms des équipes, AH6:AH13 pour la 1ère poule, AH16:AH23 pour la seconde poule, et ainsi de suite... C'est fait dans le fichier joint avec le nom Listepoule, mais on aurait aussi pu le faire avec DECALER(PTSponderespoule;;-4).
* A la fin de la formule dans AN6, j'avais écrit LIGNES($1:1), ce qui donne 1. Dans AN7, on a LIGNES($1:2), ce qui donne 2. Dans AN16, on doit aussi avoir la valeur 1, ce que ne donne pas LIGNES($1:11). C'est mieux avec MOD(LIGNES($1:11);10), qui donne bien 1. Dans AN17, cela donne MOD(LIGNES($1:12);10), qui a pour valeur 2, et c'est ce qu'on veut.
J'avais traité le cas des autres poules vraiment trop vite. Excuse moi, STP.
@ plus