Valeur négative modifier valeur colonne suivante + absolu

Bonjour,

j'ai un tableau dans lequel j'ai des valeurs négatives dans une colonne E

je voulais savoir si il est posible que la colonne E que la valeur deviennent -1 si valeur dans la colonne E est < à 0

et que par la meme occasions la valeur de la colonne E exemple -2 devienne 2

Merci devotre aide

exemple en fichier ci joint[

salutations

Salut,

Si c'est ok, il faut copier la macro en fonction de tes cellules. (Voir VBA)

Bonjour salpetier, vaffancolor,

j'ai compris l'énoncé autrement que vaffancolor :

mais j'me suis p't'être trompé ?

dhany

Je sais pas...pas très clair :/

oui certainement pas assez clair dsl

ce que je veux si valeur dans E<0 alors dans colonne F mettre 1 sinon 0

et que ensuite la valeur dans la colonne E exemple -1 devienne 1

mais que la valeur de la colonne reste Reste quand meme à 1

Si j'ai bien compris...

merci ca me va très bien

nouvelle version :

11classeur-essai.xlsm (16.12 Ko)

Ctrl e ➯ travail effectué


voici le code VBA :

Option Explicit

Sub Essai()
  Dim k As Byte, vx#, dlig&, lig&
  dlig = Cells(Rows.Count, 5).End(3).Row
  Application.ScreenUpdating = 0
  For lig = 2 To dlig
    With Cells(lig, 5)
      vx = .Value: k = -(vx < 0): .Offset(, 1) = k
      If k = 1 Then .Value = -vx
    End With
  Next lig
End Sub

(cette solution n'est donc pas une procédure événementielle)

dhany

impeccable merci beaucoup

pourriez vous me decrire ce que fait chaques lignes car je débute et j'aimerais comprendre svp

j'ai pas bien compris à qui tu demandes une explication de code : à vaffancolor ou à moi dhany ?

j'suis surpris, car j'croyais qu'une procédure événementielle te convenait mieux.

dhany

@salpetier

si c'est pour mon code VBA que tu as demandé une explication, alors la voici :

Dim k As Byte, vx#, dlig&, lig& : déclare 4 variables ; vx# : idem que vx As Double ; dlig& : idem que dlig As Long

dlig = Cells(Rows.Count, 5).End(3).Row : idem que dlig = Cells(Rows.Count, "E").End(xlUp).Row

ça retourne donc la dernière ligne utilisée, selon la colonne E ; dans l'exemple : 13

Application.ScreenUpdating = 0 : désactive la mise à jour de l'écran ➯ exécution plus rapide

For lig = 2 To dlig .. Next lig : de la ligne 2 à 13 ➯ on balaye toutes les lignes ; pour chaque :

With Cells(lig, 5) .. End With : avec la cellule de la ligne lig, colonne E

vx = .Value : vx contient la valeur de la cellule référencée par With

k = -(vx < 0) : si vx est négatif, vx < 0 est vrai, et comme vrai vaut -1, -(-1) = 1 ; sinon : faux = 0

.Offset(, 1) = k : par rapport à la cellule référencée par With, la cellule qui est 1 colonne à droite (donc en colonne F) reçoit la valeur de k : 1 ou 0 (selon le résultat du test vx < 0)

If k = 1 Then .Value = -vx : si k = 1, ça signifie que la valeur vx était négative, alors on la remplace par -vx

exemple pour E8 qui contient au départ -2,000 : -(-2) = 2 ➯ le nombre négatif est bien devenu positif

merci de me dire si ça te convient.

dhany

les 2 me vont très bien et je pose la questions à vous 2 car je cherche à comprendre et pas seulemnt copier et utiliser

merci beaucoup

merci pour ton retour ! bonne continuation !

dhany

Voila,

Public Sub Worksheet_Change(ByVal Target As Range) 'Fonction qui s'active uniquement en cas de changement d'une cellule

    If Not Intersect(Target, Range("E2")) Is Nothing Then 'SI modif. dans la cellule E2 alors

    If ActiveSheet.Range("E2") < 0 Then 'SI dans la feuille active E2 est inf. à 0 alors,
    ActiveSheet.Range("F2") = "1" 'Feuille active F2 = 2
    ActiveSheet.Range("E2").Value = -ActiveSheet.Range("E2").Value 'Feuille active E2 valeur = - Feuille active E2
    Else 'Sinon qui renvoie à la modif. si E2 <0
    ActiveSheet.Range("F2") = "0" ' 'Feuille active F2 = 0

    End If 'Fin du dernier "SI"
    End If 'Fin du premier"SI"
End Sub
Rechercher des sujets similaires à "valeur negative modifier colonne suivante absolu"