coefficient

E

eric

Guest
je recherche comment ecrire un nombre dans une cellule,
ce nombre doit être automatiquement multiplier par un coefficient que j'aurais mis dans une autre cellule.
quelque chose de très simple
avec mes remerciements
exemple: prix unitaire x par coef
 
@

@+Thierry

Guest
Salut Eric

Hou laa ... comme quand je m'appuie fort sur le foie .... depuis les fêtes...

....Je me suis dit hop !! et ben non !!!! j'ai un truc bizarre ...
j'ai essayé çà en évènementielle (of course vu ce qu'Eric souhaite)

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim Coef As Currency
On Error GoTo fin
Coef = Range("a1").Value
If Range("a1") = "" Then Exit Sub
If Not Application.Intersect(Target, Range("B:B")) Is Nothing Then
Target = Target.Value * Coef
End If
fin:
End Sub

Si j'ai 1 en "A1" no souci... je tape en colonne "B" 1 chiffre bien multiplié par 1 ce donne exactement le même chiffre !! non ce n'est pas un expérience "Belge" (je suis Belge même si je vis dans le Sud de la France), mais c'est que j'ai un délire quand je change la valeur en 2 pour "A1"... vous pouvez essayer...

Il y a quelque chose qui m'échappe, ce doit être la 1664 de cette aprèm... (en les !) lol

Si quelqu'un voit comment régler ce truc simple ......
@+Thierry
 
P

pyrof

Guest
Bonjour;

la routine Worksheet_Change s'exécute à chaque changement de la valeur de la cellule

à la fin de cette routine tu change la valeur en la multiplyant par le coef, du fait de changer cette valeur la macro Worksheet_Change s'execute à nouveau.

Une question que je n'ai pas de réponce pourquoi s'arrete t-il, je pense qu'il y a une valeur maxi pour excel


A+
 
@

@+Thierry

Guest
Re: Calcul coefficient automatique avec évènement WorkSheet_Change

Bonjour Pyrof, Eric et le Forum

Ben oui, tu m'ouvres les yeux !!! (l'apéro du Dimanche aprèm => Pas Bon ! lol)

Tu as parfaitement raison, faut empécher Excel de recalculer sur l'évènement Change.... Par Conséquent voici la solution !!

Il faire comme ceci, c'est simple comme bonjour, fallait juste y penser !

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim Coef As Currency
On Error GoTo fin
Coef = Range("a1").Value
If Range("a1") = "" Then Exit Sub
If Not Application.Intersect(Target, Range("B:B")) Is Nothing Then
Application.EnableEvents = False
Target = Target.Value * Coef
End If
Application.EnableEvents = True
fin:
End Sub

Merci de ta participation, tu m'as mis la Puce à l'oreille !!!

Bonne Journée
@+Thierry
 
T

Ti

Guest
Voilà la macro modifiée pour qu'elle fonctionne correctement :

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim Coef As Double
If Application.Intersect(Target, Range("B:B")) Is Nothing Then Exit Sub
If Range("A1").Value = "" Or Not IsNumeric(Range("A1").Value) Then Exit Sub
Coef = Range("A1").Value

Application.EnableEvents = False
Target = Target.Value * Coef
Application.EnableEvents = True
End Sub

Cependant, je ne crois pas qu'il faille indiquer cette piste. Je ne sais pas si Eric débute en Excel, mais c'est le propre des débutants que de vouloir que le nombre qu'on inscrit dans une cellule soit automatiquement changée suite à un calcul qui s'appliquerait à elle-même.
Il me semble tout de même plus simple de considérer qu'on peut mettre une valeur dans une cellule et que cette valeur sera reprise par une autre cellule qui effectuera le calcul (comme c'est la règle généralement). Excel contient un grand nombre de lignes et de colonnes, c'est fait pour ça, inutile de se casser la tête avec des macros événementielles chaque fois qu'on le peut.
 
T

Ti

Guest
oups, j'ai fait sauter une condition, donc pour être précis voici le truc corrigé :

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim Coef As Double
If Application.Intersect(Target, Range("B:B")) Is Nothing Then Exit Sub
If Range("A1").Value = "" Or Not IsNumeric(Range("A1").Value) _
Or Not IsNumeric(Target.Value) Then Exit Sub

Coef = Range("A1").Value
Application.EnableEvents = False
Target.Value = Target.Value * Coef
Application.EnableEvents = True
End Sub
 
@

@+Thierry

Guest
Bonjour Ti,

Tu as raison pour l'histoire des débutants qui voudraient que tout se fasse dans Excel sur une Seule Cellule alors qu'ils en ont 1 6777 216 par feuille et que le nombre de feuilles est limité à la puissance du PC et de la Mémoire dispo...

STP Ti, Juste pour ma gouverne, les deux Types de déclarations de Variable ayant la même taille de storage, si j'utilise "Currency" mes limites seront-elles les Quatres Décimales sous la virgule, où y a t'il un autre blème à prévoir par rapport à "Double" dans un cas de figure comme celui-ci ?

(J'avoue que j'hésite souvent dans le choix entre les deux, et me disant que je n'ai pas besoin "Double Précision dans la Virgule Flottante" je donne la préférence à Currency pour laquelle la définition dans l'aide me semble plus claire !!)

Merci d'avance Ti
Bonne Journée
@+Thierry

(PS Bien Vu le "If Not IsNumeric(Target.Value) then exit sub" et moins tordu que mon ErrorHandler !!)
 
T

Ti

Guest
En fait le type Double est le type de données numériques par défaut d'Excel, c'est pourquoi je l'ai également utilisé ici puisqu'à priori on ne sait pas à quoi seront destinées ces valeurs.
Par contre, si on doit calculer des valeurs monétaires en passant par du VBA, alors là on a intérêt à utiliser le format Currency.
 
A

andré

Guest
Salut à tous,

Comme d'habitude, je suis le dernier.

Si :
A1 : coëfficient
B1 : nombre

Alors :
A1 : copier
B1 : coller spécial multiplier (ou diviser, ...)

Sinon :
Système Thierry ou Ti (bien le bonjour à tous deux).

André.
 
E

eric

Guest
salut à tous,
avec mes remerciements pour ces renseignements
oui débutant mai il y a pire que moi au boulot,
alors il faut faire simple en étant compliqué,
et les as sa sert à quoi?
et j' ai d'autre trucs.
encore merci éric
 

Discussions similaires

Statistiques des forums

Discussions
314 020
Messages
2 104 663
Membres
109 097
dernier inscrit
Guismow30