Suppression virgule en VBA

Le
Loïc
Bonjour à tous,

Je cherche une solution pour supprimer automatiquement la virgule lors de la
saisie d'un nombre.

Exemples :

25,22 donne 2522
25,00 donne 2500
25 donne 2500

J'ai déjà la procédure événementielle pour la modification automatique lors
de la saisie :

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, Range("H2:H10")) Is Nothing Then
etc..

mais il manque la conversion en VBA de ce qui me semble me convenir
=ENT(A1*100) afin de garder les 2 chiffres après la virgule.

Merci beaucoup.
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Philippe.R
Le #1330218
Bonsoir Loïc,
Ces quelques lignes, directement tirées de l'enregistreur :

ActiveCell.Replace What:=",", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:úlse, SearchFormat:úlse, _
ReplaceFormat:úlse
Cells.Find(What:=",", After:¬tiveCell, LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:úlse _
, SearchFormat:úlse).Activate

conviendraient elles ,
--
Amicales Salutations
Retirer A_S_ pour répondre.
XL 97 / 2000 / 2002

"Loïc" news:c70nb1$9md$
Bonjour à tous,

Je cherche une solution pour supprimer automatiquement la virgule lors de la
saisie d'un nombre.

Exemples :

25,22 donne 2522
25,00 donne 2500
25 donne 2500

J'ai déjà la procédure événementielle pour la modification automatique lors
de la saisie :

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, Range("H2:H10")) Is Nothing Then
etc..

mais il manque la conversion en VBA de ce qui me semble me convenir
=ENT(A1*100) afin de garder les 2 chiffres après la virgule.

Merci beaucoup.



michdenis
Le #1330217
Bonjour Loïc,

En supposant que tu veuilles enlever la virgule(séparateur décimale) au fur et à mesure que tu entres tes données dans
la plage H2:H10 ... au besoin, modifie la plage de cellules ....


'-----------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rg As Range

Set Rg = Intersect(Target, Range("H2:H10"))
If Not Rg Is Nothing Then
For Each c In Rg
Application.EnableEvents = False
c.Value = Application.Substitute(c, ".", "")
Application.EnableEvents = True
Next
End If
Set Rg = Nothing
End Sub
'-----------------------


Salutations!


"Loïc" Bonjour à tous,

Je cherche une solution pour supprimer automatiquement la virgule lors de la
saisie d'un nombre.

Exemples :

25,22 donne 2522
25,00 donne 2500
25 donne 2500

J'ai déjà la procédure événementielle pour la modification automatique lors
de la saisie :

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, Range("H2:H10")) Is Nothing Then
etc..

mais il manque la conversion en VBA de ce qui me semble me convenir
=ENT(A1*100) afin de garder les 2 chiffres après la virgule.

Merci beaucoup.
Loïc
Le #1340182

En supposant que tu veuilles enlever la virgule(séparateur décimale) au
fur et à mesure que tu entres tes données dans

la plage H2:H10 ... au besoin, modifie la plage de cellules ....


'-----------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rg As Range

Set Rg = Intersect(Target, Range("H2:H10"))
If Not Rg Is Nothing Then
For Each c In Rg
Application.EnableEvents = False
c.Value = Application.Substitute(c, ".", "")
Application.EnableEvents = True
Next
End If
Set Rg = Nothing
End Sub
'-----------------------


Salutations!



C'est parfait !

Merci beaucoup.

Loïc
Le #1340181

Bonsoir Loïc,
Ces quelques lignes, directement tirées de l'enregistreur :

ActiveCell.Replace What:=",", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:úlse, SearchFormat:úlse, _
ReplaceFormat:úlse
Cells.Find(What:=",", After:¬tiveCell, LookIn:=xlFormulas, LookAt: _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:úlse _

, SearchFormat:úlse).Activate

conviendraient elles ,
--
Amicales Salutations
Retirer A_S_ pour répondre.
XL 97 / 2000 / 2002


Je vais tester cette solution également :o)

Merci beaucoup.

Le #1340178
-----Message d'origine-----
Bonjour à tous,

Je cherche une solution pour supprimer automatiquement la
virgule lors de la

saisie d'un nombre.

Exemples :

25,22 donne 2522
25,00 donne 2500
25 donne 2500

J'ai déjà la procédure événementielle pour la
modification automatique lors

de la saisie :

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, Range("H2:H10")) Is Nothing Then
etc..

mais il manque la conversion en VBA de ce qui me semble
me convenir

=ENT(A1*100) afin de garder les 2 chiffres après la
virgule.


Merci beaucoup.

.
salut
private sub ...()

Dim CL As Range, chiffres As String
For Each CL In Selection
chiffres = Trim(CL.Text)
If chiffres <> "" Then
If InStr(chiffres, ",") > 0 Then
chiffres = Replace(chiffres, ",", "")
End If
end sub
chiffres = nom de la plage de cellule
@+

Loïc
Le #1340143

Bonjour Loïc,

En supposant que tu veuilles enlever la virgule(séparateur décimale) au
fur et à mesure que tu entres tes données dans

la plage H2:H10 ... au besoin, modifie la plage de cellules ....


'-----------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rg As Range

Set Rg = Intersect(Target, Range("H2:H10"))
If Not Rg Is Nothing Then
For Each c In Rg
Application.EnableEvents = False
c.Value = Application.Substitute(c, ".", "")
Application.EnableEvents = True
Next
End If
Set Rg = Nothing
End Sub
'-----------------------


Salutations!


Re-bonjour,

J'utilise ta solution cependant je ne peux plus saisir les chiffres se
terminant en ,00 (ex: 25,00 me donne 25). C'est assez embetant car c'est
pour de l'export .csv et il me faut impérativement 2 chiffres pour les
décimales même si nulles.

Re-merci :o))

michdenis
Le #1340138
Bonjour Loïc,

Selon moi, la seule alternative, c'est que ta plage de cellule soit au format texte. et la procédure irait comme ceci :
(j'ai modifié seulement le séparateur décimale dans la formule de substitution)
'----------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rg As Range

Set Rg = Intersect(Target, Range("H2:H10"))
If Not Rg Is Nothing Then
For Each c In Rg
d = c.Value
Application.EnableEvents = False
c.Value = Application.Substitute(c, ",", "")
Application.EnableEvents = True
Next
End If
Set Rg = Nothing
End Sub
'----------------------------

En VBA, les zéros non significatifs d'un nombre n'apparaissent jamais lorsque l'on demande ce que la cellule contient.
Ça devient purement un jeu de devinettes !!!


L'autre alternative, est d'utiliser un textbox d'un formulaire ....


Salutations!




"Loïc"
Bonjour Loïc,

En supposant que tu veuilles enlever la virgule(séparateur décimale) au
fur et à mesure que tu entres tes données dans

la plage H2:H10 ... au besoin, modifie la plage de cellules ....


'-----------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rg As Range

Set Rg = Intersect(Target, Range("H2:H10"))
If Not Rg Is Nothing Then
For Each c In Rg
Application.EnableEvents = False
c.Value = Application.Substitute(c, ".", "")
Application.EnableEvents = True
Next
End If
Set Rg = Nothing
End Sub
'-----------------------


Salutations!


Re-bonjour,

J'utilise ta solution cependant je ne peux plus saisir les chiffres se
terminant en ,00 (ex: 25,00 me donne 25). C'est assez embetant car c'est
pour de l'export .csv et il me faut impérativement 2 chiffres pour les
décimales même si nulles.

Re-merci :o))

Loïc
Le #1331187

Bonjour Loïc,

Selon moi, la seule alternative, c'est que ta plage de cellule soit au
format texte. et la procédure irait comme ceci :

(j'ai modifié seulement le séparateur décimale dans la formule de
substitution)

'----------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rg As Range

Set Rg = Intersect(Target, Range("H2:H10"))
If Not Rg Is Nothing Then
For Each c In Rg
d = c.Value
Application.EnableEvents = False
c.Value = Application.Substitute(c, ",", "")
Application.EnableEvents = True
Next
End If
Set Rg = Nothing
End Sub
'----------------------------

En VBA, les zéros non significatifs d'un nombre n'apparaissent jamais
lorsque l'on demande ce que la cellule contient.

Ça devient purement un jeu de devinettes !!!


L'autre alternative, est d'utiliser un textbox d'un formulaire ....


Salutations!



Merci je vais essayer cela même si le format texte de la cellule m'embête un
peu.

J'ai également chercher une autre piste (assez tordue je dois l'avouer :o) )
en essayant de récupérer les décimales en vba puis faire un jeu de
conditions :

Si le nombre se termine par ",00" alors....

If Mid(c, 4, 2) = "" Then
c.Value = Application.Substitute(c, ".", "") & "00"
etc...

Ainsi je rajoute artificiellement les "00" à mon nombre ce qui tombe impec
pour mon export csv.

Le problème est que je n'ai rien trouvé en vba qui me permette de récupérer
de façon fiable les décimales d'un nombre.

Merci de ton aide.

PS : j'ai annulé mon précédent post par erreur - désolé :o(

docm
Le #1340128
Bonjour Loïc.
C'est une piste intéressante que de vouloir récupérer les décimales.
Voici une façon de récupérer les 2 premières décimales
par la formule c - Int(c) :
Gérard

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rg As Range

Set Rg = Intersect(Target, Range("H2:H10"))
If Not Rg Is Nothing Then
For Each c In Rg
Application.EnableEvents = False
If Not IsNumeric(c) Then
MsgBox c.Value & " n'est pas un nombre"
Else
If c = Int(c) Then 'Vérifie si c'est un nombre entier
c.Value = c * 100 'si oui ajouter 00
Else
'si non seules les 2 premières décimales sont conservées
c.Value = Int(c) * 100 + Format(c - Int(c), ".00") * 100
End If
End If
Application.EnableEvents = True
Next
End If
Set Rg = Nothing
End Sub

"Loïc" news:c737ib$32f$

Bonjour Loïc,

Selon moi, la seule alternative, c'est que ta plage de cellule soit au
format texte. et la procédure irait comme ceci :

(j'ai modifié seulement le séparateur décimale dans la formule de
substitution)

'----------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rg As Range

Set Rg = Intersect(Target, Range("H2:H10"))
If Not Rg Is Nothing Then
For Each c In Rg
d = c.Value
Application.EnableEvents = False
c.Value = Application.Substitute(c, ",", "")
Application.EnableEvents = True
Next
End If
Set Rg = Nothing
End Sub
'----------------------------

En VBA, les zéros non significatifs d'un nombre n'apparaissent jamais
lorsque l'on demande ce que la cellule contient.

Ça devient purement un jeu de devinettes !!!


L'autre alternative, est d'utiliser un textbox d'un formulaire ....


Salutations!



Merci je vais essayer cela même si le format texte de la cellule m'embête
un

peu.

J'ai également chercher une autre piste (assez tordue je dois l'avouer
:o) )

en essayant de récupérer les décimales en vba puis faire un jeu de
conditions :

Si le nombre se termine par ",00" alors....

If Mid(c, 4, 2) = "" Then
c.Value = Application.Substitute(c, ".", "") & "00"
etc...

Ainsi je rajoute artificiellement les "00" à mon nombre ce qui tombe impec
pour mon export csv.

Le problème est que je n'ai rien trouvé en vba qui me permette de
récupérer

de façon fiable les décimales d'un nombre.

Merci de ton aide.

PS : j'ai annulé mon précédent post par erreur - désolé :o(




Loïc
Le #1340105

Bonjour Loïc.
C'est une piste intéressante que de vouloir récupérer les décimales.
Voici une façon de récupérer les 2 premières décimales
par la formule c - Int(c) :
Gérard

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rg As Range

Set Rg = Intersect(Target, Range("H2:H10"))
If Not Rg Is Nothing Then
For Each c In Rg
Application.EnableEvents = False
If Not IsNumeric(c) Then
MsgBox c.Value & " n'est pas un nombre"
Else
If c = Int(c) Then 'Vérifie si c'est un nombre entier
c.Value = c * 100 'si oui ajouter 00
Else
'si non seules les 2 premières décimales sont conservées
c.Value = Int(c) * 100 + Format(c - Int(c), ".00") * 100
End If
End If
Application.EnableEvents = True
Next
End If
Set Rg = Nothing
End Sub


Merci infiniment cela convient parfaitement !!

Publicité
Poster une réponse
Anonyme