If et else vba

Fermé
az71 Messages postés 1 Date d'inscription dimanche 11 novembre 2018 Statut Membre Dernière intervention 11 novembre 2018 - 11 nov. 2018 à 11:02
yg_be Messages postés 23471 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 février 2025 - 11 nov. 2018 à 11:12
Bonjour,

J'ai un tableau dont la première colonne "Etat " soit des "oui" ou "non", deuxième colonne "Date et heure" ensuite des colonnes "RAF" , "RAP" , "RAM".
J'aimerai calculer l'écart entre une cellule et autre qui la precede selon etat "oui" ou "non" et selon le non de colonne RAF ou RAP ou RAM.


le code qui marche selon macro automatique :

Sub Calcul1()
z = Range("a" & Rows.Count).End(xlUp).Row
Range("c4:c" & z).FormulaR1C1 = _
"=IF(RC[-2]=""NON"",RC[-1]-R[-2]C[-1],IF(RC[-2]=""OUI"",""""))"
Range("d4:d" & z).FormulaR1C1 = _
"=IF(RC[-3]=""NON"",RC[-2]-R[-1]C[-2],IF(RC[-3]=""OUI"",""""))"
Range("e3:e" & z).FormulaR1C1 = _
"=IF(RC[-4]=""OUI"",RC[-3]-R[-1]C[-3],IF(RC[-4]=""NON"",""""))"
End Sub

le code qui n'a pas marché :

Sub Calcul2()
Sheets("Feuil1").Select
z = Range("a" & Rows.Count).End(xlUp).Row
For Each Cell In Range("a2:a" & z)
If Cell.Value = "NON" And Range("c1") = "RAF" Then
Cell.Offset(0, 2) = Cell.Offset(0, 1) - Cell.Offset(-2, 1)
Else
If Cell.Value = "NON" And Range("d1") = "RAP" Then
Cell.Offset(0, 3) = Cell.Offset(0, 1) - Cell.Offset(-1, 1)
Else
If Cell.Value = "OUI" And Range("e1") = "RAM" Then
Cell.Offset(0, 4) = Cell.Offset(0, 1) - Cell.Offset(-1, 1)
End If
End If
End If

Next
End Sub

Merci de me corriger le deuxième code

1 réponse

yg_be Messages postés 23471 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 février 2025 Ambassadeur 1 568
Modifié le 11 nov. 2018 à 11:21
bonjour, peux-tu utiliser la coloration syntaxique quand tu partages du code?
comment se comporte le code qui n'a pas marché: message d'erreur, comportement inattendu?
tu souhaites que le deuxième code fasse la même chose que le premier?
comme le premier est illisible, peux-tu expliquer ce que tu souhaites?
au lieu de
 If Cell.Value = "NON" And Range("c1") = "RAF" Then 

il serait peut-être plus logique de faire:
If Cell.Value = "NON" And Cells(1, Cell.column) = "RAF" Then
0