Critère pour fin de boucle for

Bonjour,

Je souhaite transposer la valeur d'une mesure hebdomadaire aux autres jours de la semaine (en gros je rentre via une autre macro la valeur du lundi et cette macro doit transposer cette valeur aux autres jours de la semaine).

Je rencontre un problème lors de l'arrêt de ma boucle for.

Je m'explique: ma macro fonctionne, elle permet bien de transposer la valeur du lundi pour les 6 autres jours de la semaine. Sauf que la macro ne s'arrête pas automatiquement à la date d’aujourd’hui et continu jusqu'au 31 décembre alors que je souhaite la faire arrêter à la date d'aujourd'hui.

Cette affichage s'effectue sur la colonne 29 du code suivant:

Sub Sul()

Application.ScreenUpdating = False

Dim i As Integer

'Cette macro permet de prendre la valeur en Sulfates (SO4) prise de manière hebdomadaire

'(le lundi) et de la transposer jusqu'à la nouvelle valeur (le lundi suivant).

'Boucle de la ligne 31 à la dernière ligne remplie de la colonne AE

For i = 31 To 396

'Si La cellule AEi est vide, AEi conserve la valeur précedente, si elle est pleine on récupère la valeur de AEi

If Cells(i, 29).Value = "" Then

Cells(i, 29).Value = Cells(i - 1, 29).Value

Else: Cells(i, 29).Value = Cells(i, 29).Value

'Critère arret

Do While Cells(i, 28).Value <> ""

If Cells(i, 28).Value = "" Then

Exit For

Exit Do

End If

Next i

Application.ScreenUpdating = True 'Facultatif

End Sub

Pour arrêter ma boucle for, je me base sur la colonne 28 qui est rempli (toujours via une autre macro) tous les jours. Je souhaite donc que mon critère d'arret se base sur le fait que si valeur dans colonne 28 je continue, si pas de valeur dans la colonne 28 arrêt.

Merci d'avance de votre aide

Bonjour,

Plutôt que de mettre une fin fixée à 396 de la boucle For + un critère d'arrêt, pourquoi ne pas dimensionner tout le suite la fin de boucle à la dernière ligne non vide ?

Une piste :

With Sheets("NomFeuille") 'Nom à adapter
    For i = 31 To .Cells(Rows.Count, 28).End(xlUp).Row
        If .Cells(i, 29).Value = "" Then
            .Cells(i, 29).Value = .Cells(i - 1, 29).Value
        Else: .Cells(i, 29).Value = .Cells(i, 29).Value
        End If
    Next i
End With

Sinon, un critère de sortie moins tordu :

With Sheets("NomFeuille") 'Nom à adapter
    For i = 31 To 396
        If .Cells(i, 28).Value = "" Then Exit For 
        If .Cells(i, 29).Value = "" Then
            .Cells(i, 29).Value = .Cells(i - 1, 29).Value
        Else: .Cells(i, 29).Value = .Cells(i, 29).Value
        End If
    Next i
End With
Rechercher des sujets similaires à "critere fin boucle"