Aide sur vba

cs_Prestigieux Messages postés 9 Date d'inscription lundi 8 octobre 2007 Statut Membre Dernière intervention 27 juillet 2012 - 20 juil. 2012 à 15:49
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 27 juil. 2012 à 10:41
Salut à tous,
J'ai un programme écris sous vba pour le calcul de combinaison (plage de 10 classes pour 20 équipes) mais le problème il me met assez de temps (plus d'une dizaine d'heure) pour m'afficher le résultat quand j'augmente le nombre de classe à 16.

Est ce possible d'améliorer le code ou dois je l'écrire sous un autre programme ?
Malheureusement je ne connais pas les autres langages de programmation.

Merci de m'aider

11 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
20 juil. 2012 à 16:42
Bonjour, Prestigieux,
Combien font d'après toi 16! (factorielle 16) ?
A quoi, dans ces conditions, te servirait-il de stocker (où que ce fût) ces résultats dont la seule lecture serait elle-même fastidieuse ?
En d'autres termes : à quoi et comment utiliserais-tu ces résultats ?
Si tu as une réponse valable à cette question, il est probable que nous aurons une réponse valable (et très différente) à ton problème

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
cs_Prestigieux Messages postés 9 Date d'inscription lundi 8 octobre 2007 Statut Membre Dernière intervention 27 juillet 2012
20 juil. 2012 à 17:17
En fait, il y a un tournoi inter école qui doit se dérouler. Le tournoi doit accueillir mois d'élèves possible pour la participation
Nous avons 16 équipes et 21 écoles. chaque école propose un effectif (élèves) pour la participation au tournoi.

Le but est d'obtenir le total le moins élevé pour la réalisation des équipes, ce qui ne signifie pas forcément le choix du moins-disant pour chaque équipe, sachant que chaque classe ne peut se voir attribuer qu'une équipe.

Exemple :
Classe 1 propose pour les équipes 1 et 2 respectivement 1000 et 1200
Classe 2 propose pour les équipes 1 et 2 respectivement 1100 et 1400
En choisissant le moins-disant pour l'équipe 1 (Classe 1 à 1000), il ne te reste que Classe 2 pour l'équipe 2 (1400) Total = 2400
Alors que si on choisis Classe 1 pour l'équipe 2 (1200) il te reste Classe 2 pour l'équipe 1 (1100) Total = 2300

NB: 1. une école n'a droit qu'à une seule équipe
2. toutes les écoles n'auront pas d'équipe
3. les écoles ne propose pas souvent un effectif à des équipes.

Voici planter le décors.
Merci
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
20 juil. 2012 à 18:07
Bonjour,

Juste pour comprendre..

Tu dis:
En choisissant le moins-disant pour l'équipe 1 (Classe 1 à 1000), il ne te reste que Classe 2 pour l'équipe 2 (1400) Total = 2400


Et pourquoi , en choisissant le moins-disant pour l'équipe 1 (Classe 1 à 1000), on ne pourrait pas choisir Classe 2 pour l'équipe 1 (1100) ?





[] Ce qui va sans dire. va mieux en le disant.
0
cs_Prestigieux Messages postés 9 Date d'inscription lundi 8 octobre 2007 Statut Membre Dernière intervention 27 juillet 2012
25 juil. 2012 à 18:57
Merci de vous pencher sur mon sujet

En fait une école n'a droit qu'à une seule équipe.

Mille merci
Cordialement
0

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

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
25 juil. 2012 à 19:01
Voilà qui devient d'une clarté exemplaire, maintenant
Mais c'est probablement trop clair pour moi. Pour sûr !
Quelqu'un (s'il en est un) pour reformuler le problème de manière différente (mais précise) ? Merci d'avance .


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
25 juil. 2012 à 23:01
Bonsoir ucfoutu,
Quelqu'un (s'il en est un) pour reformuler le problème de manière différente (mais précise)

Sois patient..!
On n' est qu' au 6ième post.Il en reste encore une dizaine d' autres, pour qu' enfin ça se précise.

Mais peut être que ce sont nos questions qui sont "trop claires" au poinr d' être éblouissantes ..



[] Ce qui va sans dire. va mieux en le disant.
0
cs_Prestigieux Messages postés 9 Date d'inscription lundi 8 octobre 2007 Statut Membre Dernière intervention 27 juillet 2012
26 juil. 2012 à 16:35
Merci d'avance à vous
Merci beacoup
Je reste à votre disposition pour d'éventuels éclaircissement

Cordialement
0
cs_Prestigieux Messages postés 9 Date d'inscription lundi 8 octobre 2007 Statut Membre Dernière intervention 27 juillet 2012
26 juil. 2012 à 16:54
voici le code

Sub toto()
Dim a&, b&, c&, d&, e&, f&, g&, h&, i&, z& 'Compteurs des boucles
Dim va#, vb#, vc#, vd#, ve#, vf#, vg#, vh#, vi# 'Valeurs sélectionnées par les boucles a à i
Dim m#, x# 'm=minimum retenu
Dim dd(), zz&(1 To 10, 0) '10=nombre d'équipe
With Range("E3:E12") 'Zone grisée colonne E
.ClearContents
m = 1E+300
dd = Range("F3:AI12").Value 'Table de données
'Le nombres de boucles FOR...NEXT emboîtées est égal au nombre d'équipe.
For a = 1 To 30 '20=Nombre de classe
If Not IsEmpty(dd(1, a)) Then
va = dd(1, a)
For b = 1 To 30
If b <> a Then
If Not IsEmpty(dd(2, b)) Then
vb = dd(2, b)
For c = 1 To 30
If c <> a And c <> b Then
If Not IsEmpty(dd(3, c)) Then
vc = dd(3, c)
For d = 1 To 30
If d <> a And d <> b And d <> c Then
If Not IsEmpty(dd(4, d)) Then
vd = dd(4, d)
For e = 1 To 30
If e <> a And e <> b And e <> c And e <> d Then
If Not IsEmpty(dd(5, e)) Then
ve = dd(5, e)
For f = 1 To 30
If f <> a And f <> b And f <> c And f <> d And f <> e Then
If Not IsEmpty(dd(6, f)) Then
vf = dd(6, f)
For g = 1 To 30
If g <> a And g <> b And g <> c And g <> d And g <> e And g <> f Then
If Not IsEmpty(dd(7, g)) Then
vg = dd(7, g)
For h = 1 To 30
If h <> a And h <> b And h <> c And h <> d And h <> e And h <> f And h <> g Then
If Not IsEmpty(dd(8, h)) Then
vh = dd(8, h)
For i = 1 To 30
If i <> a And i <> b And i <> c And i <> d And i <> e And i <> f And i <> g And i <> h Then
If Not IsEmpty(dd(9, i)) Then
vi = dd(9, i)
For z = 1 To 30
If z <> a And z <> b And z <> c And z <> d And z <> e And z <> f And z <> g And z <> h And z <> i Then
If Not IsEmpty(dd(10, z)) Then
x = va + vb + vc + vd + ve + vf + vg + vh + vi + dd(10, z)
If x < m Then
zz(1, 0) a: zz(2, 0) b: zz(3, 0) = c: zz(4, 0) = d: zz(5, 0) = e: zz(6, 0) = f: zz(7, 0) = g: zz(8, 0) = h: zz(9, 0) = i: zz(10, 0) = z
m = x
End If
End If
End If
Next z
End If
End If
Next i
End If
End If
Next h
End If
End If
Next g
End If
End If
Next f
End If
End If
Next e
End If
End If
Next d
End If
End If
Next c
End If
End If
Next b
End If
Next a
.Value = zz
End With
End Sub
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
26 juil. 2012 à 16:59
Je reste à votre disposition pour d'éventuels éclaircissement

Crois-tu vraiment, Prestigieux, qu'il va nous appartenir de te poser mille et une questions pour y voir clair ?
Si oui : tu fais fausse route ! Ici, il appartient au demandeur (toi) de savoir exposer d'emblée (dès l'ouverture de la discussion) les tenants et aboutissants de son problème. Il doit le faire de manière technique (pas de roman) qui ne laisse aucune place au moindre doute.
C'est donc toi, que l'on attend.
Prends ton temps ! Rédige ton "affaire" comme on rédigerait l'énoncé d'un problème distribué dans une salle d'examen. Lis et relis ton énoncé. Débrouille-toi pour qu'il soit technique, clair et précis.
Dans le cas contraire, je crains fort que tu vas vite te retrouver bien seul ici.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
cs_Prestigieux Messages postés 9 Date d'inscription lundi 8 octobre 2007 Statut Membre Dernière intervention 27 juillet 2012
27 juil. 2012 à 10:27
Merci d'avance

En fait dans le code que j'ai joins, le programme détermine et affiche la combinaison de 10 équipes dont la somme des classes s'avère la plus petite de l'ensemble de toutes les combinaisons possibles.

Actuellement j'ai 16 équipes et j'aimerais adapté ce programme. Quand j'essaie de l'adapter le programme met plus d'une dizaine d'heures pour afficher les résultats.

Du point de vue technique comment réécrire ou adapter le programme pour me permettre d'afficher les résultats le plus rapidement possible.

Cordialement
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
27 juil. 2012 à 10:41
C'est toujours aussi incompréhensible (sans précision technique)!
Désolé.
Essaye donc d'exposer comme un énoncé ! Imagine la tête que feraient des candidats en recevant ton "énoncé" ! Ils seraient, je te le rappelle, dans une salle "tenue" par de simples surveillants et non par des "correcteurs" en charge de leur dire ce que ne dit pas l'énoncé.
Un énoncé tel que le tien :
- ne serait pas acceptable
- conduirait soit à la remise de pages blanches, soit à la remise de pages traitant le "problème" de manière très arbitraire (selon l'interprétation de chaque candidat, face à l'imprécision...) ===>> l'épreuve serait alors ensuite probablement annulée et le rédacteur de l'énoncé serait( invité à aller plutôt cueillir du muguet une fois par an !



________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
Rejoignez-nous