Boucle DO While

Résolu/Fermé
laura54960 Messages postés 17 Date d'inscription mardi 9 octobre 2012 Statut Membre Dernière intervention 10 février 2015 - Modifié par pijaku le 16/01/2015 à 13:38
laura54960 Messages postés 17 Date d'inscription mardi 9 octobre 2012 Statut Membre Dernière intervention 10 février 2015 - 16 janv. 2015 à 18:17
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 :

 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 !

3 réponses

PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
16 janv. 2015 à 14:27
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.
0
crapoulou Messages postés 28161 Date d'inscription mercredi 28 novembre 2007 Statut Modérateur, Contributeur sécurité Dernière intervention 21 mai 2024 7 998
Modifié par crapoulou le 16/01/2015 à 14:33
Bonjour,

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
0
laura54960 Messages postés 17 Date d'inscription mardi 9 octobre 2012 Statut Membre Dernière intervention 10 février 2015
16 janv. 2015 à 18:17
Bonjour PlacageGranby, Bonjour crapoulou,

Merci pour vos réponses.
En effet crapoulou, en utilisant l'astuce de PlacageGranby, je me suis rendue compte de mon erreur (très bête au passage). Cela fonctionne très bien maintenant.

Merci à vous deux !

Bonne continuation
0