[VBA Excel] Programmation tableau

Fermé
François - 4 déc. 2007 à 14:46
 momzo - 6 août 2010 à 18:45
Bonjour,
J'ai un tableau de 13x13. Les lignes correspondent à des participants et les colonnes à des épreuves. Pour chaque épreuve concourue, un nombre de points est attribué à chaque participant.

Je débute sous VBA et j'aimerais parcourir le tableau pour trouver la somme maximale de points que l'équipe de participants peut faire, sachant qu'un participant ne peut concourir qu'à une seule épreuve.

Etant donné le nombre de combinaisons, je ne sais pas comment démarrer et je suis utilisé d'utiliser une macro sous VBA pour essayer de le faire.
A voir également:

14 réponses

CREATE TABLE Exams
(
ID int, -- should be an AutoNumber and PrimaryKey
ExamID int -- use Long in Access
ExamTakerGroup varchar(50),
ExamTaker varchar(50), -- use Text in Access
ExamResult int
)

-- La somme de l'équipe
SELECT ExamTakerGroup, Sum(ExamResult) FROM Exams GROUP BY ExamTakerGroup

-- La somme de chaque participant
SELECT ExamTaker, Sum(ExamResult) FROM Exams GROUP BY ExamTaker
0
Je ne comprends pas la solution donnée et je ne sais pas si elle correspond à ce dont j'ai besoin
La somme des points doit être faite de telle manière : points du participant 1 à l'épreuve 1 + points du participant 2 à l'épreuve 2 + ... + points du participant 13 à l'épreuve 13
Ceci n'est qu'un exemple, car il faut obtenir le maximum en prenant en compte toutes les combinaisons possibles (par exemple : points du participant 1 à l'épreuve 8 + points du participant 11 à l'épreuve 2 + ... + points du participant 5 à l'épreuve 9)
C'est cette multitude de solutions possibles qui me complique la tâche
0
Salut,
Il n'y a pas besoin de VBA et il y a 2 solutions:
1/ Soit, tu dis avoir 13 participant (lignes), 13 épreuves (colonnes) et chaqu'un participe à une seule épreuve. Donc, chaque ligne et chaque colonne n'a qu'un score et tu n'as qu'une équipe de 13 pour ta competition. Dans ce cas, le score maximal de ton équipe de 13 est la somme des scores maximum pour chaque épreuve.
2/ Sinon, tu as des scores dans chaque case du tableau et donc tu cherches à identifier l'épreuve où chaque participant a eu le meilleur score - son épreuve majeure - avant de sommer les meilleurs scores obtenus. Dans ce cas, il te faudra éliminer des doublons si 2 participants ont fait leur meilleur dans la même épreuve ou si une personne a son meilleur score dans 2 épreuves. Pour ce faire, il te faut:
- utilise la fonction MAX dans la 15ème ligne et collonne du tableau pour trouver le score maximal de chaque colonne (épreuve) et de chaque ligne (participant);
- s'il n'y a pas des doublons, la somme de la 15ème colonne te donne le score de l'équipe et il doit être égale à la somme de la 15ème colonne.
- y-a-t-il des doublons? Pour ça, utilise la fonction de formattage conditionnel dans le menu 'Format'. Selectionne une colonne, appelle la fonction, donnes la condition si la valeur d'une case est égale au maximum dans la 15ème ligne alors que la case prenne une couleur de ton choix. Faits de même pour toutes les colonnes. Puis, refait la même chose par ligne et que la valeur soit mise en gras. Ainsi, tu verra qui est fort dans quelle épreuve et tu pourra éliminer les doublons sur chaque ligne et chaque colonne en rajoutant un (') en avant du chiffre à éliminer.
- et voilà!

bonne chance.
0
J'ai déjà utilisé la fonction MAX pour déterminer l'épreuve majeure de chaque participant et il se révèle que cela ne donne pas forcément le meilleur score pour l'équipe. Je prends un exemple simple sur 2 participants et 2 épreuves :
Le participant 1 fait 1067 points à l'épreuve 1 et 1035 points à l'épreuve 2
Le participant 2 fait 1029 points à l'épreuve 1 et 964 points à l'épreuve 2
En utilisant MAX, ça va me donner 1067 + 964 = 2031
Hors, on voit bien que si on fait 1029 + 1035 = 2064, cela fait plus de points

C'est pour ça que je crois être obligé de faire tous les calculs d'équipe possibles pour obtenir le score maximum et la meilleure équipe.
En fait, les participants ne font pas obligatoirement leur épreuve majeure, je dois prendre en compte l'ensemble de l'équipe pour en déterminer le potentiel maximal.
0

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

Posez votre question
Re,
Alors, il te faut partir sur des fonctions de statistiques (tu n'as pas pris en compte mon dernier point sur l'élimination des doublons). C'est une question type lottairie du nombre d'arrengements sans répetition de 13 chiffres (épreuve 1 à 13). Excel calculera le nb. des combinaisons possibles (=PERMUT(13;13)). Par contre, il faut une moulinette pour écrire toutes les permutations dans un tableau de 13 colonnes/participants - tu tombera sur la limite Excel 65'000 lignes qu'une feuille supporte. Puis, il te faut calculer le total des points pour chaque permutation et en grader le Max des tous.

Pour éviter la limite Excel de 65'000 lignes, il faut calculer la permutation une à une, puis le score total depuis le tableau des résultats avec la fonction INDEX(tableau des résultats; ligne='participant'; colonne='épreuve') pour sélectionner les résulats voulus. En fin, tu gardes en mémoire le total et tu le compares avec chaqu'un calculé en suite et tu retiens le Max des deux. Et ainsi de suite.

p.s.:
Sinon, en revant sur ma première méthode et ton exemple, tu vois bien que 1067 est un Max à double ne ligne 'participant 1' et en colonne 'épreuve 1' donc à éliminer. Ainsi tu restes avec 1029 et 1035.
		l'épreuve 1	l'épreuve 2	Max couleur	
Le participant 1	1067	1035	1067	à eliminer
Le participant 2 	1029	964	1029	
Max Gras		1067	1035		
		à eliminer			
0
Concernant les permutations, si je le fais en manuel, je tombe aussi sur la limite des 65000 lignes (ainsi que celle des 16 000 000 des cases d'une feuille vue le nombre de permutations)
Je cherchais un moyen de faire ces permutations en automatique pour me simplifier la tâche.
Je pensais plus à un programme du style prendre une valeur colonne 1 + colonne 2 + ... + colonne 13 en choisissant la ligne de manière automatique (variable comprise entre 1 et 13), mais je ne m'y connais pas assez en VB pour écrire ce type de programme.

Pour ta première méthode, je n'arrive pas à l'appliquer sur une équipe (cf fichier joint)

http://pagesperso-orange.fr/natation.nec/maximum.xls
0
J'arrive sur natation.nec, puis pas de lien sur le fichier XLS. Sinon, ton hébergeur/fournisseur me dit que j'accède une page inexistante ou un plage non autorisé.
0
Désolé, je n'ai pas précisé. Il faut faire faire un clique droit sur le lien et choisir "Enregistrer sous".
0
Désolé aussi, ca charge un page HTML qui une fois ouverte contient le text :

page non accessible (erreur 403,404)
Vous avez demandé une page qui n'existe pas ou qui est réservée aux clients Orange
merci de vous connecter ultérieurement
0
Ca devrait mieux fonctionner

https://woofiles.com
0
Encore une erreur quand j'ouvre le fichier téléchargé - il manque pour Excel un autosearch.css. Je ne sais pas ce que c'est.
désolé.
0
passe moi ton XLS sur dm_dm@live.fr
0
salut a tous,
j'ai besoin d'un peu d'aide pour pouvoir débuter a programmer avec le VB
pouvez-vous m'aider svp


je vous laisse mon email
nousssa_22@hotmail.com




merci
0
slt c'est momar j'ai besoin de votre aide sur la programmation en excel office 2007.
Merci d'avance de votre aide
0