probleme sujet programation excel........help - VB/VBA/VBS - Programmation
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 !
Marsh Posté le 15-12-2002 à 16:46:03
ah bon c'est quoi ce truc tu peux m'en dire un peu plus ?
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 !
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
Marsh Posté le 16-12-2002 à 19:12:04
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...
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
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
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...
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 ?
...
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)
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...
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 !
Marsh Posté le 16-12-2002 à 22:22:44
pour compter tes lignes il suffit de mettre un compteur non?
tu as fais le plus dur on dirait
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...
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
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
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.
T collègues ont pas eu le tps de regarder?
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 ! |
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
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 |
cool !
envoie le a : charlotte_bonamour@hotmail.com et pierremiquel@hotmail.com
Marsh Posté le 18-12-2002 à 11:26:29
pierre_paris a écrit : |
c'est envoyé
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.
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.
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 !
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 )
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
Marsh Posté le 19-12-2002 à 11:35:36
ReplyMarsh 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..
Marsh Posté le 19-12-2002 à 14:47:13
Oué, bein ça presse là et je suis tjs autant ds la merde!
HELP!!!
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 ?
Marsh Posté le 19-12-2002 à 15:36:56
pierre_paris a écrit : la ligne |
j'avais oublié un "&":
temp=pa(i) & " " & pb(j) & " " & pc(k) & " " & pd(l)
tes explications sont correctes
Marsh Posté le 19-12-2002 à 16:55:36
ah ben oui effectivement ca marche comme ca !
merci
ca y est charlotte tu as ta combinaison, t'as plus qu'a continuer...
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...
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...
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 ?