Boucle DO While
Résolu
laura54960
Messages postés
17
Date d'inscription
Statut
Membre
Dernière intervention
-
laura54960 Messages postés 17 Date d'inscription Statut Membre Dernière intervention -
laura54960 Messages postés 17 Date d'inscription Statut Membre Dernière intervention -
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
- Mon pc s'allume et s'éteint en boucle ✓ - Forum Matériel & Système
- 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
- What you do what you say - Forum Audio
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