Patoche99
Messages postés5Date d'inscriptionmercredi 2 février 2005StatutMembreDernière intervention26 avril 2005
-
4 févr. 2005 à 11:14
mrdep1978
Messages postés402Date d'inscriptionjeudi 25 novembre 2004StatutMembreDernière intervention 7 juin 2009
-
4 févr. 2005 à 17:35
Bonjour, me voici à mon 5 eme jour de vba...et voici ma deucième question sur le forum...
Voici mon problème:
J'ai une fonction qui pour une demande me renvoit un vecteur comprenant les camions que l'on peut utiliser pour transporter cette demande. Il faut savoir qu'en fonction de la demande, le nombre de camions peut varier.
<HR>
Function camion_possible_par_demande (demande as integer) As integer ()
<HR>
J'aimerais dans mon programme principal calculer pour chaque demande ce vecteur de camion possible afin de pouvoir le réutiliser dans la suite. J'ai donc écrit ceci:
<HR>
Dim Camion () As integer
...
...
for d= 1 to dem
camion = camion_possible_par_demande (d)
Next
<HR>
En fait, je ne vois pas comment je pourait utiliser les resultats de cette fonction dans le reste de mon programme.
Par exemple, si j'écrit:
<HR>
for d= 1 to dem
camion = camion_possible_par_demande (d)
Worksheets ("sheet3").cells(1,1) =camion (1)
Worksheets ("sheet3").cells(1,2) =camion (2)
Next
<HR>
Il me renvoit le numéro des 2 premier camions que je pourrais utiliser pour la demande 1 (si itération 1. Par contre, pour ce qui suit il ne garde pas les info en mémoire.
<HR>
for d= 1 to dem
camion = camion_possible_par_demande (d)
Next
Worksheets ("sheet3").cells(1,1) =camion (1)
Worksheets ("sheet3").cells(1,2) =camion (2)
<HR>
Mais le truc c'est que j'ai besoin de faire des calculs sur toute les demande en même temps mais je n'arrive pas a les stocker dans une variable ou je ne sais quoi. Par exemple, je devrais pouvoir faire:
Si j'ai un vecteur 3 demande avec les camions possibles
Patoche99
Messages postés5Date d'inscriptionmercredi 2 février 2005StatutMembreDernière intervention26 avril 2005 4 févr. 2005 à 14:21
Ok...
Bon, je vais reprendre au début... ce sera plus clair.. enfin, je l'espère. Donc, en gros je dois faire un travail dans le cadre de mon mémoire de fin d'étude. Le but de ce travail est de trouver des routes optimales en fonction des regroupements de camions que je pourais faire. La résolution se ferait grace a une Heuristique.
Je suis arriver suite à ce point pour l'instant:
Dans une feuille excel, j'ai en ligne mes demandes et en colonne les camions comme ceci. 1 signifie que je pourais affecter la demande a la route. Dans ce ca, j'ai donc que je pourais mettre la demande 1 dans le camion 1 et 5. et ainsi de suite pour les 3 demandes.
1 0 0 0 1
1 0 0 0 1
0 1 0 1 1
Chaque route a un prix et dépend de la quantité transportée.
Pour résoudre cela, j'ai trouvé une fonction qui pour chaque demande me donne les camions dans lesquelles je pourais mettre la demande.
Function camion_possible_par_demande (demande as integer) As integer ()
Pour exécuter la fonction, j'ai définit une variable "camion". La taille de Camion varie en fonction de la demande. Par exemple,
Dim Camion () As integer
camion = camion_possible_par_demande (1)
dans ce cas, la demande = 1 et la longueur du vecteur camion est de 2 car il y a 2 camions dans lesquels je pourais mettre la demande 1.
Le but de mon truc, c'est de tester différentes possibilités en fonction des prix.
Je voudais tester différente possibilité en fonction d'autres parametres.
Par exemple, si j'utilise le camion 1 pour la demande 1, 1 pour le camion 2 et 2 pour le camion 3. quest ce que ce me coute.
Autre possibilité, si j'utilise le camion 5 pour les trois demande est que c'est - chère.
Le problème que je ne sais pas quelle est la meilleure facon de calculer la variable camion afin qu'elle reste en mémoire et que je puisse l'utilier par la suite et donc faire varier mes camions et voire la variation de cout.
Pour l'instant donc, je fais dans ma procédure principale
for d= 1 to dem
camion = camion_possible_par_demande (d)
Next
Bien evidemement, il ne me met pas en mémoire la variable camion pour les différente demande.
mrdep1978
Messages postés402Date d'inscriptionjeudi 25 novembre 2004StatutMembreDernière intervention 7 juin 20097 4 févr. 2005 à 17:35
Si j'ai compris ce que tu veux faire, c'est mettre en variable le tableau
1 0 0 0 1
1 0 0 0 1
0 1 0 1 1
Le mieux, je pense, est de créer un Type et utliser un tableau de ce type :
Private Type TDemande
Camions() As Integer
End Type
Public Sub test()
Dim l_Demande() As TDemande
Dim i As Integer
Dim j As Integer
dim li_nbDem as Integer
'On considère qu'il y a 3 demandes
li_nbDem = 3
ReDim l_Demande(1 To li_nbDem)
For i = 1 To li_nbDem
'Définit pour chaque demande, la liste des camions possibles
l_Demande(i).Camions = Camion_Possible_Par_Demande(i)
Next i
'Parcourt les demandes possibles
For i = LBound(l_Demande) To UBound(l_Demande)
Worksheets("Feuil3").Cells(i + 1, 1).Value = "Demande " & i
'Parcourt les camions possibles pour chaque demande
For j = LBound(l_Demande(i).Camions) To UBound(l_Demande(i).Camions)
Worksheets("Feuil3").Cells(1, l_Demande(i).Camions(j) + 1).Value = "Camion " & l_Demande(i).Camions(j)
Worksheets("Feuil3").Cells(i + 1, l_Demande(i).Camions(j) + 1).Value = 1
Next j
Next i