• Initiateur de la discussion Initiateur de la discussion pascal82
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

pascal82

XLDnaute Occasionnel
Bonjour à tous et à toutes,

Je suis face a un programme glouton et je ne sais pas comment réduire sont temps de traitement.
2 options sont possibles, le passage en variable tableau ou l'option de passer par une programmation dynamique de type "sac à dos". Dans les 2 cas je ne sais pas faire.
Le programme utilisé est peu complexe, par contre ce qui le rend très lourd c'est le nombre d'opération qu'il doit réaliser

Explication: tableau A (A2:AF32) tableau B (A3:AF3)
Je dois déterminer toutes les solutions possibles permettant d'obtenir les 2 conditions suivantes
L'addition de 2 à n cellules du tableau "A" donne un résultat < 21 et l'addition de 2 à n cellules du tableau "B" donne un résultat >9 avec n=2 à 31
Un exemple est donné dans le fichier

J'arrive à additionner la combinatoire de 6 cellules du tableau A par 6 cellules du tableau B même si le temps de traitement est voisin de 24h, par contre le passage a 7 et plus est inenvisageable avec la méthode que j'utilise

Merci par avance

Cordialement
 

Pièces jointes

Re : Programme glouton

bonsoir,

pas évident ton "truc", il faudrait un peu de temps pour se pencher dessus
il doit y avoir d'autres procédés (algorithmes)

mais je vois que tu n'as que des valeurs entières semble t'il !
alors commences par mettre en debut de Module
DefInt A-Z
ceci définit toutes les variables entières !

si ensuite tu as besoin d'une autre variable rien n'empêche de la nommer exemple MaVar! ou MaVar& ...
...
 
Re : Programme glouton

Bonsoir Rolan_M,

Merci pour avoir apporté une pierre à l'édifice (qui n'a pas encore de fondation). Dans un premier temps je pensais que j'avais été maladroit dans la rédaction de ma demande mais il semble que c'est plutôt la complexité qui freine.
En effet il doit exister un algorithme pour résoudre "Ce truc".
Depuis plusieurs jours je tente d'adapter l'algorithme du "sac à dos" en passant par des moyennes par colonnes et les écarts types, mais je m'épuise sans aucun résultat.
Concernant "DefInt A-Z", je ne connais pas, est ce que cela dispense de typer les variables en Integer, long etc..
J'en profite pour souligner une coquille dans l'exemple, pour BN6, BO6 on n'affiche rien en BQ6 et non BQ5

Cordialement
 
Re : Programme glouton

re

Concernant "DefInt A-Z", je ne connais pas, est ce que cela dispense de typer les variables en Integer, long etc..

DefInt A-Z en début de module définit toutes les variables comme entières ! idem MaVar%
le code s'exécute plus rapidement, surtout quand il s'agit de grande quantité de données entières !

perso je pratique toujours ainsi (une vieille habitude où les processeurs n'étaient pas aussi performant qu'aujourd'hui)
ensuite si nécessaire j'utilise des variables MaVar2& pour as long MaVar3! pour as double . . .
c'est plus explicite que les nommer avec dim ! car Dim MaVarX as truc !?!
dans le code MaVar c'est pas très explicite !? est-ce une Var String, Integer ou autre !?
par-contre MarVar! ou MaVar& ou MaVar$ là d'accord, je sais de quoi il s'agit.
 
Re : Programme glouton

Bonjour à tous,

DefInt A-Z en début de module définit toutes les variables comme entières ! idem MaVar%
le code s'exécute plus rapidement, surtout quand il s'agit de grande quantité de données entières !

perso je pratique toujours ainsi (une vieille habitude où les processeurs n'étaient pas aussi performant qu'aujourd'hui)
ensuite si nécessaire j'utilise des variables MaVar2& pour as long MaVar3! pour as double . . .
c'est plus explicite que les nommer avec dim ! car Dim MaVarX as truc !?!
dans le code MaVar c'est pas très explicite !? est-ce une Var String, Integer ou autre !?
par-contre MarVar! ou MaVar& ou MaVar$ là d'accord, je sais de quoi il s'agit.

J'ai du mal à saisir ton propos...

OK pour les $, ! et autres signes
Mais il me semble que le Dim est obligatoire suivi de son étendue : MaVar2& provoquera une erreur mais pas Dim MaVar2&

Si tu ne mets pas la portée, c'est du Variant.

Voir ICI, un tuto de mon ami Didier...

Un autre de MichelXLD sur un portail ami : ICI

A + à tous
 
Dernière édition:
Re : Programme glouton

Bonsoir,
Dans un premier temps je pensais que j'avais été maladroit dans la rédaction de ma demande mais il semble que c'est plutôt la complexité qui freine.
Je ne pense pas que le problème soit la difficulté mais plutôt le manque de précision des explications et un nombre trop important de données dans un fichier exemple qui ne donne pas l'envie de se pencher dessus.
Pour ma part, je n'ai toujours pas tout compris :
pourquoi par exemple
BN5=A5+B5+E5+Q5=17 => respect de la condition < 21
BO5= AG5+AH5+AK5+AW5=9 => respect du critère > 8
alors que A5+B5+C5+D5 par exemple remplit également ces 2 conditions ?

A quoi correspond
-37 -36 -35 -34
-65 -64 -63 -49
-65 -64 -63 -49
-65 -64 -61 -49
et pourquoi les lignes 2 et 3 sont identiques ?

Puis en BS1 somme les solutions respectant les 2 conditions [BS1=somme(BQ5:BQ30)], garde en mémoire la solution maximum ainsi que toutes les solutions possibles qui ont données cette solution
Qu'entends-tu exactement ? Je te suggère de détailler le résultat obtenu sur une ligne en particulier.
En fait, il me semble qu'un exemple avec 2 tableaux de10 lignes sur 10 colonnes chacun suffit amplement à expliquer ta demande en la présentant de manière plus claire (mais ce n'est que mon avis...).
A+
 
Re : Programme glouton

re, salut JCGL

Il y aura erreur que si j'ai mis Option Explicit !

je précise que je ne suis pas un spécialiste du Visual Excel que j’ai abordé sur le tard et j'ai gardé mes anciennes pratiques qui date du QuickBasic 4.5 pour une histoire de rapidité. (peut-être plus valable avec visual !?)

pas facile non plus pour moi de m'étaler là dessus car j'ai maintenant qq problèmes de mémoire suite à un AVC il y a environ trois ans, j’ai beaucoup de mal à me concentrer, mais soit ...

j’ai toujours mis Defint A-Z en début de module pour cette histoire de rapidité et ainsi je sais que toutes mes variables numériques seront entières, ça me simplifie la vie dans la lecture de mon code. ceci pour mes variables déclaré Public !
bien entendu c'est selon les besoins, si c’est pour traiter une gestion finançière ce n’est pas valable.
mais si la majorité des vars qui seront utilisées dans le programme sont entières je le mets, surtout pour la plupart des boucles. (là aussi avec les boucles For A=X To Y ... Next seul sans le A)

par la suite si j'ai besoin de X variable différente de Integer exemple :
MaVar1! = 1.23456 sera bien reconnue comme Double
MaVar2$ = "bonjour" sera bien reconnue comme String
MaVar3& = 123456789 sera bien reconnue comme Long
avec Defint A-Z toutes autres variables sans signe est Integer

alors qu’avec Dim MaVar1 As Double, MaVar2 As String, MaVar3 As Long ...
dans la lecture du code il n’est pas toujours évident de se rappeler de quoi il s’agit
alors que si j’utilise MaVar1!, MaVar2$, MaVar3& c’est plus explicite non !?

mais je vais réviser un peu les sur les sites que tu m'as indiqué, merçi et au plaisir.
 
Dernière édition:
Re : Programme glouton

Bonjour à tous,

@David84:
BN5=A5+B5+E5+Q5=17 => respect de la condition < 21
BO5= AG5+AH5+AK5+AW5=9 => respect du critère > 8
J'ai sélectionné ce cas parce qu'il répondait a la valeur maximum de cas trouvé soit 14 cas sur les 28 lignes

A quoi correspond
-37 -36 -35 -34
-65 -64 -63 -49
-65 -64 -63 -49
-65 -64 -61 -49
Concernant ces données, elles correspondent aux combinaisons qui ont permis d'obtenir les 14 cas.
=> -65 -64 -61 -49 est une combinaison qui donne le résultat de 14 cas. Pour retrouver la combinaison, j'utilise la ligne 2 des tableaux comme référence c'est à dire en BN5 =A5+B5+E5+Q5 et en BO5 =AG5+AH5+AK5+AW5

alors que A5+B5+C5+D5 par exemple remplit également ces 2 conditions ?
OK cependant ce cas de figure ne permet d'obtenir que 8 cas sur 28

et pourquoi les lignes 2 et 3 sont identiques ?
C'est un bug dans mon programme, désolé.

Je reprends mon explication avec plus de précision et un fichier plus petit en esperant ne pas embrouiller encore plus
Je somme 2 à 2 toutes les cellules par lignes des tableaux A et B respectivement en colonne W et X et je regarde si les résultats obtenus respectent les critères, le critère du tableau A est < 21 et > 8 pour le tableau B

Combinatoire des cellules 2 à 2
Étape 1:
A) Résultat tableau A : W5 = A5+B5= 4+4 = 8
Résultat tableau B : X5 = L5+M5= 5+0 = 5
Critère en colonne Z: Ne respecte pas les conditions et(w5<21;X5>8)
Cette opération est à réalisée sur toutes les lignes 5 à 24
B) On compte le nombre de cas qui satisfasse les 2 conditions que l'on garde en mémoire ainsi que c'est le fait de l'addition de Ai+Bi
Étape 2:
A) Résultat somme tableau A : W5 A5+C5=4+2 = 6
Résultat somme tableau B : X5 L5+N5=5+2 = 7
Critère en colonne Z: Ne respecte pas les conditions et(w5<21;X5>8)
Cette opération est à réaliser sur toutes les lignes 5 à 24
B) On compte le nombre de cas qui satisfasse les conditions que l'on garde en mémoire si > a la valeur du test précédent ainsi que c'est le fait de l'addition de Ai+Ci dans le cas
Etape i:
On réalise ainsi toute la combinatoire jusqu'a W5=I5+J5= 8+2 =10 et X5= T5+U5=1+1=2

Maintenant Combinatoire des cellules 3 par 3
Étape 1:
A) Résultat tableau A : W5 = A5+B5 +C5 = 4+4 +2= 10
Résultat tableau B : X5 = L5+M5+N5= 5+0 +4=9
Critère en colonne Z: respecte les conditions et(w5<21;X5>8)
Cette opération est à réalisée sur toutes les lignes 5 à 24
B) On compte le nombre de cas qui satisfasse les 2 conditions que l'on garde en mémoire ainsi que c'est le fait de l'addition de Ai+Bi+Ci
Etape i:
On réalise ainsi toute la combinatoire jusqu'a W5=H5+I5+J5= 1+8+2 =11 et X5= S5+T5+U5=0+1+1=2

Je réalise ainsi toutes les combinatoires possibles

Fin du programme, on affiche la combinaison qui a permis d'obtenir le résultat max ainsi que la valeur obtenue

Cordialemnt
 

Pièces jointes

Re : Programme glouton

Re
Bon, cela vient sûrement de moi mais je préfère personnellement quelques données explicites avec les résultats inscrits manuellement et quelques explications claires qu'une explication uniquement textuelle.
Parmi tes explications il y a des points que je comprends (enfin je crois) et d'autres qui peuvent s'interpréter de différentes manières, et au final je ne suis pas plus avancé.
Pourrais-tu détailler les étapes de traitement sur disons les 2 ou 3 1ère lignes en notant manuellement chaque résultat attendu (quitte à réduire encore le nombre de colonnes par ligne afin de gagner en clarté) ?
Dans ton exemple, les colonnes W et Z comportent la somme des 2 1ères cellules de chaque ligne de chaque tableau, qu'ils répondent ou non à la condition <21 pour le tableau A et >8 pour le tableau B : est-ce cela ?
Critère en colonne Z: Ne respecte pas les conditions et(w5<21;X5>8)
Cette opération est à réalisée sur toutes les lignes 5 à 24
marque le résultat attendu
B) On compte le nombre de cas qui satisfasse les 2 conditions que l'on garde en mémoire ainsi que c'est le fait de l'addition de Ai+Bi
donne le résultat attendu pour chaque ligne en expliquant simplement pourquoi ce résultat : je comprendrai peut-être mieux ce que tu attends.
Etape i:
On réalise ainsi toute la combinatoire jusqu'a W5=I5+J5= 8+2 =10 et X5= T5+U5=1+1=2
Idem : note manuellement chaque résultat attendu.
Si la démarche est la même pour une combinaison de 2 cellules ou de 3 cellules, pas la peine de détailler les 2 cas.
Si, suite à ta réponse, je vois que je ne comprends toujours pas ton attente, c'est que ce type de demande n'est pas pour moi et je passerai mon chemin.
En espérant que d'autres puissent te venir en aide.
A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
714
Réponses
1
Affichages
723
Retour