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

Calculs

14 réponses
Avatar
Apitos
Bonsoir,

J'ai fait cet exemple, dans lequel j'ai le prix unitaire, quantit=E9 et
total par prix unitaire.

Mais j'=E9prouve des difficult=E9s pour la formule en B qui me donne des
z=E9ros dans B si la condition n'est pas remplie, or j'aimerai avoir une
cellule vide =E0 la place.

Un deuxi=E8me probl=E8me, je le rencontre pour totaliser la colonne B
ainsi que la colonne C.

Pourtant tout parait normal.

http://cjoint.com/?khwfOgTcVg

Merci.

10 réponses

1 2
Avatar
Philippe.R
Bonsoir Apitos,
Tu as surtout un problème de référence circulaire entre les colonnes B et C
; l'affichage d'un zéro en B malgré la formule :
=SI(ET(C3>0;A3>0);CNUM(TEXTE(C3/A3;"0,00"));"")
viens de là
Cette formule pourrait être, me semble t il remplacée par :
=SI(OU(C3="";A3="");"";C3/A3)
sans vraiment résoudre la référence circulaire ; là faudrait que tu
expliques ce que tu cherches à calculer exactement, avec quelles données en
entrée.
--
http://www.excelabo.net/mpfe/connexion.php
http://dj.joss.free.fr/trombine.htm
Avec plaisir
Philippe.R
"Apitos" a écrit dans le message de
news:
Bonsoir,

J'ai fait cet exemple, dans lequel j'ai le prix unitaire, quantité et
total par prix unitaire.

Mais j'éprouve des difficultés pour la formule en B qui me donne des
zéros dans B si la condition n'est pas remplie, or j'aimerai avoir une
cellule vide à la place.

Un deuxième problème, je le rencontre pour totaliser la colonne B
ainsi que la colonne C.

Pourtant tout parait normal.

http://cjoint.com/?khwfOgTcVg

Merci.
Avatar
Apitos
Voila la procedure :

- Si je saisi le PrixU + Qté le total par produit et calculé par C1 =
A1 * B1
- Si je saisi le PrixU + Total par produit la Qté est calculée par
=SI(ET(C1>0;A1>0);CNUM(TEXTE(C1/A1;"0.00"));"")

Voilà !
Avatar
Apitos
Voilà une solution d'un autre forum (Merci fred), mais elle a besoin
de quelques retouches.


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Selection.Cells.Count > 1 Then End
Set isect = Application.Intersect(Target, Range("B2:C9"))
If Not isect Is Nothing Then
Select Case Target.Column
Case 2:
If IsEmpty(Target(1, 2)) Then
Target(1, 2).FormulaR1C1 = "=RC[-2]*RC[-1]"
If Target(1, 2) - Int(Target(1, 2)) = 0 Then Target(1,
2).NumberFormat = "General"
End If
Case 3:
If IsEmpty(Target(1, 0)) Then
Target(1, 0).FormulaR1C1 = "=RC[1]/RC[-1]"
If Target(1, 0) - Int(Target(1, 0)) = 0 Then Target(1,
0).NumberFormat = "General"
End If
End Select
End If
End Sub

*********
Alors j'aimerais formater les nombres decimaux dans la colonne B avec
deux chiffres apres la virgule.

Si le nombre est entier il n'y aura pas de virgule.

ainsi j'aimerais remplacer les [RC] par du code purement vba.

Merci.
Avatar
Apitos
De l'aide SVP.
Avatar
Philippe.R
Bonsoir,

Une piste pour le format de nombre, avec la copie de cet échange d'il y a
déjà quelques années ici même :
"======================================================================"
de : Nicolas B.
Groupes de discussion : microsoft.public.fr.excel
Envoyé : samedi 1 mai 2004 16:19
Objet : Re: Format de nombre pour avoir 2 décimales...ou pas!

Salut Philippe,
J'ai cherché dans les archives, et apparemment, il n'y a pas de solution par
un format personnalisé de nombre.

Voici par contre une solution macro donnée par AV il y a quelques années :
Private Sub Worksheet_Change(ByVal zzz As Range)
If Intersect(zzz, [A1:A10]) Is Nothing Then Exit Sub
If Not IsNumeric(zzz.Value) Then Exit Sub
If zzz - Int(zzz) > 0 Then
zzz.NumberFormat = "0.0#"
Else: zzz.NumberFormat = "General"
End If
End Sub

A+
--
Nicolas B.
"======================================================================="

Une autre piste, pour remplacer les [RC] par du code et en même temps
supprimer les références circulaires :

Target(1, 2).FormulaR1C1 = "=RC[-2]*RC[-1]"

peut être remplacé par :

Target(1, 2).value = target.offset(0,-2).value*target.offset(0,-1).value

--
http://www.excelabo.net/mpfe/connexion.php
http://dj.joss.free.fr/trombine.htm
Avec plaisir
Philippe.R
"Apitos" a écrit dans le message de
news:

Voilà une solution d'un autre forum (Merci fred), mais elle a besoin
de quelques retouches.


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Selection.Cells.Count > 1 Then End
Set isect = Application.Intersect(Target, Range("B2:C9"))
If Not isect Is Nothing Then
Select Case Target.Column
Case 2:
If IsEmpty(Target(1, 2)) Then
Target(1, 2).FormulaR1C1 = "=RC[-2]*RC[-1]"
If Target(1, 2) - Int(Target(1, 2)) = 0 Then Target(1,
2).NumberFormat = "General"
End If
Case 3:
If IsEmpty(Target(1, 0)) Then
Target(1, 0).FormulaR1C1 = "=RC[1]/RC[-1]"
If Target(1, 0) - Int(Target(1, 0)) = 0 Then Target(1,
0).NumberFormat = "General"
End If
End Select
End If
End Sub

*********
Alors j'aimerais formater les nombres decimaux dans la colonne B avec
deux chiffres apres la virgule.

Si le nombre est entier il n'y aura pas de virgule.

ainsi j'aimerais remplacer les [RC] par du code purement vba.

Merci.
Avatar
Apitos
J'ai egalement inspirer cette ligne du code de AV :

If Target(1, 2) - Int(Target(1, 2)) = 0 Then Target(1, 2).NumberFormat
= "General".

Bon je vais appliquer la totalite de l'idée et ensuite on verra.

Je vais egalement remplacer les [RC].

A suivre ...

Merci PHILLIPE.
Avatar
Apitos
J'ai ce code :

Option Explicit
Dim li&

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
li = Target.Row
If li > 9 Or li = 1 Then Exit Sub
MsgBox "A=" & Range("A" & li) & " B=" & Range("B" & li) & " C=" &
Range("C" & li)

' C & B renseignées, A?
If Range("B" & li) <> "" And Range("C" & li) <> "" Then
Application.EnableEvents = False
Range("A" & li) = Range("C" & li) / Range("B" & li)
Application.EnableEvents = True
End If

' A & C renseignées, B?
If Range("A" & li) <> "" And Range("C" & li) <> "" Then
Application.EnableEvents = False
Range("B" & li) = Range("C" & li) / Range("A" & li)
If Range("B" & li) - Int(Range("B" & li)) > 0 Then
Range("B" & li).NumberFormat = "0.0#"
Else
Range("B" & li).NumberFormat = "General"

End If
Application.EnableEvents = True
End If

' A & B renseignées, C?
If Range("A" & li) <> "" And Range("B" & li) <> "" Then
Application.EnableEvents = False
Range("C" & li) = Range("A" & li) * Range("B" & li)
coul
Application.EnableEvents = True
End If

End Sub


Mais le calcul reste encore à paufiner.

Par exempe, si je veux corriger une erreur et revenir sur une fausse
sasie, ca se fige, et il ne fait rien.

Quelqu'un peut m'aider ?

Merci d'avance.
Avatar
Apitos
J'ai ce code :

Option Explicit
Dim li&

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
li = Target.Row
If li > 9 Or li = 1 Then Exit Sub
MsgBox "A=" & Range("A" & li) & " B=" & Range("B" & li) & " C=" &
Range("C" & li)

' C & B renseignées, A?
If Range("B" & li) <> "" And Range("C" & li) <> "" Then
Application.EnableEvents = False
Range("A" & li) = Range("C" & li) / Range("B" & li)
Application.EnableEvents = True
End If

' A & C renseignées, B?
If Range("A" & li) <> "" And Range("C" & li) <> "" Then
Application.EnableEvents = False
Range("B" & li) = Range("C" & li) / Range("A" & li)
If Range("B" & li) - Int(Range("B" & li)) > 0 Then
Range("B" & li).NumberFormat = "0.0#"
Else
Range("B" & li).NumberFormat = "General"

End If
Application.EnableEvents = True
End If

' A & B renseignées, C?
If Range("A" & li) <> "" And Range("B" & li) <> "" Then
Application.EnableEvents = False
Range("C" & li) = Range("A" & li) * Range("B" & li)
coul
Application.EnableEvents = True
End If

End Sub


Mais le calcul reste encore à paufiner.

Par exempe, si je veux corriger une erreur et revenir sur une fausse
sasie, ca se fige, et il ne fait rien.

Quelqu'un peut m'aider ?

Merci d'avance.
Avatar
Philippe.R
Bonjour,
Lorsque tu reviens pour corriger une saisie, par exemple en C, que faut il
considérer, qu'on recherchait A ou B par calcul ?
Le plus simple avec le code que tu publies serait d'effacer au moins deux
valeurs (dont celle à calculer) avant de ressaisir la bonne valeur.
--
http://www.excelabo.net/mpfe/connexion.php
http://dj.joss.free.fr/trombine.htm
Avec plaisir
Philippe.R
"Apitos" a écrit dans le message de
news:
J'ai ce code :

Option Explicit
Dim li&

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
li = Target.Row
If li > 9 Or li = 1 Then Exit Sub
MsgBox "A=" & Range("A" & li) & " B=" & Range("B" & li) & " C=" &
Range("C" & li)

' C & B renseignées, A?
If Range("B" & li) <> "" And Range("C" & li) <> "" Then
Application.EnableEvents = False
Range("A" & li) = Range("C" & li) / Range("B" & li)
Application.EnableEvents = True
End If

' A & C renseignées, B?
If Range("A" & li) <> "" And Range("C" & li) <> "" Then
Application.EnableEvents = False
Range("B" & li) = Range("C" & li) / Range("A" & li)
If Range("B" & li) - Int(Range("B" & li)) > 0 Then
Range("B" & li).NumberFormat = "0.0#"
Else
Range("B" & li).NumberFormat = "General"

End If
Application.EnableEvents = True
End If

' A & B renseignées, C?
If Range("A" & li) <> "" And Range("B" & li) <> "" Then
Application.EnableEvents = False
Range("C" & li) = Range("A" & li) * Range("B" & li)
coul
Application.EnableEvents = True
End If

End Sub


Mais le calcul reste encore à paufiner.

Par exempe, si je veux corriger une erreur et revenir sur une fausse
sasie, ca se fige, et il ne fait rien.

Quelqu'un peut m'aider ?

Merci d'avance.
Avatar
Apitos
Bonjour,

Lorsque tu reviens pour corriger une saisie, par exemple en C, que faut il
considérer, qu'on recherchait A ou B par calcul ?


C'est pour calculer B, bien sur si A est connue

Si on veut calculer A il faut effacer egalement B

Le plus simple avec le code que tu publies serait d'effacer au moins deux
valeurs (dont celle à calculer) avant de ressaisir la bonne valeur.


Si on veut calculer A on doit effacer B et C

Quand on rectifie A, les deux autres cellules B & C s'effaceront
automatiquement. On devra ressaisir ensuite B et C

Merci.

1 2