Cellule=Cellule*-1

Bonjour,

Pour mes pros je sais que mon problème est aussi simple, mais pour moi je galère enfin je veux rendre les chiffres saisie dans la cellule P6 négative (P6=P6*-1) si A6=transfert ou consommation et la cellule R6=P6*Q6 ( montant Hors Taxe=Prix Unitaire*quantité) si P6<>"" et Q6<>"".

Je vous remercie par avance.

Cordialement

Bonjour Gestionnaire_Rh

Ce n'est pas possible autrement que par code VBA !?

Sinon il suffit de saisir une quantité négative

A+

Bonjour BrunoM45,

merci pour la rapidité, et c'est ok pour le vba et je pense que ça devra ce passer dans

Private Sub Worksheet_Change(ByVal Target As Range)

mais je ne sais pas comment l'écrire, et c'est pour ça que je sollicite votre aide.

Re,

gestionnaire_rh a écrit :

Bonjour BrunoM45,

merci pour la rapidité, et c'est ok pour le vba et je pense que ça devra ce passer dans

Private Sub Worksheet_Change(ByVal Target As Range)

mais je ne sais pas comment l'écrire, et c'est pour ça que je sollicite votre aide.

Tout à fait, je vois que tu connais

Voci le code, si j'ai bien tout compris, à mettre dans la feuille ou tu veux la mdofi

Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Target, Range("P:P")) Is Nothing Then
    ' Empêcher les évènements, sinon boucle sans fin
    Application.EnableEvents = False
    On Error Resume Next
    Target.Value = -Target.Value
    On Error GoTo 0
    Application.EnableEvents = True
  End If
End Sub

A+

Bonjour,

Pour la 2ème partie :

dans R6 :

=SI(ET(P6<>"";Q6<>"");P6*Q6;"")

Pour la 1ère question, il n'y aura pas d'autres solutions que celles de Bruno, soit une saisie négative manuelle soit un bout de code vba.

Le problème du worksheetchange , c'est que pour qu'il se déclenche, tu dois tester si c'est ta cellule P6 qui est modifiée, et vu que c'est elle que tu modifies, ta macro tourne en boucle... donc il faut bidouiller un peu en désactivant les évènements.

Sinon sans vba, si tu peux te permettre une cellule en + dans ta mise en page

En P6 tu fais ta saisie, et dans une cellule cachée :

=SI(OU(A6="transfert";A6="consommation");-P6;P6)

Et dans les calcules où tu utilisais P6, tu utilises cette cellule.

Cordialement,

Edit: Bonjour Bruno

Bonjour BrunoM45, Zirak

Je vous remercies pour vos réponses maintenant la cellule est modifié automatiquement, mais mon problème persiste toujours pour ce code sur worksheet_Change(ByVal Target As Range) que j'aimerai bien pouvoir mettre la condition selon la cellule A6 comme par exemple:

    On Error Resume Next
    If Target.Offset(0, -15).Value = "consommation" Or "transfert" Then
    Target.Value = -Target.Value
    End If

et puis pour la formule

=SI(ET(P6<>"";Q6<>"");P6*Q6;""

, j'aimerai la rajouter à la fin du premier code de worksheet_Change de la façon suivante:

Range("R6:R10").FormulaLocal = "=SI(ET(P6<>"""";Q6<>"""");P6*Q6;"""")"

mais ça marche toujours pas surtout avec ce message de mémoire insuffisante

enfin ce sont que des suggestions, je n'ai pas la maîtrise du vba et je compte vraiment sur vos propositions.

encore merci pour vos réponses

Cordialement

Bonjour,

J'ai réussi a contourné mon problème et j'ai affecter la modification en nombre négative de la cellule P6 au bouton d'enregistrement en rajoutant ceci:

    If Range("A6") = "consommation" Or Range("A6") = "transfert" Then
    ActiveCell.Offset(0, 15).Value = ActiveCell.Offset(0, 15).Value * -1

Je remercié BrunoM45 et Zirak pour les solutions apportées.

Cordialement

Gestionnaire rh