Macro événementielle pour multiplier le nombre rentré par mille

Wily

XLDnaute Junior
Bonjour à tous

J'essaye d'écrire une macro événementielle qui me permette de multiplier par mille tous les nombre que je rentre dans la colonne B

Exemple : je saisie en B2 50, la somme une fois la saisie validée devient 50 000

Je pensais cela tous simple, mais je butte honteusement
Si quelqu'un peut m'aider

A+
 

gilbert_RGI

XLDnaute Barbatruc
Re : Macro événementielle pour multiplier le nombre rentré par mille

Bonjour,

En C2 = b2*1000

Peut-être ?

ou comme ceci

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column <> 2 Then Exit Sub
    Application.EnableEvents = False
    Target = Target * 1000
    Application.EnableEvents = True
End Sub
 
Dernière édition:

Wily

XLDnaute Junior
Re : Macro événementielle pour multiplier le nombre rentré par mille

Bonsoir

Merci Gilbert
Cela correspond à ce que j'avais à peu près trouvé
Mais j'ai le même problème, cela ne fonctionne pas tout le temps

Je viens de comprendre pourquoi
Mais par contre je ne connais pas la solution

Si j'efface plusieurs cellules en B, la macro plante
Ensuite elle ne fonctionne plus

A+
 

Pièces jointes

  • Test.xlsm
    12.5 KB · Affichages: 32
  • Test.xlsm
    12.5 KB · Affichages: 25

Victor21

XLDnaute Barbatruc
Re : Macro événementielle pour multiplier le nombre rentré par mille

Bonjour.

Essayez :

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    If Target.Column = 2 And Target.Count = 1 Then
        Target = Target * 1000
    End If
    Application.EnableEvents = True
End Sub
 

Wily

XLDnaute Junior
Re : Macro événementielle pour multiplier le nombre rentré par mille

Bonsoir Victor

Merci bien, il fallait y penser !

J'ai modifié un peu le code pour éviter l'apparition d'un zéro lorsque l'on efface une seule cellule
Tout semble fonctionner parfaitement cette fois

Code:
Private Sub Worksheet_Change(ByVal Target As Range)

    Application.EnableEvents = False
    If Target.Column = 2 And Target.Count = 1 Then
        If Target.Value > 0 Then Target = Target * 1000
    End If
    Application.EnableEvents = True
End Sub

A+
 

job75

XLDnaute Barbatruc
Re : Macro événementielle pour multiplier le nombre rentré par mille

Bonsoir Wily, Gilbert, Patrick,

Tout semble fonctionner parfaitement cette fois

Ah bon, entrez le texte aaa en colonne B pour voir...

Et il est mieux de gérer aussi les entrées multiples :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Set Target = Intersect(Target, [B:B], Me.UsedRange)
If Target Is Nothing Then Exit Sub
Application.EnableEvents = False
For Each Target In Target 'permet les entrées multiples
  If IsNumeric(CStr(Target)) Then Target = Target * 1000
Next
Application.EnableEvents = True
End Sub
A+
 

Wily

XLDnaute Junior
Re : Macro événementielle pour multiplier le nombre rentré par mille

Bonjour Job, Gilbert, Victor et à tout le Forum

Merci Job pour ton aide
Ah bon, entrez le texte aaa en colonne B pour voir...
Quand je rentre "aaa", il ne se passe rien

Mais il est vrai que si j'avais laissé
Code:
Target = Target * 1000
cela planterait avec "aaa"

avec ce code
Code:
If Target.Value > 0 And Target.Value < 1000 Then Target = Target * 1000
Cale fonctionne sans problème.


Mais je suis toujours intéressé par les bons conseils
et ton code est certainement plus sûr.


Bien vu avec le code
Code:
If IsNumeric(CStr(Target))
Les valeurs textes sont ainsi traitées.


Pour conserver mon test sur les nombres plus grand que 999, j'ai réintégré mon code ainsi
Code:
If IsNumeric(CStr(Target)) And Target.Value < 1000 Then Target = Target * 1000


Peux-tu m'expliquer ton code ?
Code:
Me.UsedRange
et pourquoi emploie-tu ?
Code:
Set Target = Intersect(Target


Merci d'avance
A+
 
Dernière édition:

Wily

XLDnaute Junior
Re : Macro événementielle pour multiplier le nombre rentré par mille

Bonjour Job

Je renouvelle mon message d'hier matin

Peux-tu m'expliquer ton code ?
Code:
Me.UsedRange

et pourquoi emploie-tu ?
Code:
Set Target = Intersect(Target

Si tu as un peu de temps
Juste pour que je comprenne bien ta macro
et que je puisse éventuellement réutiliser cette instruction dans d'autres circonstances

Merci d'avance
A+
 

job75

XLDnaute Barbatruc
Re : Macro événementielle pour multiplier le nombre rentré par mille

Bonsoir Wily,

Me.UsedRange permet de limiter la colonne B, sans cela toutes les cellules de la colonne sont traitées quand on l'efface dans sa totalité.

CStr(Target) c'est uniquement pour que les cellules vides ne soient pas considérées comme des nombres (0).

Ce que je viens de dire est facile à tester.

Bonne nuit.
 

Wily

XLDnaute Junior
Re : Macro événementielle pour multiplier le nombre rentré par mille

Bonjour Job

Me.UsedRange permet de limiter la colonne B, sans cela toutes les cellules de la colonne sont traitées quand on l'efface dans sa totalité.

Merci pour cette explication, c'est un code qui me parait extrêmement important.

Tu ne m'as pas répondu pour Set, j'ai bien trouvé sur le Net plusieurs macros qui utilisent ce code, mais sans vraiment comprendre l'avantage de ce code, mon gros guide n'en fait même pas état.
Je devrais bien finir par trouvé un jour un espèce de tuto qui traite ce cette commande.
Jusqu'ici cela ne semble pas facile à trouver, peut-être que cette commande est si essentielle que tout programmeur VBA doit en connaitre son utilisation !

Merci encore pour ta macro et pour les explications qui sont très important pour pouvoir progresser....

A+
 

job75

XLDnaute Barbatruc
Re : Macro événementielle pour multiplier le nombre rentré par mille

Bonjour Wily,

Tu ne m'as pas répondu pour Set, j'ai bien trouvé sur le Net plusieurs macros qui utilisent ce code, mais sans vraiment comprendre l'avantage de ce code, mon gros guide n'en fait même pas état.

L'instruction Set est obligatoire quand on veut définir une variable objet.

Les Range, les Sheets (feuilles), les Workbooks (classeurs) sont des objets.

A+
 

Discussions similaires

Réponses
5
Affichages
344