Boucle DO While
Résolu
laura54960
Messages postés
17
Statut
Membre
-
laura54960 Messages postés 17 Statut Membre -
laura54960 Messages postés 17 Statut Membre -
Bonjour,
Je viens vers vous afin, je l'espère, régler un problème de programmation. Je suis en train de créer un programme permettant le calcul automatique d'un montant en fonction d'une situation. Voici mes écritures :
Le calcul s'effectue, cela s'affiche bien où je le souhaite, tous correspond très bien sauf, la justesse du calcul. En effet, je voudrais qu'à partir de la ligne 21 (i), le calcul s'effectue et interroge tous les IF et ELSEIF à chaque ligne, jusqu'à la ligne 118. Or, le programme m'affiche le montant de la ligne 21 (14,88) pour toutes les lignes suivantes.
J'ai du rater quelque chose dans ma boucle mais je ne parviens pas à trouver l'erreur. Pouvez-vous me proposer une solution ?
Merci d'avance !
Je viens vers vous afin, je l'espère, régler un problème de programmation. Je suis en train de créer un programme permettant le calcul automatique d'un montant en fonction d'une situation. Voici mes écritures :
Sub Calcul()
Dim hanc As String
Dim hnouv As String
Dim majo As Single
Dim i As Integer
Dim RH As String
Dim R As String
Dim G As String
Dim A As String
Dim M As String
Dim N As String
Dim JRTT As String
Dim DEMIJRTT As String
Dim datechg As Date
Dim datedeb As Date
Dim datefin As Date
Dim date1 As Date
i = 21
hanc = Worksheets("Bilan").Cells(i, 6).Value
hnouv = Worksheets("Bilan").Cells(i, 9).Value
datechg = Worksheets("Bilan").Cells(7, 7).Value
datedeb = Worksheets("Bilan").Cells(13, 7).Value
datefin = Worksheets("Bilan").Cells(15, 7).Value
date1 = Worksheets("Bilan").Cells(i, 4).Value
Do While date1 - 1 < datefin
If hnouv = "RH" Or hnouv = "G" Or hnouv = "R" Or hnouv = "JRTT" Then
majo = 0
Worksheets("Bilan").Cells(i, 18).Value = majo
ElseIf hnouv = "J" And hanc = "RH" Or hnouv = "J" And hanc = "R" Or hnouv = "J" And hanc = "G" Or hnouv = "J" And hanc = "JRTT" Then
majo = 12.25
Worksheets("Bilan").Cells(i, 18).Value = majo
ElseIf hnouv = "J" And hanc = "DEMIJRTT" Then
majo = 7
Worksheets("Bilan").Cells(i, 18).Value = majo
ElseIf hnouv = "M" And hanc = "RH" Or hnouv = "M" And hanc = "R" Or hnouv = "M" And hanc = "G" Or hnouv = "M" And hanc = "JRTT" Then
majo = 14.25
Worksheets("Bilan").Cells(i, 18).Value = majo
ElseIf hnouv = "M" And hanc = "DEMIJRTT" Then
majo = 9
Worksheets("Bilan").Cells(i, 18).Value = majo
ElseIf hnouv = "M" And hanc = "J" Then
majo = 1.67
Worksheets("Bilan").Cells(i, 18).Value = majo
ElseIf hnouv = "A" And hanc = "RH" Or hnouv = "A" And hanc = "R" Or hnouv = "A" And hanc = "G" Or hnouv = "A" And hanc = "JRTT" Then
majo = <bold>14.88</bold>
Worksheets("Bilan").Cells(i, 18).Value = majo
ElseIf hnouv = "A" And hanc = "DEMIJRTT" Then
majo = 8.75
Worksheets("Bilan").Cells(i, 18).Value = majo
ElseIf hnouv = "DEMIJRTT" And hanc = "RH" Or hnouv = "DEMIJRTT" And hanc = "R" Or hnouv = "DEMIJRTT" And hanc = "G" Or hnouv = "DEMIJRTT" And hanc = "JRTT" Then
majo = 5.25
Worksheets("Bilan").Cells(i, 18).Value = majo
End If
i = i + 1
date1 = date1 + 1
Loop
End Sub
Le calcul s'effectue, cela s'affiche bien où je le souhaite, tous correspond très bien sauf, la justesse du calcul. En effet, je voudrais qu'à partir de la ligne 21 (i), le calcul s'effectue et interroge tous les IF et ELSEIF à chaque ligne, jusqu'à la ligne 118. Or, le programme m'affiche le montant de la ligne 21 (14,88) pour toutes les lignes suivantes.
J'ai du rater quelque chose dans ma boucle mais je ne parviens pas à trouver l'erreur. Pouvez-vous me proposer une solution ?
Merci d'avance !
A voir également:
- Boucle DO While
- My people do - Télécharger - Organisation
- Do not turn off target traduction - Forum Samsung
- Samsung galaxy tab S Bloquer Downloading do not turn off target - Forum Téléphones & tablettes Android
- Mon pc s'allume et s'éteint en boucle ✓ - Forum Matériel & Système
- Fichier .do ✓ - Forum PDF
3 réponses
Je n'ai pas compris tout ton raisonnement avec les IFELSE.
Mais, je te suggère de faire une trace pour voir comment ton code se comporte.
Dans la marge gauche, tu cliques et un point rouge va s'afficher.
Tu peux le mettre sur ton i = 21.
Ensuite quand tu lances ta macro et excel va s'arrêter au point rouge.
Ensuite tu fais F8 F8 F8 F8 F8 pour avancer ligne par ligne.
Cela permet de voir le comportement de ta macro.
Et quand tu place ta souris au dessus d'une variable, tu peux voir sa valeur en realtime
La trace pas à pas est l'outil ultime pour réussir a comprendre pourquoi une boucle ne se comporte pas comme prévu.
Mais, je te suggère de faire une trace pour voir comment ton code se comporte.
Dans la marge gauche, tu cliques et un point rouge va s'afficher.
Tu peux le mettre sur ton i = 21.
Ensuite quand tu lances ta macro et excel va s'arrêter au point rouge.
Ensuite tu fais F8 F8 F8 F8 F8 pour avancer ligne par ligne.
Cela permet de voir le comportement de ta macro.
Et quand tu place ta souris au dessus d'une variable, tu peux voir sa valeur en realtime
La trace pas à pas est l'outil ultime pour réussir a comprendre pourquoi une boucle ne se comporte pas comme prévu.
Bonjour,
Il faut descendre ce bloc de code dans la boucle pour que les valeurs changent :
Il faut descendre ce bloc de code dans la boucle pour que les valeurs changent :
hanc = Worksheets("Bilan").Cells(i, 6).Value
hnouv = Worksheets("Bilan").Cells(i, 9).Value
datechg = Worksheets("Bilan").Cells(7, 7).Value
datedeb = Worksheets("Bilan").Cells(13, 7).Value
datefin = Worksheets("Bilan").Cells(15, 7).Value
date1 = Worksheets("Bilan").Cells(i, 4).Value