Function qui renvoit un vecteur, Aidez moi ! Thx

Patoche99 Messages postés 5 Date d'inscription mercredi 2 février 2005 Statut Membre Dernière intervention 26 avril 2005 - 4 févr. 2005 à 11:14
mrdep1978 Messages postés 402 Date d'inscription jeudi 25 novembre 2004 Statut Membre Derniè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

<HR>
d1 Camions 1, 2, 3, 4d2 Camions 2, 3d3 Camions 1, 2, 4

<HR>
Je devrais pouvoir comparer les couts de plusieur solutions comme par exemple

<HR>
Pour
d= 1 je chosis le camion le moin chère dans 1, 2, 3, 4
Ensuite pour
d= 2 je choisis un camion entre 2, 3
et ainsi de suite

<HR>

Merci beaucoup pour votre aide et n'hésiter pas a me poser une question si ce n'est pas très claire.
+

3 réponses

cs_the_best Messages postés 212 Date d'inscription jeudi 13 novembre 2003 Statut Membre Dernière intervention 6 avril 2006
4 févr. 2005 à 13:13
En fait c'est pas claire. Tu peut mieux expliquer ?

The Best

Glu !!! [VIVE LINUX. Saviez vous qu'il existe Gambas pour remplacer Vb sous linux ? ]
0
Patoche99 Messages postés 5 Date d'inscription mercredi 2 février 2005 Statut Membre Dernière intervention 26 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.

Par exemple, si j'ai

camion_possible_par_demande (1)= 1 , 5
camion_possible_par_demande (2)= 1, 5
camion_possible_par_demande (3)= 2, 4, 5.

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.

Je espère que c'est plus claire

Merci,

+++
0
mrdep1978 Messages postés 402 Date d'inscription jeudi 25 novembre 2004 Statut Membre Dernière intervention 7 juin 2009 7
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


End Sub

End Sub
0