Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Transformer la fonction SI en vba

6 réponses
Avatar
géjoun
Bonjour, je cherche à "convertir" la fonction SI suivante (en A21)
=SI(E21="NON";"";1) en vba, et je bloque sur 2 points.

Je suis pour l'intant arrivé à ça (inséré dans la feuille de mon document) :

Private Sub Worksheet_Change(ByVal Target As Range)
If [e21] = "NON" Then
[a21] = ""
Else
[a21] = 1
End If
End Sub

Alors, déjà, la formule ne fonctionne pas... Je pensais pourtant que ça
correspondait.

Et ensuite, ya a t'il un moyen pour que la formule me renvoie bien 1 en A21
suivant la condition définie dans celle-ci, mais que si je rentre un autre
nombre en "écrasant" le résultat en A21, elle ne renvoie pas d'erreur et
l'accepte? (un peu comme si je supprimais le =SI(E21="NON";"";1) en le
remplacant par un chiffre; sauf que là, j'aimerai que la formule en vba
continue tout de même à fonctionner "au cas ou" en arrière plan.

Merci!

--
géjoun
dam-mail2007@ifrance.com
/Enlever l''année pour m''écrire.../

6 réponses

Avatar
Modeste
Bonsour® géjoun avec ferveur ;o))) vous nous disiez :

Bonjour, je cherche à "convertir" la fonction SI suivante (en A21)
=SI(E21="NON";"";1) en vba.
j'aimerai que la formule en vba
continue tout de même à fonctionner "au cas ou" en arrière plan.


Private Sub Worksheet_Change(ByVal Target As Range)
[A21].Formula = "=IF(E21=""NON"","""",1)"
End Sub

--
--
@+
;o)))

Avatar
géjoun
Bonjour,

Je n'arrive même pas à faire fonctionner cette macro (est-ce bien dans la
feuille quil faut mettre le code? ou dans un module?).

Et en plus, ça met au moins 3 sec de calcul à chaque fois que j'essaie de
changer les données en E21. C'est normal?

Merci!

--
géjoun

/Enlever l''année pour m''écrire.../





Bonsour® géjoun avec ferveur ;o))) vous nous disiez :

Bonjour, je cherche à "convertir" la fonction SI suivante (en A21)
=SI(E21="NON";"";1) en vba.
j'aimerai que la formule en vba
continue tout de même à fonctionner "au cas ou" en arrière plan.


Private Sub Worksheet_Change(ByVal Target As Range)
[A21].Formula = "=IF(E21=""NON"","""",1)"
End Sub

--
--
@+
;o)))






Avatar
AH60
Bonjour

Private Sub Worksheet_Change(ByVal Target As Range)
[A21] = IIf(UCase([E21]) = "NON", "", 1)
End Sub

Abed_H



Bonjour, je cherche à "convertir" la fonction SI suivante (en A21)
=SI(E21="NON";"";1) en vba, et je bloque sur 2 points.

Je suis pour l'intant arrivé à ça (inséré dans la feuille de mon document) :

Private Sub Worksheet_Change(ByVal Target As Range)
If [e21] = "NON" Then
[a21] = ""
Else
[a21] = 1
End If
End Sub

Alors, déjà, la formule ne fonctionne pas... Je pensais pourtant que ça
correspondait.

Et ensuite, ya a t'il un moyen pour que la formule me renvoie bien 1 en A21
suivant la condition définie dans celle-ci, mais que si je rentre un autre
nombre en "écrasant" le résultat en A21, elle ne renvoie pas d'erreur et
l'accepte? (un peu comme si je supprimais le =SI(E21="NON";"";1) en le
remplacant par un chiffre; sauf que là, j'aimerai que la formule en vba
continue tout de même à fonctionner "au cas ou" en arrière plan.

Merci!

--
géjoun

/Enlever l''année pour m''écrire.../


Avatar
géjoun
Bonjour,

Bon, finalement, les 2 formules fonctionnent bien.
En fait, je me suis trompé sur le numéro de cellule, et ça m'affichait le
résultat sur la ligne du dessus, et j'ai mis 3 plombes à m'en apercevoir! La
loose.... :o)

Par contre, existe t'il un moyen pour que ça calcule quand même, mais sans
me "figer" l'ordi dès que je modifie la valur en E21?

Et est-il possible de pouvoir rentrer un autre valeur que 1 ou "" à la main"
en A21; sans que le code vba m'en empêche?

Par exemple, à la place de laisser la cellule vide ou avoir 1 en A21, j'ai
besoin de mettre 12, sans pour autant que la formule me remette
obligatoirement 1 ou "" suivant ce qui est complété en E21; et par contre,
que si à nouveau je supprime ce 12, la formule reprenne la main et re-renvoie
un résultat par rapport à ce qui est rentré en E21?

Est-ce possible?
Merci!
--
géjoun

/Enlever l''année pour m''écrire.../



Bonjour

Private Sub Worksheet_Change(ByVal Target As Range)
[A21] = IIf(UCase([E21]) = "NON", "", 1)
End Sub

Abed_H


Avatar
cousinhub
Bonsoir,
pour plus d'explications sur ton souhait, peux-tu préciser si, lorsque
tu changes la valeur de E21 ("" ou "non"), tu cellule (A21) doit
également changer de valeur?
sinon, un petit code :
En admettant que tes cellules à modifier soient dans la plage A1:E50,
décomposée en 2 plages (iSect1 et iSect2), selon les cellules que tu
modifies :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim iSect1 As Range, iSect2 As Range

Set iSect1 = Intersect(Target, [a1:a50])
Set iSect2 = Intersect(Target, [e1:e50])

If iSect1 Is Nothing And iSect2 Is Nothing Then Exit Sub

Select Case Target.Column
Case 1
If Target = 1 Or Target = "" Then Target =
IIf(UCase(Target.Offset(0, 4)) = "NON", "", 1): Exit Sub
Case 5
Select Case Target
Case "non"
Target.Offset(0, -4) = "": Exit Sub
Case ""
Target.Offset(0, -4) = 1: Exit Sub
End Select
End Select
End Sub


bonne soirée

Bonjour,

Bon, finalement, les 2 formules fonctionnent bien.
En fait, je me suis trompé sur le numéro de cellule, et ça m'affichait le
résultat sur la ligne du dessus, et j'ai mis 3 plombes à m'en apercevoir! La
loose.... :o)

Par contre, existe t'il un moyen pour que ça calcule quand même, mais sans
me "figer" l'ordi dès que je modifie la valur en E21?

Et est-il possible de pouvoir rentrer un autre valeur que 1 ou "" à la main"
en A21; sans que le code vba m'en empêche?

Par exemple, à la place de laisser la cellule vide ou avoir 1 en A21, j'ai
besoin de mettre 12, sans pour autant que la formule me remette
obligatoirement 1 ou "" suivant ce qui est complété en E21; et par contre,
que si à nouveau je supprime ce 12, la formule reprenne la main et re-renvoie
un résultat par rapport à ce qui est rentré en E21?

Est-ce possible?
Merci!


Avatar
géjoun
cousinhub nous expliquait :

Bonsoir,

La valeur de A21 dépend bien de ce qui est contenu dans E21 (vide si A21=
"", ou 1 si A21 est "non"), mais je voudrais quand même en plus pouvoir
rentrer à la main d'autres valeurs que 1 ou "", et que dans ce cas, la
formule SI ne renvoie pas d'erreurs, et ne s'exécute pas.
Mon explication est assez claire?

Merci!

--
géjoun

/Enlever l'année pour répondre.../


Bonsoir,
pour plus d'explications sur ton souhait, peux-tu préciser si, lorsque
tu changes la valeur de E21 ("" ou "non"), tu cellule (A21) doit
également changer de valeur?
sinon, un petit code :
En admettant que tes cellules à modifier soient dans la plage A1:E50,
décomposée en 2 plages (iSect1 et iSect2), selon les cellules que tu
modifies :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim iSect1 As Range, iSect2 As Range

Set iSect1 = Intersect(Target, [a1:a50])
Set iSect2 = Intersect(Target, [e1:e50])

If iSect1 Is Nothing And iSect2 Is Nothing Then Exit Sub

Select Case Target.Column
Case 1
If Target = 1 Or Target = "" Then Target > IIf(UCase(Target.Offset(0, 4)) = "NON", "", 1): Exit Sub
Case 5
Select Case Target
Case "non"
Target.Offset(0, -4) = "": Exit Sub
Case ""
Target.Offset(0, -4) = 1: Exit Sub
End Select
End Select
End Sub


bonne soirée