Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Suppression virgule en VBA

11 réponses
Avatar
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.

10 réponses

1 2
Avatar
Philippe.R
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" a écrit dans le message de
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.



Avatar
michdenis
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" a écrit dans le message de 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.
Avatar
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!



C'est parfait !

Merci beaucoup.

Avatar
Loïc

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.

Avatar
-----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
@+

Avatar
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))

Avatar
michdenis
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" a écrit dans le message de news:c72tva$go1$

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))

Avatar
Loïc

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(

Avatar
docm
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" wrote in message
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(




Avatar
Loïc

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 !!

1 2