probleme sujet programation excel........help

probleme sujet programation excel........help - VB/VBA/VBS - Programmation

Marsh Posté le 15-12-2002 à 15:29:30    

Salut une copine a un probleme pour son devoir d'informatque qu'elle doit rendre la semaine prochaine et je n'ai pas reussi a l'aider, je ne connais pas le vba !
voici l'enoncé :
 
On dispose des données suivantes :
 
· Une liste des fournisseurs avec :
· Le numéro (code)
· Le nom
· L?adresse
· Le minimum de facturation
· Un tableau de 5 niveaux de coût de port par rapport au montant de la facture
 
· Une liste de produits avec :
· Un code produit
· Un libellé
· Une quantité à commander
· Pour 10 fournisseurs possibles par produit :
· Le numéro du fournisseur
· Le code produit pour le fournisseur
· Le prix unitaire
 
 
Le nombre maximum d?éléments dans chacune des deux listes est de 100.
 
Il faut déterminer quelle est la meilleure solution de commande(au moindre coût), et mettre en page les bons de commande.
 
A noter qu?il n?est pas question de couper la commande d?un produit et que l?on acceptera une méthode d?optimisation par étape, sans retour en arrière sur les étapes.
 
La projet consiste donc à :
· La définition précise de la feuille fournisseur
· La définition précise de la feuille produits à commander
· La définition précise de la mise en forme des bons de commande
· La définition et la réalisation des algorithmes demandés
 
 
 
-> on a fait les feuilles demandées, on arrive a avoir la liste des fournisseurs qui possèdent le produit d'une commande donnée.
Problème : on ne sait pas comment générer l'ensemble des possibilités de commande, pour une commande donnée plusieurs fournisseurs peuvent avoir le produit et en plus les frais de port sont variables selon la quantitee demandée pour chaque fournisseur, ce qui fait que le probleme n'est pas lineaire..
on galere..help please
comment coder en vba l'ensemble de possibilités ?

Reply

Marsh Posté le 15-12-2002 à 15:29:30   

Reply

Marsh Posté le 15-12-2002 à 15:51:08    

:pt1cable:  
mdr!

Reply

Marsh Posté le 15-12-2002 à 16:26:11    

sinon ds excel t'as un gestionnaire de scenario, utilise plutot ca, mais c pas evident !

Reply

Marsh Posté le 15-12-2002 à 16:46:03    

ah bon c'est quoi ce truc tu peux m'en dire un peu plus ?

Reply

Marsh Posté le 15-12-2002 à 18:54:03    

bah deja le probleme c ke c pas du vba, mais c un truc du genre tu lui met kel variable il peut modifier, tu lui met kel valeur (avec un calcul bien ) il doit atteindre et des contraintes, et il trouve tout seul.
parfois ca va, mais pour ton probleme ca peut etre long a faire (peut etre meme plus long k'en vba).
 
mais avant de passer en vba faudrai plutot faire un algo, ou une trace d'execution pour voir comment ca doit de derouler.
en gros fille plus de detail k'on voit ce k'on peut faire !

Reply

Marsh Posté le 15-12-2002 à 23:00:05    

ok
le probleme est le suivant:
on a reussi a avoir des lignes du tableau excel avec la liste des fournisseurs pouvant fournir au moins un des produits de la commande.
 
apres il faudrait generer l'ensemble des possiblites de commandes avec le prix correspondant sachant que pour un fournisseur donné il y a des palliers de prix de port suivant le montant de la commande faite chez eux
 
par exemple si on commande 3 prosuits a b c
 
on a :
fournisseur 1 : produit a  
fournisseur 1 : produit b
fournisseur 2 : produit b
fournisseur 2 : produit c  
fournisseur 3 : produit c  
fournisseur 4 : produit a  
fournisseur 5 : produit a  
fournisseur 5 : produit c  
 
les fournisseurs ont des prix de port differents suivant le montant total de la commande faite chez eux et en plus les produits ont des prix differents chez les fournisseurs
on ne peut pas commander une partie d'un prioduit chez des fournisseurs differents, un produit est obligatoirement commandé chez un meme fournisseur...
 
il faudrait generer l'ensemble des commandes possibles et calculer le prix correspondant et ensuite garder la combinaison de commande la moins chere
 
par exemple on peut faire la commande par  
fournisseur 1 produit a
fournisseur 1 produit b
fournisseur 5 produit c
 
pour le fournisseur on atteint un prix de port donné et pour le fournisseur 5 un autre prix de port, ce qui donne ensuite un prix total = montant des commandes + prix de port  
 

Reply

Marsh Posté le 16-12-2002 à 19:12:04    

:pt1cable:  
G trouvé un début de solution.
Il fo que j'arrive à compter le nombre de lignes que g généré ds mon tableau calculs pr pouvoir ensuite créer ttes mes combinaisons.
Le pb c que je n'arrive po à compter les lignes que g créé...
Pfff...

Reply

Marsh Posté le 16-12-2002 à 19:28:49    

mets ton algorithme  de ce que tu voudrai faire et ton code pour que nous puissions t'aider

Reply

Marsh Posté le 16-12-2002 à 19:44:18    

'calcul du nombre de possibilités
Si la ligne est différnete de la ligne suivante alors
 

Reply

Marsh Posté le 16-12-2002 à 19:45:42    

Pfff...
Si la ligne est différente de la ligne suivante alors
    Si la ligne est différente de la ligne suivante alors
        ...
 
Auant de fois qu'il y a d'articles dans ma commande...

Reply

Marsh Posté le 16-12-2002 à 19:45:42   

Reply

Marsh Posté le 16-12-2002 à 20:08:31    

tu devrais expliquer davantage,mettre des exemples
comment as tu disposé tes feuilles ?
les categories de frais de port sont elles toutes les meme ?
...

Reply

Marsh Posté le 16-12-2002 à 20:16:08    

oui et mets ton code !

Reply

Marsh Posté le 16-12-2002 à 21:37:12    

Kel code?
Mes feuilles: produit, fournisseur, commande, calculs, résultats
produits/fournisseur: ts les renseignements relatifs aux produits/fournisseurs
commande: feuille sur laquelle je rentre les codes produits et les quantités voulues
Calculs: feuille sur laqeulle je répértorie ts les couples produits-fournisseurs
résultats: toutes les combinaisons possibles (ex: articleA-fournisseur1+articleB-fournisseur2 ou articleA-fournisseur2+ articleB-fournisseur2)

Reply

Marsh Posté le 16-12-2002 à 21:40:12    

Nan, les frais de port st différents pr chaque fournisseur. Ils peuvent être de 5 niveaux différents maxi...
Ds ma feuille fournisseur, pr chaque fournisseur (sur chaque ligne), g un mini de cde et 4 bornes pr créer les 5 niveaux...

Reply

Marsh Posté le 16-12-2002 à 22:18:35    

quand je parle du code c'est le programme que tu as ecris, mets le qu'on le voit !

Reply

Marsh Posté le 16-12-2002 à 22:22:44    

pour compter tes lignes il suffit de mettre un compteur non?  :ouch:  
tu as fais le plus dur on dirait

Reply

Marsh Posté le 17-12-2002 à 10:27:07    

Sub analyse_du_meilleur_achat()
 
'effacer la feuille calcul
 
 
'création de toutes les possibilités
 
ligneco = 1
ligneca = 1
lignef = 1
 
Do
 
ligne = 1
 
ligneco = ligneco + 1 'ligne de commande
 
    Do
    ligne = ligne + 1   'ligne de produit
        'si le code produit de la commande est égal au code produit de la feuille produit
        If Sheets("commande" ).Cells(ligneco, 1).Value = Sheets("produit" ).Cells(ligne, 1).Value Then
            ligneca = ligneca + 1 ' ligne de calcul
            lignef = lignef + 1 'ligne fournisseur
            'récupérer le numero du fournisseur
            Sheets("calculs" ).Cells(ligneca, 3).Value = Sheets("produit" ).Cells(ligne, 3).Value
            'récupérer le code de l'article
            Sheets("calculs" ).Cells(ligneca, 1).Value = Sheets("produit" ).Cells(ligne, 1).Value
            'récupérer la quantite voulue de l'article
            Sheets("calculs" ).Cells(ligneca, 7).Value = Sheets("commande" ).Cells(ligneco, 2).Value
            'récupérer le code produit fournisseur
            Sheets("calculs" ).Cells(ligneca, 4).Value = Sheets("produit" ).Cells(ligne, 4).Value
            'récupérer le prix unitaire
            Sheets("calculs" ).Cells(ligneca, 6).Value = Sheets("produit" ).Cells(ligne, 5).Value
            'récupérer le nom du fournisseur
'                If Sheets("calculs" ).Cells(ligneca, 1).Value = Sheets("fournisseur" ).Cells(lignef, 1).Value Then
'                    lignef = lignef + 1    'ligne fournisseur
'                    Sheets("calculs" ).Cells(ligneca, 5).Value = Sheets("fournisseur" ).Cells(lignef, 2).Value
            'récupérer le mini de facturation
             
            'récupérer le coût de port
             
         End If
    Loop Until IsEmpty(Sheets("produit" ).Cells(ligne, 1))
Loop Until IsEmpty(Sheets("commande" ).Cells(ligneco, 1))
 
 
ligneca = 1     'ligne résultats 1
compteur = 0    'compteur
n = 0           'compteur
 
'compter le nombre de solutions: nombre d'artciles*nombre de fournisseur/artcile
    'nombre d'articles
    ligneca = ligneca + 1
    Do
        If Sheets("calculs" ).Cells(ligneca, 1).Value = Sheets("calculs" ).Cells(ligneca + 1, 1).Value Then
        compteur = compteur + 1
        n = n + 1
        End If
    Loop Until Sheets("calculs" ).Cells(ligneca, 1).Value <> Sheets("calculs" ).Cells(ligneca + n, 1).Value
   
 
'conserver le résultat pour lequel le total de la commande est minimum
 
 
End Sub
 
Bein, g réussi à compter mes lignes ms après, je ne c pas comment faire pr connaître le nombre de combinaisons possibles...

Reply

Marsh Posté le 17-12-2002 à 10:48:00    

Pour avoir le nombre de combinaisons je pense qu'il faut multiplier a chaque fois le nombre de fournisseurs possibles pour un produit  
 
par exemple si  
produit A ->3fournisseurs
produit B ->2fournisseurs
produit C ->3fournisseurs
 
le nombre de combinaisons est 3*2*3=18
 

Reply

Marsh Posté le 17-12-2002 à 16:10:24    

en fait si j'ai bien compris tu as reussi a avoir des lignes avec toutes les possibilites de commandes selon les fournisseurs.
Il ne te reste plus qu'a completer cette ligne avec les couts, pour ce la il faut faire des couts intermediaires par fournisseur pour calculer les ports, et ensuite les couts globaux de chaque commande.
Puis tu cherche le montant mini et tu recuperes la ligne correspondante  :bounce:

Reply

Marsh Posté le 17-12-2002 à 17:56:20    

Bein, g les lignes de chaque couple "article-fournisseur"
Ms mnt, je dois tt regrouper pr avoir les combinaisons pr ma liste de produits en comande.  :p  
T collègues ont pas eu le tps de regarder?

Reply

Marsh Posté le 17-12-2002 à 18:07:08    

pierre_paris a écrit :

Salut une copine a un probleme pour son devoir d'informatque qu'elle doit rendre la semaine prochaine et je n'ai pas reussi a l'aider, je ne connais pas le vba !
voici l'enoncé :
 
On dispose des données suivantes :
 
· Une liste des fournisseurs avec :
· Le numéro (code)
· Le nom
· L?adresse
· Le minimum de facturation
· Un tableau de 5 niveaux de coût de port par rapport au montant de la facture
 
· Une liste de produits avec :
· Un code produit
· Un libellé
· Une quantité à commander
· Pour 10 fournisseurs possibles par produit :
· Le numéro du fournisseur
· Le code produit pour le fournisseur
· Le prix unitaire
 
 
Le nombre maximum d?éléments dans chacune des deux listes est de 100.
 
Il faut déterminer quelle est la meilleure solution de commande(au moindre coût), et mettre en page les bons de commande.
 
A noter qu?il n?est pas question de couper la commande d?un produit et que l?on acceptera une méthode d?optimisation par étape, sans retour en arrière sur les étapes.
 
La projet consiste donc à :
· La définition précise de la feuille fournisseur
· La définition précise de la feuille produits à commander
· La définition précise de la mise en forme des bons de commande
· La définition et la réalisation des algorithmes demandés
 
 
 
-> on a fait les feuilles demandées, on arrive a avoir la liste des fournisseurs qui possèdent le produit d'une commande donnée.
Problème : on ne sait pas comment générer l'ensemble des possibilités de commande, pour une commande donnée plusieurs fournisseurs peuvent avoir le produit et en plus les frais de port sont variables selon la quantitee demandée pour chaque fournisseur, ce qui fait que le probleme n'est pas lineaire..
on galere..help please
comment coder en vba l'ensemble de possibilités ?

j'ai fait un fichier excel trop compliqué a expliquer si ça t'interesse je peux  te l'envoyer par mail demain
tu n'as qu'a me donner ton adresse par MP

Reply

Marsh Posté le 17-12-2002 à 20:58:27    

nur a écrit :

j'ai fait un fichier excel trop compliqué a expliquer si ça t'interesse je peux  te l'envoyer par mail demain
tu n'as qu'a me donner ton adresse par MP


cool !
envoie le a : charlotte_bonamour@hotmail.com et pierremiquel@hotmail.com

Reply

Marsh Posté le 17-12-2002 à 22:38:20    

COOL!
Merci bcp!
 :D

Reply

Marsh Posté le 18-12-2002 à 11:26:29    

pierre_paris a écrit :


cool !
envoie le a : charlotte_bonamour@hotmail.com et pierremiquel@hotmail.com

c'est envoyé

Reply

Marsh Posté le 18-12-2002 à 14:14:15    

t'as assuré grave !
tu l'as pas fait expres pour nous quand meme ?
je viens de jeter un coup d'oeil rapide car je suis au boulot la mais ca a l'air d'etre exactement ca, à part que les seuils de frais de port sont en pourcentage et pas en prix fixe, merci encore.
 :bounce:

Reply

Marsh Posté le 18-12-2002 à 14:31:38    

en fait apres avoir regardé de plus pres, il y a une difference quand meme par rapport a notre enonce :
toi tu cherches le prix de port mini par produit commandé, alors que nous, c'est le port mini par commande globale, c'est à dire que tu ne fait pas toutes les combinaisons de commandes avec les prix globaux correspondant.
 :??:

Reply

Marsh Posté le 18-12-2002 à 15:29:22    

en fait il manque cette partie du programme :
 
on a une commande de differents produits A B C D et des fournisseurs qui possedent 1 ou plusieurs de ces produits
 
par exemple :
 
fournisseur 1 produit A,B
fournisseur 2 produit B
fournisseur 3 produit B,C,D
fournisseur 4 produit A,B,C
fournisseur 5 produit A,C
 
on voudrait faire toutes les combinaisons de commandes possibles pour les produits A,B,C,D
 
Par exemple la commande peut etre faite comme ca :
 
fournisseur 1 produit A - fournisseur 3 produit B,C,D
 
il faudrait pouvoir faire toutes les combinaisons ( et apres calculer les prix des commandes correspondantes car les prix des produits sont differents selon les fourniseurs..mais ca c'est une autre histoire)
 
faites passer ce message a des gens qui connaissent le vba, please, c'est super urgent, une copine doit rendre son projet demain soir !
 :na:

Reply

Marsh Posté le 18-12-2002 à 18:54:25    

bon admettons que ds feuil1 tu as:
en A2 >"F1" A3>"F2" ... A6>"F2"
en B1>produitA  C1> produitB .... E1 >produitD
ds ce tableau tu as des "x" pour montrer quel produit possede tel fournisseur
(le resultat des combinaisons ds la colonne G)
 
 
voici le code:
 
sub test()
dim pa(),pb(),pc(),pd()
dim nb(3)
sheets("feuil1" ).select
for j=0 to 3
for i=0 to 4
if range("B2" ).offset(i,j)="x" then
nb(j)=nb(j)+1
endif
next
next
redim pa(nb(0)-1)
redim pb(nb(1)-1)
redim pc(nb(2)-1)
redim pd(nb(3)-1)
c=0
for i=0 to 4
if range("b2" ).offset(i)="x" then
pa(c)=range("a2" ).offset(i)
c=c+1
endif
next
 
c=0
for i=0 to 4
if range("b2" ).offset(i,1)="x" then
pb(c)=range("a2" ).offset(i)
c=c+1
endif
next
 
c=0
for i=0 to 4
if range("b2" ).offset(i,2)="x" then
pc(c)=range("a2" ).offset(i)
c=c+1
endif
next
 
c=0
for i=0 to 4
if range("b2" ).offset(i,3)="x" then
pd(c)=range("a2" ).offset(i)
c=c+1
endif
next
 
debut=0
for i=0 to ubound(pa)
for j=0 to ubound(pb)
for k=0 to ubound(pc)
for l=0 to ubound(pd)
temp=pa(i) & "  " & pb(j) & "  " & pc(k) & "  " pd(l)
sheets("feuil1" ).range("G1" ).offset(debut)=temp
debut=debut +1
next
next
next
next
 
end sub
 
 
 
 
 
(j'ai tapé a la main )

Reply

Marsh Posté le 19-12-2002 à 10:53:51    

merci beaucoup mais on a rien compris  :ouch:  :ange:

Reply

Marsh Posté le 19-12-2002 à 10:57:57    

moi j'avais pensé faire un truc comme ca :
 
creer une fonction recursive combi(x) que tu vas appliquer sur ta
feuille
calculs triee par produits
tu appelles combi(premier produit ici VL01)
 
combi(x)
pour chaque ligne
       si la ligne contient le produit en parametre (x)
             copier la ligne dans la feuille combi dans un emplacement vide
                   si un produit suivant existe (dans la feuille
commande)
                   passer au produit suivant (feuille commande)
                   appeller la fonction combi(x=produit suivant)
             fin pour
       fin si
fin pour

Reply

Marsh Posté le 19-12-2002 à 11:35:36    

pierre_paris a écrit :

merci beaucoup mais on a rien compris  :ouch:  :ange:  

il faut tester sur une feuille (feuil1)

Reply

Marsh Posté le 19-12-2002 à 14:14:24    

la ligne  
temp = pa(i) & "  " & pb(j) & "  " & pc(k) & "  " pd(l)
ne passe pas a la compilation, je ne sais pas pourquoi, je pense que tu veut mettre dans la variable temp les resultats concatenes issus des tableaux pa pb pc pd mais ca ne marche pas, meme en declarant aussi temp en dim enfin bon je comprends pas.
desole je ne connais vraiùment rien a vba..

Reply

Marsh Posté le 19-12-2002 à 14:47:13    

Oué, bein ça presse là et je suis tjs autant ds la merde!
HELP!!!
 :cry:

Reply

Marsh Posté le 19-12-2002 à 14:51:32    

cherche un peu charlotte !
si il t'as filé ce projet c'est que tu dois pouvoir le faire !
je regarde la la combinaison que tu dois faire ca erssemble a un arbre binaire vous avez vu ca en cours ?
 :bounce:  :non:

Reply

Marsh Posté le 19-12-2002 à 15:36:56    

pierre_paris a écrit :

la ligne  
temp = pa(i) & "  " & pb(j) & "  " & pc(k) & "  " pd(l)
ne passe pas a la compilation, je ne sais pas pourquoi, je pense que tu veut mettre dans la variable temp les resultats concatenes issus des tableaux pa pb pc pd mais ca ne marche pas, meme en declarant aussi temp en dim enfin bon je comprends pas.
desole je ne connais vraiùment rien a vba..


j'avais oublié un "&":
 
 
 
temp=pa(i) &  "  "  &  pb(j) &  "  "  &  pc(k) & "  " & pd(l)
tes explications sont correctes

Reply

Marsh Posté le 19-12-2002 à 16:55:36    

ah ben oui effectivement ca marche comme ca !
merci :hello:  
ca y est charlotte tu as ta combinaison, t'as plus qu'a continuer...

Reply

Marsh Posté le 20-12-2002 à 10:44:20    

Utilise le solveur. C'est peut être l'outil adapté pour ton problème (et non pas le gestionnaire de scénarios);
 
C'est le même outil que "valeur cible" sauf que valeur cible est approprié pour une donnée, solveur pour de nombreuses.
 
L'utilisation du solveur est "simple": il faut ajouter des contraintes (qui sont comme des règles de gestion mathématiques, par exemple quel telle cellule doit être plus grande que 5, etc...), puis il te donnera le résultat immédiatement que tu pourras sauvegarder ainsi.
 
Soit on peut utiliser des fonctions telles que RECHERCHEH (ou RECHERCHEV) qui t'évite de passer à du code VBA.
 
Voilà quelques pistes...


---------------
L'imagination est plus importante que le savoir. Albert Einstein
Reply

Marsh Posté le 20-12-2002 à 10:49:37    

Pr recherchev, je l'ai pas mal utiliser ms le solveur... Je sé pas faire du tt...

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed