Algorithme : toutes les combinaisons possibles dans un tableau de 2 par 7

Signaler
Messages postés
165
Date d'inscription
mercredi 2 janvier 2019
Statut
Membre
Dernière intervention
28 mars 2021
-
Messages postés
9707
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
16 avril 2021
-


Bonjour à tous; avant de me lancer dans la programmation de ma macro excel j'ai voulu me faire l'algorithme du code car je voyais pas comment le faire mais je tourne en rond...

J'essaye de tester toutes les combinaisons possibles enfin de trouver celle qui s'approche le plus de ma valeur cible, mais j'ai je ne vois pas comment faire.

Voici mon problème :
Vous avez un tableau comme sur l'image.
Ma valeur cible est 180 (mais la valeur cible peut changer)
En sommant qu'une valeur sur chaque colonne (que ce soit sur la ligne 28 ou la ligne 29) et en ajoutant 179.667 (valeur qui est modifiable) nous devons arriver le plus proche possible de 180.

Ne voyant mais de formule mathématique pour résoudre mon problème, j'ai décidé de tester toutes les solutions possibles.

Voici le début de l'algorithme que j'ai fait mais il n'est pas très concluant ....


Sub trouverCible()
'valeurCible
'valInter
'valTrouver
'valTrouverAnc = 100000
'valAjouter = 179.667
'Pour prend i = 28 à 29 (permet de dire les numéros de ligne à traiter dans excel)
'Pour j = 2 allant à 8 (permet de dire les numéros de colonne à traiter dans excel)
'Pour k = 0 a 1
'i = i - k
'valInter = Cellls(i,j)
'valTrouver = valTrouver + valInter
'Fin Pour
'Fin Pour
'Si (valTrouverAnc +valAjouter ) - valCible>(valTrouver+valAjouter )- valCible
'valTrouverAnc=valTrouver
'Fin si
'Fin Pour
Fin


Je pensais utiliser du récursif pour résoudre mon problème mais je vois pas comment l’utiliser ...
Merci d'avance pour votre aide.
J'espère que j'aurais été claire.
Merci d'avance de votre aide.
Cordialement.

5 réponses

Messages postés
15193
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 avril 2021
832
bonjour,
en laissant la récursivité de coté, puisqu'elle ne t'inspire pas, je pense à ces approches:
1) comment ferais-tu à la main, comment t'organiserais-tu pour compter toutes les sommes et trouver la meilleure? tu peux ensuite programmer cela
2) tu dois calculer 128 sommes. tu pourrais donc faire une boucle avec un indice allant de 1 à 127, et, utiliser l'indice pour calculer pour chaque colonne, quelle ligne utiliser.
3) imbriquer sept boucles, ce qui t'inspirera peut-être ensuite une approche récursive
Messages postés
165
Date d'inscription
mercredi 2 janvier 2019
Statut
Membre
Dernière intervention
28 mars 2021

Bonjour,

Merci pour votre aide,
Si j'ai bien compris (et pas fait d'erreur) la version non récursive ressemblerais à ceci :



Fonction combinaison
var valeurCible
var valInter
var valTrouver
var valTrouverAnc = 100000
var valAAjouter = 179.667

Pour j = 7 à 1
Pour i = 2 à 1
valInter = Cells(i;j)
valTrouver = valTrouver + valInter
j = j - 1
Pour i = 2 à 1
valInter = Cells(i;j)
valTrouver = valTrouver + valInter
j = j - 1
Pour i = 2 à 1
valInter = Cells(i;j)
valTrouver = valTrouver + valInter
j = j - 1
Pour i = 2 à 1
valInter = Cells(i;j)
valTrouver = valTrouver + valInter
j = j - 1
Pour i = 2 à 1
valInter = Cells(i;j)
valTrouver = valTrouver + valInter
j = j - 1
Pour i = 2 à 1
valInter = Cells(i;j)
valTrouver = valTrouver + valInter
j = j - 1
Pour i = 2 à 1
valInter = Cells(i;j)
valTrouver = valTrouver + valInter
Si valTrouver + valAAjouter - valeurCible < valTrouverAnc + valAAjouter - valeurCible
valTrouverAnc = valTrouver
Fin Si
Fin Pour
Fin Pour
Fin Pour
Fin Pour
Fin Pour
Fin Pour
Fin Pour
Fin Pour
Fin




Merci d'avance de votre réponse.
Cordialement.
Messages postés
15193
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 avril 2021
832
à quoi sert la boucle en j?
je ne connais pas le psuodo-langage que tu utilises pour écrire l'algorithme, et je ne comprends pas ce qui se passe avec des boucles imbriquées utilisant la même variable comme indice de boucle.
je te conseille de commencer à écrire ton code VBA, et observer comment il se comporte.
Messages postés
165
Date d'inscription
mercredi 2 janvier 2019
Statut
Membre
Dernière intervention
28 mars 2021
>
Messages postés
15193
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 avril 2021

Bonsoir,
La boucle "j" a pour objectif de trouver la colonne du tableau (j au besoin du numéro de ligne et de colonne pour trouver ma valeur).
J ai commencé à écrire mon code VBA, mais mon algorithme ne fonctionnais pas donc je l'ai pas mal modifié mais il ne permet pas de trouver toutes les solutions....
Vous pouvez retrouver le code mon fichier au lien suivant :
https://mon-partage.fr/f/sEzSspcf/
Merci d avance de votre aide.
Cordialement.
Messages postés
15193
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 avril 2021
832 >
Messages postés
165
Date d'inscription
mercredi 2 janvier 2019
Statut
Membre
Dernière intervention
28 mars 2021

la variable j (drôle de nom) va servir à déterminer la colonne du tableau.
je ne vois toujours pas pourquoi faire une boucle avec la colonne en indice.
Messages postés
165
Date d'inscription
mercredi 2 janvier 2019
Statut
Membre
Dernière intervention
28 mars 2021

Bonjour,
Car pour trouver le contenue d'une cellule sous excel j'utilise une fonction qui à pour nom Cells, cette dernière à besoin du numéro de colonne et de ligne pour trouver la cellule.
Cordialement.
Messages postés
15193
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 avril 2021
832
j est donc utile, pas la boucle qui utilise j comme indice.
ton code ne ressemble pas du tout à ton algorithme.
n'hésite pas à suivre pas à pas ce que fait ton code, cela t'éclairera.
tu peux aussi afficher le comportement de ton code, cela t'aidera à comprendre.
Messages postés
165
Date d'inscription
mercredi 2 janvier 2019
Statut
Membre
Dernière intervention
28 mars 2021

Bin j’avais suivis le code de mon algorithme dans un premier temps me cela fonctionnais pas du tout, donc j'ai essayer autrement ...
J'avoue que la je suis complètement bloqué, je ne voit pas du tout comment faire.
Messages postés
15193
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 avril 2021
832
repars de ton algorithme, en y supprimant la variable j.
Messages postés
15193
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 avril 2021
832 >
Messages postés
15193
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 avril 2021

@hamster18, peux-tu donner suite, ou marquer comme résolu?
Messages postés
9707
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
16 avril 2021
2 082
Bonjour à tous les deux

Au cas où ...
https://mon-partage.fr/f/RjLbcL2u/

Cdlmnt
Messages postés
9707
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
16 avril 2021
2 082
Celui là est plus souple

https://mon-partage.fr/f/syidvJoo/

Cdlmnt