Pour les pros du VBA - Si cellule est %

2test.xlsx (24.13 Ko)
2test.xlsx (24.13 Ko)

Hello à tous ,

Voila ce que je cherche à faire :

Dans une cellule "Réduction" si je rentre un nombre en pourcentage cela calcule le % de réduction et remplace le % en question par un nombre de type "-100€" qui est = à la ristourne calculée en euros

Si je rentre un nombre au format nombre ou monétaire et bien aucun changement.

Si on peut rajouter l'obligation d'avoir un nombre négatif qui commence par "-" ce serait le top

Ci jopint fichier exemple.

Voilà merci d'avance à ceux qui prendront le temps de proposer un pti bout de code

Nico

Bonjour,

une proposition, détecte que c'est un % si la valeur introduite est <1 ce qui est toujours le cas pour des réductions de 0 à 100%

14test-nico44044.xlsm (15.06 Ko)

Hello,

Je peux pas vraiment ouvrir ton excel (Politique du réseau d'entreprise), mais ton problème à l'air plutôt simple.

Sub Calcul_reduc()

Dim Prix as Double, Reduc as double, PrixFinal as Double

Prix = Cells(Ligne_de_la_cellule_prix, Colonne_de_la_cellule_prix)

If Left(Cells(Ligne_de_la_cellule_reduc, Colonne_de_la_cellule_reduc), 1) <> "-" Then

Reduc = Cells(Ligne_de_la_cellule_reduc, Colonne_de_la_cellule_reduc)

PrixFinal = Prix * Reduc / 100

Cells(Ligne_de_la_cellule_reduc, Colonne_de_la_cellule_reduc).value = "-" & PrixFinal

End if

End Sub

Du as juste à créer une macro, insérer le code à l'intérieur et biensur adapté les colonnes/lignes ! Tu peux même lié la procédure "Calcul_reduc" à un bouton que tu placerai près de ton tableau, pour une meilleur ergonomie

Fait moi un retour !

Bonjour,

une proposition, détecte que c'est un % si la valeur introduite est <1 ce qui est toujours le cas pour des réductions de 0 à 100%

H20

Merci ca marche nickel

Peux-tu juste m'expliquer le pourquoi du "<>3" ?

En gros comment tu définis ton target ? au cas ou si je veux changer de cellule ...

<> 3 veux dire Différent de 3 ce qui fait référence à la colonne de la variable Target, il as du faire ça car il son code se lance au changement de la feuille

<> 3 veux dire Différent de 3

Ha ok

est-ce possible de le faire sous cette forme ?

Private Sub Worksheet_Change(ByVal Target As Range)

If Range("c3").Value < 1 Then

Application.EnableEvents = False

Range("c3").Value = Range("c3").Value * Range("c3").Value.Offset(, -1)

Application.EnableEvents = True

End If

End Sub

Ou meme mieux de definir le target uniquement dans une plage par ex de C3 à C10 pour eviter que ca prenne toute la colonne ?

Son code est très bien, après je vois pas trop l'intérêt si tu ne le comprend pas, fait quelque chose qui sera allier compréhension et fonctionnalité, désolé de cette réponse mais je ne suis pas développeur spécialisé dans VBA mais plus dans l'algorithmie

Ceci dit le paramètre Range n'as plus sont utilité du devrai le retiré de l'entète de la procèdure :3

En fait je comprend son code mais j'ai juste essayé de le réadapter de maniere plus adéquate à mes besoins.

J'ai juste une erreur sur cette ligne

Range("c3").Value = Range("c3").Value * Range("c3").Value.Offset(, -1)

Quel genre d'erreur ? Ecris la nous.

Déjà un Value avant un Offset ça pique les yeux ! Pourquoi faire un Offset si tu utilises un Range ? Pointe directement la bonne cellule avec ton range :O

Quel genre d'erreur ? Ecris la nous.

Déjà un Value avant un Offset ça pique les yeux !

Tiagorimb

Je debute en VBA donc un peu d'indulgence please

Pas d'erreur particuliere ca me declenche le debogueur dans excel et ca me surligne cette ligne la en jaune . mais ca vient surement du fait qu'on met pas un offset et un value cote a cote ...

Du coup si t'as la correction je suis preneur

haha t'inquiètes ! Pour ta connaissance, le .Value va renvoyer une valeur, tu essaye ensuite d'avoir la colonne avant cette valeur, voila l'erreur.

Offset va visé une cellule, qui as une ligne ou une colonne différence de l'objet pointé, la tu veux la cellule qui est à une colonne de moins ?

Dans ce cas :

Range("c3").Value = Range("c3").Value * Range("b3").Value

Si j'ai mal compris réexplique moi !

haha t'inquiètes ! Pour ta connaissance, le .Value va renvoyer une valeur, tu essaye ensuite d'avoir la colonne avant cette valeur, voila l'erreur.

Offset va visé une cellule, qui as une ligne ou une colonne différence de l'objet pointé, la tu veux la cellule qui est à une colonne de moins ?

Dans ce cas :

Range("c3").Value = Range("c3").Value * Range("b3").Value

Si j'ai mal compris réexplique moi !

Ha ok je comprend la logique ! merci de l'explication

pour info je suis arrivé a mes fin avec ceci :

Private Sub Worksheet_Change(ByVal Target As Range)

For i = 3 To 5

If Target.Address = "$C$" & i Then

If Target < 1 Then

Application.EnableEvents = False

Target = Target * Target.Offset(, -1)

Target.NumberFormat = "0.00$"

Application.EnableEvents = True

End If

End If

Next

End Sub

Si ca peut servir a quelqu'un ... Un grand merci à vous tous !!

Nico

bonjour,

macro adaptée pour le range ("C3:C10")

Rechercher des sujets similaires à "pros vba"