Modification de la valeur d'une cellule modifiable
Bonjour à tous,
Je suis débutant en VBA, je m'y suis mis il y a un mois lors de la création d'un tableau de calcul pour mon entreprise.
Jusque la j'ai réussi à faire ce que je voulais, entre autre grâce aux nombreuses ressources que j'ai pu trouver sur votre forum. (Affichage de certaines lignes en fonction d'une valeur, modification du format de cellules en fonction d'une autre, etc...)
Aujourd'hui je sèche, voici mon problème :
La cellule C80 contient une valeur en tonne que j'indique manuellement. (3.0 T par exemple)
La cellule C79 contient une liste de choix. (Oui ou non)
J'aimerais que si C79 indique "oui", alors la valeur de C80 soit multipliée par 0.9, ou si C79 indique "non", alors la valeur de C80 reste normale. (3.0 T)
Voici ce que j'ai fais pour le moment.
Code:
1 2 3 4 5 6 7 8 9
| Dim VAL3
VAL3 = Sheets("Analyse technique").Range("C79").Value
If VAL3 = "Oui" Then
Range("C80").Value = Range("C80").Value * 0.9
ElseIf VAL3 = "Non" Then
Range("C80").Value = Range("C80").Value
End If |
Cela ne fonctionne pas car la multiplication tourne en boucle et ne s'arrête pas, ce qui fini par indiquer un message d'erreur. Je n'ai pas trouvé d'informations concernant le format des multiplications en VBA, j'ai donc fait comme pour excel. (Ce qui n'est pas forcement une bonne idée ^^)
Merci d'avance de votre aide, n'hésitez pas à me demander plus de détails si je n'ai pas été suffisamment clair.
Modification de la valeur d'une cellule modifiable
Bonjour,
Malheureusement pour toi ta macro est d’une efficacité redoutable.
Si a=1=> a=a* 0.9=0.9 => 0.81 => 0.729 => 0.6561
En revanche a=1 b= a* 0.9=0.9 donnera toujours le même résultat.
Maintenant tu n’as pas besoin dans ton exemple d’un ElseIf si c’est pas oui c’est forcément non
Code:
1 2 3
| If VAL3 = "Oui" Then
Else
End if |
De plus toujours dans ton exemple a=a n’est pas utile puisque a ne change pas donc un if et end if pas de else.
Donc en conclusion, tu as besoin de deux cellules une pour la valeur initiale et l’autre pour la valeur calculées.
En conséquence tu n'as besoin que d'une simple formule :
Code:
=SI(B1="oui";A1*0,9;A1)
Cordialement.
J'ai bien l'impression que ce que je demande est impossible
Si tu as la possibilité de retrouver la valeur initial par calcule, colle le résultat dans une cellule non visible par l’utilisateur et applique la formule que je t’es donné.
Code:
1 2 3
| Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ActiveSheet.Cells(Target.Row, 255) = ValeurInitiale
End Sub |
Si tu as la possibilité de retrouver la valeur initial par calcule, colle le résultat dans une cellule non vis
Code:
1 2 3 4 5
| Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ActiveSheet.Cells(Target.Row, 255) = ValeurInitiale
Cells(Target.Row, 2).FormulaR1C1 = "=IF(RC[-1]=""oui"",RC[253]*0.9,RC[-2])"
End Sub |
Grâce à toi gFZT82 ça fonctionne presque !
Je transforme la cellule en string
Code:
1 2 3 4 5 6
| If VAL3 = "Oui" And TypeName(Range("C80").Value) <> "String" Then
Range("C80") = "'" & Range("C80").Value * 0.9
Range("C80").HorizontalAlignment = xlRight
elseif VAL3 = "non" then
Range("C80")=val( Range("C80"))
End If |
peux tu me dire à quoi sert la fonction String et comment elle fonctionne ?
String est un type de variable :
Dim toto as string
Dans cette formule :
Code:
Range("C80") = "'" & Range("C80").Value * 0.9
Je concatène une chaine de texte avec le résultat du calcul, ce qui transforme le contenu de la cellule en string (Texte).
Note que les ' ne sont pas visible s’ils sont en premier caractère.
Code:
If VAL3 = "Oui" And TypeName(Range("C80").Value) <> "String" Then
Dans le test je vérifie comme toi si tonne est à oui mais en plus si le type de valeur contenu dans la cellule est un string (texte).