Calculer les combinaisons

lebontuyau

XLDnaute Nouveau
Bonjour les costauds,

Ca fait très très longtemps que je ne me suis pas manifesté mais là je suis désespéré : (

Je vous explique.

Je dispose d'une grille de 11 cases représentant 11 joueurs de football : )

case 1 = joueur1
case 2 = joueur2
..
case 11 = joueur11




Comment faire pour qu'Excel me calcule toutes les combinaisons possibles sur ces 11 cases ?
Apparemment il y en aurait 39 millions (11 x 10 x 9 x 8 x 7 x 6 x 5 x 4 x 3 x 2 x 1) = factoriel

J'aimerais bien entendu que cela puisse être réalisé via un script VBA
Mais quel est ce script ?


Au final
Par exemple, 1ère combinaison :

case 1 = joueur1
case 2 = joueur2
..
case 11 = joueur11



2è combinaison :
case 1 = joueur2
case 2 = joueur1
..
case 11 = joueur11

etc..

Mouais dur dur, et moi pas assez calé en math : (

Merci les costauds
 

lebontuyau

XLDnaute Nouveau
Re : Calculer les combinaisons

Nickel Roger ! L'appli arrive finalement à donner un peu plus de points que moi ;) J'avais fait une erreur pour le décompte de la grille.

Reste plus que la tactique 442 à tester et ce sera ok ;)

Sinon petite faveur à nouveau. Y-a-t-il possibilité de passer le coeff à 3 décimales (au lieu de 2) ?

Merci
Steph
 

ROGER2327

XLDnaute Barbatruc
Re : Calculer les combinaisons

Re...


Nickel Roger ! L'appli arrive finalement à donner un peu plus de points que moi ;) J'avais fait une erreur pour le décompte de la grille.
(...)
Au moins une !​


(...)
Reste plus que la tactique 442 à tester et ce sera ok ;)
(...)
Ce le sera certainement.​


(...)
Y-a-t-il possibilité de passer le coeff à 3 décimales (au lieu de 2) ?
(...)
Parfaitement possible. Il suffit de modifier la constante a au début du code de la procédure toto.
Remplacez​
Code:
Const a& = 100
par​
Code:
Const a& = 1000


Bonne journée.


ℝOGER2327
#8058


Vendredi 27 Absolu 143 (Saintes Gigolette et Gaufrette, dogaresses - fête Suprême Quarte)
12 Vendémiaire An CCXXIV, 0,2361h - immortelle
2015-W40-7T00:34:00Z
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Calculer les combinaisons

Bonjour lebontuyau, ROGER2327 :),

Pour le fun, une version via le solver. Une durée maximum de recherche a été fixée à 10 secondes (elle peut être modifiée dans le code MaxTime:=10). Quand le solver a atteint la durée max, vous pouvez arrêter puis accepter la solution trouvée par le solver. Suivant la bécane utilisée, il faudra peut-être augmenter le MaxTime.

Il faut bien sûr:

  • Dans Excel, avoir activé le complément Excel "Solver" (Menu Fichier/Options/Complément/"Compléments Excel"/Atteindre... puis cocher "Complément Solver")
  • et dans l'environnement VBE, avoir activé la référence au" Solver" (dans VBE, menu Outils/Références... puis cocher "Solver")
Cet essai fournit une "bonne" solution pas forcément le meilleure.
 

Pièces jointes

  • lebontuyau-Meilleures Combinaisons-v1b.xlsm
    67.5 KB · Affichages: 35
Dernière édition:

lebontuyau

XLDnaute Nouveau
Re : Calculer les combinaisons

Bonjour Roger, mapomme,

Roger, excellent, la tactique 442 avec ton appli donne également un tout petit plus de points que moi, nickel donc :)

Sinon je me demandais si il était possible de programmer un total de 22 joueurs max au lieu de 11.
C'est à dire que dans mon équipe je peux avoir jusqu'à 22 joueurs donc 22 lignes.

L'appli serait alors capable de déterminer la meilleur combinaison possible parmi les 22 joueurs et ne sortir bien entendu qu'une combinaison avec les 11 meilleurs joueurs.

Mais par contre attention, mon équipe parfois ne peut disposer que 13 joueurs par exemple.

C'est un bonus pour le programme. Si pas possible, trop compliqué ou manque de temps (et je le comprendrais car je t'ai assez embêté avec toi mais bon comme tu es un pro, j'en profite;))

Merci à toi

Mapomme, je n'ai pas regardé encore ton fichier, je vais regarder cela

En tout cas merci pour toute la patience que vous avez eu avec moi Roger et de l'excellent travail effectué

++
Steph
 

lebontuyau

XLDnaute Nouveau
Re : Calculer les combinaisons

Re.. Roger

J'ai copié et coller les 2 feuilles onglets Excel (tactique et Onglet 1) dans un des mes fichiers Excel mais lorsque j'ai déclenché la macro j'ai eu un message d'erreur, et le code s'est bloqué ici (en gras ci-dessous) :

Le message d'erreur est le suivant :
-----------------------------------
Erreur de compilation
Type défini par l'utilisateur non défini
-----------------------------------

Private Sub toto(f As Worksheet)
Const a& = 100, b& = 25, c& = 1
Dim e&, i&, j&, k&, r&, s&, t&, v&(), x, y$
ReDim p&(1 To 11, 10), q&(10)
ReDim m(3 To 10), n&(3 To 10)
ReDim o#(1, 0)
Dim d As New Scripting.Dictionary
With Application: .EnableEvents = 0: .Calculation = -4135: End With


Pourquoi cette erreur ?

Merci
Steph
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Calculer les combinaisons

Bonjour lebontuyau, ROGER2324,

En attendant la fin du repas dominical de Roger, je tente une réponse sans avoir examiné le code.

Il faut activer la référence à "Microsoft Scripting Runtime" au sein de ton environnement VBE (dans VBE, menu Outils/Références... puis cocher "Microsoft Scripting Runtime").

Ou bien (et c'est un tout petit peu plus long en temps d'exécution) remplacer:
Code:
Dim d As New Scripting.Dictionary
par:
Code:
dim d
set d = CreateObject("Scripting.Dictionary")
 
Dernière édition:

lebontuyau

XLDnaute Nouveau
Re : Calculer les combinaisons

C'est bon mapomme, nickel, oui il fallait activer "Microsoft Scripting Runtime" dans la bibliothèque



mapomme, j'ai regardé ton fichier mais je n'arrive pas à voir où il faut déterminer sa tactique :(

Merci beaucoup :)
Steph
 

ROGER2327

XLDnaute Barbatruc
Re : Calculer les combinaisons

C'est bon mapomme, nickel, oui il fallait activer "Microsoft Scripting Runtime" dans la bibliothèque
(...)
Le code commence par​
Code:
Option Explicit
Public t0!

'|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|
'| Ajouter la référence à la bibliothèque Microsoft Scripting Runtime (scrrun.dll) au projet ! |
'|_____________________________________________________________________________________________|

Sub test()
'etc.
Que vous faut-il de plus ?

Je livre ma dernière version (sans dictionnaire donc pas besoin d'activer la bibliothèque scrrun.dll) et je passe la main. Marre de ces sujets où l'on pose un problème sans en donner une description claire, pour ensuite expliquer que le problème posé n'est pas vraiment celui qu'il faut résoudre. D'ailleurs, le problème suivant n'est pas non plus le vrai problème, etc. Basta !​


ℝOGER2327
#8059


Vendredi 27 Absolu 143 (Saintes Gigolette et Gaufrette, dogaresses - fête Suprême Quarte)
12 Vendémiaire An CCXXIV, 5,7263h - immortelle
2015-W40-7T13:44:36Z
 

Pièces jointes

  • Meilleures combinaisons (4b).xlsm
    50.6 KB · Affichages: 41

lebontuyau

XLDnaute Nouveau
Re : Calculer les combinaisons

Au départ, inutile d'expliquer vraiment tous les détails et complexité que je recherchais car je m'attendais à aucune réponse !
Donc commencer par simple pour tester d'améliorer par moi-même la suite.

1/ Mr Roger a facilement et rapidement résolu la 1re demande, je fus étonné alors que d'autres disaient d'ailleurs qu'il aurait fallu attendre un délai de 400 jours pour en attendre le résultat

2/ Dans un deuxième temps j'ai bien expliqué qu'il fallait appliquer un coeff au niveau des cases et non joueurs ou autre part. Mr Roger a mal compris. Vu le script écris ensuite, je n'ai rien compris donc impossible de lui dire qu'il faisait fausse retour, je ne pouvais constater des résultats erronés

3/ Le test final fut ok. J'ai désiré coupler ces 2 onglets sur une autre application excel, et là je n'ai pu déclencher la macro, car problème de dictionnaire. Mapomme m'a donné la solution

4/ J'ai demandé une amélioration, Mr Roger ne désire pas la faire (analyser entre 11 et 20 joueurs), et bien ok tant pis, il a assez perdu de temps comme ceci avec moi


Bonne continuation et merci quand même
 

lebontuyau

XLDnaute Nouveau
Re : Calculer les combinaisons

Et le script qui plante ici en gras


Private Sub toto(f As Worksheet)
Const a& = 1000, b& = 99, c& = 3
Dim e&, i&, j&, s&, t&, u&(), w
ReDim m(3 To 10), n&(3 To 10)
ReDim p&(1 To 11, 10), q&(10)
ReDim r&(c - 1), v(c - 1)
For i = 0 To c - 1: v(i) = Array(0): Next
With Application: .EnableEvents = 0: .Calculation = -4135: End With
ReDim u(10)
For i = 0 To 10: u(i) = i + 1: Next
w = f.[COE].Value
For i = 1 To 11: q(i - 1) = CLng(a * w(1, i)): Next


Message d'erreur : objet requis
 

Modeste geedee

XLDnaute Barbatruc
Re : Calculer les combinaisons

Bonsour®
je fus étonné alors que d'autres disaient d'ailleurs qu'il aurait fallu attendre un délai de 400 jours pour en attendre le résultat
via VBA le résultat de 39 millions de combinaisons peut être obtenu en moins de 20 minutes
la consultation visuelle de chacune est dépendante de ton acuité visuelle,
le temps de contrôle lui est dépendant de ton acuité intellectuelle...

dans un premier temps il a été dit :
???
dans quel but ?

Dans un deuxième temps j'ai bien expliqué ../.. Mr Roger a mal compris.
pourtant dès le post #4 Roger fait déjà preuve de célérité et d'extra lucidité... ;)
Snif, pas de réponse.
Je me doutais bien que c'était trop complexe
En plus c'est galère, tous mes autres calculs de mon application ne se calculent plus
Tout est passé en mode manuel au niveau des calculs, certainement un code que Roger a mis dans le script et qui a provoqué ceci
Merci Roger !!!
Faï de ben a Bertrand, te lou rendra en caguant.
Roger à fournit ses codes, toi pas !!!

Code:
w = f.[COE].Value
il s'agit ici d'une plage Nommée COE dans la feuille "f"
Donc commencer par simple pour tester d'améliorer par moi-même la suite.
Punaise, elles sont balèzes les formules, j'y comprends rien : (

c'est alors par le B.A. BA qu'il te faut commencer ...
 
Dernière édition:

Discussions similaires