OVH Cloud OVH Cloud

Une fct SI compliquée!!

22 réponses
Avatar
Toan
Bonjour,

Je voudrais cr=E9e deux colonnes num=E9riques et tester l'une=20
d'entre-elle.

Je m'explique:
Dans la premi=E8re colonne qui contient le champ PRIX et=20
dans la deuxi=E8me le champ NOUVEAU_PRIX et je voudrais d=E8s=20
que l'on saisi le nouveau prix dans la deuxi=E8me colonne=20
on apllique un test:

Le nouveau prix ne doit pas descendre en dessous du prix=20
actuel(premi=E8re colonne), donc si saisit un nouveau prix=20
inf=E9rieur =E0 l'ancien dans la deuxi=E8me colonne, on=20
applique par d=E9faut le prix de la premi=E8re colonne, sinon=20
si c'est sup=E9rieur on le laisse.

Par exemple:
L'ancien prix est 45, dans le nouveau si c'est > 45(par=20
ex. 69), on ne fait rien, sinon si(on tape 12 par ex.),=20
on met l'ancien prix c'est-=E0-dire 45!

Une fonction SI du genre:
=3DSI(A2>B2;A2;B2), =E7a ne marche pas!!!

Pouvez-vous m'aider?

Merci

10 réponses

1 2 3
Avatar
AV
Mais cela provoque quand même une erreur avec une sélection multiple avec
une validation par un clique sur une autre cellule.


Heu.. je vois pas très bien ce que tu veux dire ...
Tu peux être plus précis ?

AV

Avatar
Jacky
Tu peux être plus précis ?

Je sélectionne b2:c3
J'entre une donnée
Je confirme par entrer
Cela fonctionne
Mais si au lieu de confirmer par entrer, je clique sur une autre cellule,
cela provoque une erreur.
JJ

"AV" a écrit dans le message de
news:
Mais cela provoque quand même une erreur avec une sélection multiple
avec


une validation par un clique sur une autre cellule.


Heu.. je vois pas très bien ce que tu veux dire ...
Tu peux être plus précis ?

AV





Avatar
AV
Heu... avec la manip que tu indiques, je n'ai pas d'erreur !
T'es sur que tu as réactivé les évènements ?
Pour plus de sureté (avant tests), exécute la petite macro suivante :

Sub zzz()
Application.EnableEvents = True
End Sub

AV
Avatar
Jacky
Re..
Erreur d'exécution '13', Type incompatible
Sur la ligne:
If zz.Value < zz.Offset(0, -1).Value Then

J'avoue que je ne comprend pas pourquoi, même avec:
Application.EnableEvents = True
en debut de macro

JJ


"AV" a écrit dans le message de
news:
Heu... avec la manip que tu indiques, je n'ai pas d'erreur !
T'es sur que tu as réactivé les évènements ?
Pour plus de sureté (avant tests), exécute la petite macro suivante :

Sub zzz()
Application.EnableEvents = True
End Sub

AV





Avatar
AV
J'avoue que je ne comprend pas pourquoi, même avec:


J'avoue aussi ! ;-)

AV

Avatar
Jacky
RE....
En enlevant tous les:
Application.EnableEvents
Excel vient de me provoquer une erreur de type 'violation de ........
et ma gentiment éjecté de l'application.(Et cela sur un autre ordinateur)
Je vais voir cela de plus près demain.
Bonne soirée
JJ

"AV" a écrit dans le message de
news:%
J'avoue que je ne comprend pas pourquoi, même avec:


J'avoue aussi ! ;-)

AV





Avatar
Daniel.M
Bonjour,

Erreur d'exécution '13', Type incompatible
Sur la ligne:
If zz.Value < zz.Offset(0, -1).Value Then



La cellule zz ou zz.Offset(0,-1) contient une valeur d'erreur.

La comparaison entre un nombre et une valeur d'erreur te génère une erreur 13.

If IsError(zz.Value) Or IsError(zz(1,-2).Value) Then
' on ne compare pas
ElseIf zz.Value < zz(1,-2).Value Then
' ton ancien code


...
End If

Salutations,

Daniel M.

Avatar
Daniel.M
If IsError(zz.Value) Or IsError(zz(1,-2).Value) Then
' on ne compare pas
ElseIf zz.Value < zz(1,-2).Value Then


Pas zz(1,-2).Value mais bien zz(1,0).Value
À corriger 2 fois.

Daniel M.

Avatar
Jacky
Bonjour Daniel
Désolé, mais cela provoque la même erreur en cas de selection multiple.
If IsError(zz.Value) Or IsError(zz(1, 0).Value) Then
ElseIf zz.Value < zz(1, 0).Value Then
zz = zz.Offset(0, -1).Value
End If

****<zz(1, 0).Value ****Je ne comprend pas ceci
Salutations


JJ

"Daniel.M" a écrit dans le message de
news:%
If IsError(zz.Value) Or IsError(zz(1,-2).Value) Then
' on ne compare pas
ElseIf zz.Value < zz(1,-2).Value Then


Pas zz(1,-2).Value mais bien zz(1,0).Value
À corriger 2 fois.

Daniel M.





Avatar
Daniel.M
Salut Jacky,

Désolé, mais cela provoque la même erreur en cas de selection multiple.


C'était juste une précaution supplémentaire.
Pour ma part, le code (ni celui d'AV) ne provoque pas d'erreur chez moi mais si
je fais des sélections multiples.


Private Sub Worksheet_Change(ByVal zz As Excel.Range)
If zz.Column <> 2 Then Exit Sub
If Selection.Count > 1 Then Exit Sub

If IsError(zz(1, 1).Value) Or IsError(zz(1, 0).Value) Then
' on ne compare pas
Debug.Print "on avait une erreur dans col a ou col b"
ElseIf zz(1, 1).Value < zz(1, 0).Value Then
' ton ancien code
Application.EnableEvents = False
zz = zz.Offset(0, -1).Value
Application.EnableEvents = True
End If

End Sub

****<zz(1, 0).Value ****Je ne comprend pas ceci




La méthode Offset déplace la plage au complet. La méthode .Cells (implicite ici)
se situe par rapport à la première cellule. Mais les compteurs ne sont pas les
mêmes.
Offset() commence à zéro alors que Cells() commence à 1.

Salutations,

Daniel M.



1 2 3