Se connecter avec
S'enregistrer | Connectez-vous
Votre question

Algorithme VBA avec boucles if/for

Dernière réponse : dans Programmation
Partagez
8 Janvier 2013 18:08:02

Bonsoir,
je cherche à réaliser une macro permettant de me calculer un delai J+ entre une livraison et un plan de transport.
Un magasin étant livré à jour Fixe , je souhaite calculer pour Lundi Mardi.. vendredi le délai en J+.

Chaque magasin possède des livraisons fixes avec un jour de départ et d'arrivé.

Exemple :

Agen est livré le Mardi si la marchandise part avant 9h le Lundi
Donc si on calcul le délai pour chaque jour on obtient:

Lundi : J+1
Mardi : J+7
Mercredi : J+6
Jeudi J+5
Vendredi J+4


J'ai essayé d'adapter ce plan de transport pour faciliter la réalisation de macro.

Il est donc construit de la manière suivante:


Magasins / Jours d'arrivé entrepot / Jour d'arrivé magasin / Date limite
Agen / 1 2 3 / 2 3 4 / 08:00h
Bordeaux / 2 5 / 3 1 / 09:00h


J'ai donc essayé de réaliser une macro ... mais à mon avis mon algorithme n'est pas assez performant et l'imbrication succésives des boucles if dans les for .


Ci-joint le code :

  1. Sub MACRO()
  2.  
  3. 'Définition des variables
  4.  
  5. Dim i As Integer
  6. Dim n As Integer
  7. Dim m As Integer
  8. Dim Jour_Livraison As Integer
  9. Dim Jour_Test As Integer
  10. Dim Jour_Arriv As Integer
  11. Dim Delta As Integer
  12.  
  13.  
  14. Dim Heure_limite As Date
  15. Dim Heure_Livraison As Date
  16.  
  17. 'Initialisation des variables
  18.  
  19. For i = 1 To 5
  20. For m = 6 To 9
  21. For n = 2 To 6
  22.  
  23. Heure_Livraison = Cells(3, 8)
  24. Heure_limite = Cells(m, 8)
  25. Jour_Livraison = Cells(m, n)
  26. Jour_Test = i
  27. Jour_Arriv = Cells(m, n + 7)
  28.  
  29.  
  30.  
  31.  
  32. If (Heure_Livraison < Heure_limite) Then
  33.  
  34. If (Jour_Test <= Jour_Livraison) Then
  35.  
  36. Delta = Jour_Arriv - Jour_Test
  37. If Delta < 0 Then
  38. Delta = Delta + 7
  39. Cells(m, 14 + n) = Delta
  40. Else
  41. Cells(m, 14 + n) = Delta
  42. End If
  43.  
  44. ElseIf (Jour_Test > Jour_Livraison And IsEmpty(Cells(m, n + 1))) Then
  45.  
  46. Delta = Jour_Arriv - Jour_Test
  47. If Delta < 0 Then
  48. Delta = Delta + 7
  49. Cells(m, 14 + n) = Delta
  50. Else
  51. Cells(m, 14 + n) = Delta
  52. End If
  53.  
  54.  
  55. End If
  56. End If
  57.  
  58. Next
  59.  
  60. Next
  61.  
  62. Next
  63.  
  64. End Sub


Je suppose que sans le fichier de base cela n'est pas évident , comment puis je faire pour l'attacher au sujet?


Voila je recherche donc des astuces au niveau de l'algorithme pour réaliser ce calcul qui parait assez simple mais dont je ne me sors pas :( .

Merci d'avance , si vous avez des questions n hesitez pas !

Autres pages sur : algorithme vba boucles for

10 Janvier 2013 14:53:53

Salut,

Non, tu ne fourniras pas de fichier de base.
Pas d'échange de fichiers plein de macro => pas de macro-virus => confiance entre nous !

Les boucles For, ça existent, mais pas les boucles If.
En revanche pour If, on parle de tests, voire de structures conditionnelles ( :sarcastic:  ).

Bon, je regarde pour problème...
m
0
l
10 Janvier 2013 15:21:16

Citation :
Agen est livré le Mardi si la marchandise part avant 9h le Lundi

Mais Agen n'est toujours livré que le Mardi.
Donc si la livraison part le Lundi après 9h, ce sera pour le Mardi d'après.
C'est ça ?
m
0
l