OVH Cloud OVH Cloud

Pb sur une boucle For Each

1 réponse
Avatar
Eric RENAUD
Bonjour,
Il y a une chose que je ne m'explique pas.
Le code suivant met une formule dans chaque cellule de ma sélection.
Tout marche parfaitement sauf que à la fin de ma procédure, la formule en A2
a disparu et est remplacée par sa valeur.
En pas à pas, je vois bien ma formule placée en A2 mais après le End Sub, la
formule a dispar et est donc remplacée par la valeur
Est-ce un mystère de la boucle For Each ... ou quelque chose qui m'échappe ?

Sub ConvertDelai()
Range("A2:A20").Select
Set MaPlage = Selection
For Each Cell In MaPlage
If IsEmpty(Cell.Offset(0, 3)) Then
ActiveCell.Value = ActiveCell.Value
Else
Cell.FormulaR1C1 = _

"=IF(R[1]C[-7]-R[1]C[-9]<=14,0,IF(RC7=""FOKKER"",(RC20-RC15)+3,IF(RC7=""MATI
S"",(RC20-RC15)+3,IF(RC7=""AEROTEC"",(RC20-RC15)-8,(RC20-RC15)+2))))"
End If
Next Cell
End Sub

D'avance merci.

1 réponse

Avatar
Alain CROS
Bonjour.

Si une cellule de la plage D2:D20 (offset(0,3)) est vide c'est ActiveCell.Value = ActiveCell.Value qui s'applique.
et ActiveCell est toujours A2 à cause de la sélection inutile.
Suggestion:

Sub ConvertDelai()
Dim Cell As Range
For Each Cell In Range("A2:A20")
With Cell
If IsEmpty(.Offset(0, 3)) Then
.Value = .Value
Else
.Formula = "=IF(R[1]C[-7]-R[1]C[-9]<,0,IF(RC7=" & _
"""FOKKER"",(RC20-RC15)+3,IF(RC7=""MATIS"",(RC20-RC15)" & _
"+3,IF(RC7=""AEROTEC"",(RC20-RC15)-8,(RC20-RC15)+2))))"
End If
End With
Next Cell
End Sub

Alain CROS.

"Eric RENAUD" a écrit dans le message de news: #Gb#
Bonjour,
Il y a une chose que je ne m'explique pas.
Le code suivant met une formule dans chaque cellule de ma sélection.
Tout marche parfaitement sauf que à la fin de ma procédure, la formule en A2
a disparu et est remplacée par sa valeur.
En pas à pas, je vois bien ma formule placée en A2 mais après le End Sub, la
formule a dispar et est donc remplacée par la valeur
Est-ce un mystère de la boucle For Each ... ou quelque chose qui m'échappe ?

Sub ConvertDelai()
Range("A2:A20").Select
Set MaPlage = Selection
For Each Cell In MaPlage
If IsEmpty(Cell.Offset(0, 3)) Then
ActiveCell.Value = ActiveCell.Value
Else
Cell.FormulaR1C1 = _

"=IF(R[1]C[-7]-R[1]C[-9]<,0,IF(RC7=""FOKKER"",(RC20-RC15)+3,IF(RC7=""MATI
S"",(RC20-RC15)+3,IF(RC7=""AEROTEC"",(RC20-RC15)-8,(RC20-RC15)+2))))"
End If
Next Cell
End Sub

D'avance merci.