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