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

VBA - Boucles imbriquées

Tags :
  • Programmation
Dernière réponse : dans Programmation
Partagez
2 Novembre 2012 15:12:24

Bonjour ,

Je souhaite réaliser une macro me permettant d'optimiser des livraisons.

Données entrés : Jour et horaire de livraison

Fonction : Evaluer à partir d'un tableau, quand la marchandise pourra être expédié.


Je teste donc si mon jour et heure d'arrivée permet une expédition le jour même ou sinon a j+1, +2 etc.


Voici le code que j'ai réalisé mais apparemment je dois avoir un problème dans mes boucles :( 


  1. Dim J_ch As Integer
  2. Dim H_ch As Integer
  3.  
  4. Dim J_Liv As Integer
  5.  
  6.  
  7. Dim n As Integer
  8. Dim m As Integer
  9. Dim Delta As Integer
  10.  
  11. J_ch = 1
  12.  
  13. For m = 5 To 70
  14.  
  15. For n = 4 To 8
  16.  
  17. If (Cells(m, n) < 0 And J_ch = Cells(m, n)) Then
  18.  
  19. If (H_ch < Cells(m, n + 5)) Then
  20.  
  21. J_Cok = J_ch
  22. J_Liv = Cells(m, n + 8)
  23. Delta = J_Liv - J_ch
  24. Cells(m, 10) = Delta
  25.  
  26. Else
  27.  
  28. J_Cok = Cells(m, n + 1)
  29. J_Liv = Cells(m, n + 8)
  30. Delta = J_Liv - J_ch
  31. Cells(m, 10) = Delta
  32.  
  33. End If
  34.  
  35.  
  36. End If
  37.  
  38. Next n
  39. Next m
  40.  
  41.  
  42.  
  43. End Sub


Quelqu'un aurait une petite piste? Le code compile mais ...

Autres pages sur : vba boucles imbriquees

a b L Programmation
5 Novembre 2012 09:36:52

Salut,
Commence déjà par utiliser la proprité ".value" de l'objet cells.
m
0
l
5 Novembre 2012 10:08:20

En effet çà fonctionne tout de suite mieux. Merci
m
0
l
Contenus similaires
a b L Programmation
5 Novembre 2012 11:12:29

Rhooo....

Des Next variable !
On n'est plus en 1977
:pfff: 

Depuis 1985, c'est l'indentation qui permet de faire du code propre et bien organisé.
:o 
m
0
l
a b L Programmation
5 Novembre 2012 11:20:26

zeb a dit :
Rhooo....

Des Next variable !
On n'est plus en 1977
:pfff: 

Depuis 1985, c'est l'indentation qui permet de faire du code propre et bien organisé.
:o 


Ben en fait, bien que ce soit superflu, moi je trouve assez agréable à lire :spamafote: , Bon je suis également flémmard, donc je ne l'utilise pas ;) 
m
0
l
5 Novembre 2012 11:22:02

C'est vrai mais vu que sur Excel il n' y a pas d'indentation auto j'ai préféré écrire les variables pour ne pas s'y perdre.

Mais tu as une solution pour indenter parfaitement le code?
m
0
l
5 Novembre 2012 11:52:56

Je reviens vers vous , car mon programme effectue a merveille la fonction demandé SAUF qu'il n'arrive pas à comparer deux horaires.

Y'a-t il un format plus adapté aux comparaisons pour les horaires?
J'ai utiliser un Dim Date pour ma variable horaire, mauvaise idée ?

  1. Dim H_Ch as Date
  2. [..]
  3. If (H_ch < Cells(m, n + 5).Value)


La comparaison renvoit toujours vrai
m
0
l
a b L Programmation
5 Novembre 2012 12:53:46

Utilise un point d'rrêt pour voir ce qu'il y a dans tes variables. si je me fie a ton code initial, h_ch est ... vide ! tu ne l'initialise jamais ...
m
0
l
5 Novembre 2012 14:01:53

Désolé le code a changé depuis le premier poste.

J'initialise ma valeur h_Ch avec une cellule du tableau comme suit :

  1. Sub test()
  2.  
  3. Dim J_ch As Integer
  4. Dim H_ch As Date
  5. Dim J_Liv As Integer
  6. Dim n As Integer
  7. Dim m As Integer
  8. Dim Delta As Integer
  9.  
  10.  
  11. J_ch = Cells(2, 5).Value
  12. H_ch = Cells(3, 5).Value
  13.  
  14.  
  15. For m = 5 To 70
  16.  
  17. For n = 8 To 4 Step -1
  18.  
  19. If (Cells(m, n).Value > 0 And J_ch <= Cells(m, n).Value) Then
  20.  
  21.  
  22. If (H_ch < Cells(m, n + 5).Value) Then
  23.  
  24. J_Cok = J_ch
  25. J_Liv = Cells(m, n + 9).Value
  26. Delta = J_Liv - J_ch
  27. If Delta < 0 Then Delta = Delta + 5
  28. Cells(m, 10).Value = Delta
  29.  
  30. Else
  31. J_Cok = Cells(m, n + 1).Value
  32. J_Liv = Cells(m, n + 9).Value
  33. Delta = J_Liv - J_ch
  34. If Delta < 0 Then Delta = Delta + 5
  35. Cells(m, 10).Value = Delta
  36.  
  37. End If
  38.  
  39. End If
  40.  
  41. Next
  42.  
  43. Next
  44.  
  45.  
  46. End Sub


H_ch prend donc la valeur de la cellule à savoir 07:00:00
On obtient dans le tableau de variable : H_ch : #07:00:00# : Date
m
0
l

Meilleure solution

a b L Programmation
5 Novembre 2012 15:42:03

mzubka a dit :
Désolé le code a changé depuis le premier poste.

J'initialise ma valeur h_Ch avec une cellule du tableau comme suit :

  1. Sub test()
  2.  
  3. Dim J_ch As Integer
  4. Dim H_ch As Date
  5. Dim J_Liv As Integer
  6. Dim n As Integer
  7. Dim m As Integer
  8. Dim Delta As Integer
  9.  
  10.  
  11. J_ch = Cells(2, 5).Value
  12. H_ch = Cells(3, 5).Value
  13.  
  14.  
  15. For m = 5 To 70
  16.  
  17. For n = 8 To 4 Step -1
  18.  
  19. If (Cells(m, n).Value > 0 And J_ch <= Cells(m, n).Value) Then
  20.  
  21.  
  22. If (H_ch < Cells(m, n + 5).Value) Then
  23.  
  24. J_Cok = J_ch
  25. J_Liv = Cells(m, n + 9).Value
  26. Delta = J_Liv - J_ch
  27. If Delta < 0 Then Delta = Delta + 5
  28. Cells(m, 10).Value = Delta
  29.  
  30. Else
  31. J_Cok = Cells(m, n + 1).Value
  32. J_Liv = Cells(m, n + 9).Value
  33. Delta = J_Liv - J_ch
  34. If Delta < 0 Then Delta = Delta + 5
  35. Cells(m, 10).Value = Delta
  36.  
  37. End If
  38.  
  39. End If
  40.  
  41. Next
  42.  
  43. Next
  44.  
  45.  
  46. End Sub


H_ch prend donc la valeur de la cellule à savoir 07:00:00
On obtient dans le tableau de variable : H_ch : #07:00:00# : Date


Tu peux essayer de t'inspirer de ceci:

  1. If TimeValue(Cells(1, 1).Text) < TimeValue(Cells(1, 2).Text) Then
  2. MsgBox "truc"
  3. End If


Attention, le .text à la place de .value est important !
;) 
partage
5 Novembre 2012 18:18:56

Bravo Drul et encore merci !
m
0
l
a b L Programmation
5 Novembre 2012 21:31:40

:jap: 
m
0
l