formule vba

Cam_corbav

XLDnaute Nouveau
Bonsoir à tous,
Je me permets de poster ce message car je n'arrive pas à faire ma formule SI en vba.
En effet j'aurai besoin de votre aide pour remplacer ma formule si classique pour le calcul du bénéfice ou de la perte de mon compte de résultat, par une fonction personnalisée par un algo en vba.
Merci d'avance2019-03-29.png
 

CHALET53

XLDnaute Barbatruc
Bonjour,
En vba, pour remplir les cellules B11 et / ou D11

Sub essai()
Range("B11") = "": Range("D11") = ""
If Range("D10") >= Range("B10") Then Range("B11") = Range("D10") - Range("B10") Else Range("D11") = Range("B10") - Range("D10")

End Sub
 

Staple1600

XLDnaute Barbatruc
Bonjour

Histoire de varier les plaisirs ;)
Une autre syntaxe possible
Code:
Sub essai_II()
[B11,D11] = "": [B11] = IIf([D10] >= [B10], [D10] - [B10], [B10] - [D10])
End Sub
La même transformée en fonction personnalisée
Code:
Function benefice(Cha As Range, Pro As Range)
benefice = IIf(Pro >= Cha, Pro - Cha, Cha - Pro)
End Function
A utiliser comme suit: saisir en B11
=benefice(B10;D10)
 

Staple1600

XLDnaute Barbatruc
Question subsidiaire
Pourquoi ne pas simplement utiliser la formule classique saisie manuellement en B11?
=SI(D10>B10;D10-B10;B10-D10)

Quelle est ici la motivation/obligation de passer par VBA ?
 

job75

XLDnaute Barbatruc
Bonjour Cam_corbav, salut CHALET53, JM, heureux de vous revoir, vous vous faites rares:)
Question subsidiaire
Pourquoi ne pas simplement utiliser la formule classique saisie manuellement en B11?
Je ne comprends pas non plus, les formules Excel sont en effet très simples :

- en B11 =SI(D10>B10;D10-B10;"")

- en D11 =SI(D10<B10;B10-D10;"")

- en B12 et D12 utiliser la fonction SOMME pour additionner les 2 cellules du dessus.

A+
 

Cam_corbav

XLDnaute Nouveau
Question subsidiaire
Pourquoi ne pas simplement utiliser la formule classique saisie manuellement en B11?
=SI(D10>B10;D10-B10;B10-D10)

Quelle est ici la motivation/obligation de passer par VBA ?
J'ai besoin de passer par vba car nous sommes en train d'apprendre ce langage en cours de BTS et je dois m'en servir pour présenter mon exercice
 

Cam_corbav

XLDnaute Nouveau
Bonjour Cam_corbav, salut CHALET53, JM, heureux de vous revoir, vous vous faites rares:)

Je ne comprends pas non plus, les formules Excel sont en effet très simples :

- en B11 =SI(D10>B10;D10-B10;"")

- en D11 =SI(D10<B10;B10-D10;"")

- en B12 et D12 utiliser la fonction SOMME pour additionner les 2 cellules du dessus.

A+
Les formules sont très simple, je suis d'accord, or j'ai besoin d'utiliser vba pour présenter mon exercice et je suis vraiment perdue, je n'arrive pas du tout à m'en sortir pour celui-ci!
 

Staple1600

XLDnaute Barbatruc
Re

Bah pourtant on a mis du VBA dans ta discussion ;)
Voir les messages#2 et #3

Où se situe ta difficulté pour tester ces trois propositions?
 

Cam_corbav

XLDnaute Nouveau
Re

Bah pourtant on a mis du VBA dans ta discussion ;)
Voir les messages#2 et #3

Où se situe ta difficulté pour tester ces trois propositions?
Je dispose de la version 2016 d'excel et je n'arrive pas à comprendre comment utiliser vos solutions car je suis bloquée ici --> 2019-03-30.png
 

job75

XLDnaute Barbatruc
Si c'est un pur exercice d'école ça se comprend.

Alors placez cette macro dans le code de la feuille (clic droit sur l'onglet et Visualiser le code) :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c1 As Range, c2 As Range, c3 As Range, c4 As Range, x#, y#
Set c1 = Cells.Find("Total charges", , xlValues)
If c1 Is Nothing Then MsgBox "'Total charges' introuvable...": Exit Sub
Set c2 = Cells.Find("Total produits")
If c2 Is Nothing Then MsgBox "'Total produits' introuvable...": Exit Sub
Set c3 = Cells.Find("Bénéfice")
If c3 Is Nothing Then MsgBox "'Bénéfice' introuvable...": Exit Sub
Set c4 = Cells.Find("Perte")
If c4 Is Nothing Then MsgBox "'Perte' introuvable...": Exit Sub
x = Val(Replace(c1(1, 2), ",", "."))
y = Val(Replace(c2(1, 2), ",", "."))
Application.EnableEvents = False
c3(1, 2) = IIf(x < y, y - x, "")
c4(1, 2) = IIf(x > y, x - y, "")
Application.EnableEvents = True
End Sub
Elle se déclenche chaque fois qu'on valide ou modifie une cellule quelconque.

A+
 

Cam_corbav

XLDnaute Nouveau
Si c'est un pur exercice d'école ça se comprend.

Alors placez cette macro dans le code de la feuille (clic droit sur l'onglet et Visualiser le code) :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c1 As Range, c2 As Range, c3 As Range, c4 As Range, x#, y#
Set c1 = Cells.Find("Total charges", , xlValues)
If c1 Is Nothing Then MsgBox "'Total charges' introuvable...": Exit Sub
Set c2 = Cells.Find("Total produits")
If c2 Is Nothing Then MsgBox "'Total produits' introuvable...": Exit Sub
Set c3 = Cells.Find("Bénéfice")
If c3 Is Nothing Then MsgBox "'Bénéfice' introuvable...": Exit Sub
Set c4 = Cells.Find("Perte")
If c4 Is Nothing Then MsgBox "'Perte' introuvable...": Exit Sub
x = Val(Replace(c1(1, 2), ",", "."))
y = Val(Replace(c2(1, 2), ",", "."))
Application.EnableEvents = False
c3(1, 2) = IIf(x < y, y - x, "")
c4(1, 2) = IIf(x > y, x - y, "")
Application.EnableEvents = True
End Sub
Elle se déclenche chaque fois qu'on valide ou modifie une cellule quelconque.

A+
Je vous remercie mais il n'y a rien à faire, cela ne veut pas marcher
 

Discussions similaires


Haut Bas