remplacer . PAR , par macro

EMMANUEL

XLDnaute Junior
Bonjour
je suis débutant en vba
et j'ai un problème à vous soumettre

Nous avons des extractions textes de montant que nous convertissons par edition remplacer . par ,

Et je voudrais automatiser
Seulement j'ai utilisé l'enregistreur automatique.. CELA FONCTIONNE mais pas à chaque fois
ex : 1000.00 doit devenir 1000,00 et 150.0015 doit devenir 150,0015

J'ai l'impression qu'excel associe la virgule au séparateur de millier...

Vous trouverez ci-joint le fichier

merci d'avance :) [file name=POINT.zip size=6827]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/POINT.zip[/file]
 

Pièces jointes

  • POINT.zip
    6.7 KB · Affichages: 17
  • POINT.zip
    6.7 KB · Affichages: 13
  • POINT.zip
    6.7 KB · Affichages: 12

Creepy

XLDnaute Accro
Bonjour le Forum, Emmanuel,

Pourrais tu mettre en PJ un exemple avec plusieurs chiffres sous la forme 150.00.

Et si j'ai bien compris tu veux remplacer uniquement le point des décimales par une virgule et laisser le point du séparateur des milliers intact ?

@+

Creepy
 

Hellboy

XLDnaute Accro
re

en fait, je n'obtiens pas la même chose que toi.

en excel avec


            Colonne E
            Ligne 1
=CNUM(SUBSTITUE(A1,'.',','))

J'obtiens 152585.

alors ??? difficile a diagnostiquer
 

EMMANUEL

XLDnaute Junior
Bonsoir à tous, ma macro pour un chiffre avec plusieurs décimales par exemple :150.00045

affiche pour résultat 15 000 045

la virgule devient un séparateur de millier

effectivement la formule de Stapple1600
CNUM(SUBSTITUE(A1;'.';',')) FONCTIONNE mais en vba ???

Merci aussi à Hellboy


si quelqu'un pourrait nous aider???
:whistle:
 

Staple1600

XLDnaute Barbatruc
Bonjour

Effectivement ca semble fonctionner
Dim c As Range
For Each c In ActiveSheet.UsedRange
c.Value = Val(c.Value)
Next c

Moi j'étais parti sur

Dim c As Range
For Each c In ActiveSheet.UsedRange
c.Value = Val(Application.WorksheetFunction.Substitute(c.Value, '.', ','))
Next c

ce qui arrondit
 

Hellboy

XLDnaute Accro
re a tous

Bon je crois que cette fois c'est la bonne. L'essayez c'est l'adopter ! :)


Dim rngCell        As Range
With ActiveSheet
        .UsedRange.NumberFormat = '@'
       
For Each rngCell In .UsedRange
                rngCell.Value =
CStr(Replace(rngCell.Value, '.', ','))
       
Next rngCell
End With

a+
 

myDearFriend!

XLDnaute Barbatruc
Bonjour le fil,

Staple1600, si tu tentes une fonction Substitute(Valeur, '.', ',')) avant la fonction Val(), tu ne peux qu'obtenir une valeur numérique tronquée de sa partie décimale (d'où l'arrondi dont tu parles). En effet, la fonction Val() ne reconnait que le point comme séparateur décimal, donc si tu transformes le point en virgule avant de convertir...

Comme je le proposais plus haut, je pense que la procédure ci-dessous devrait convenir à EMMANUEL :
Sub ConversionTxtNum()
Dim C As Range
      For Each C In ActiveSheet.UsedRange.SpecialCells(2, 2)
            C.Value = Val(C.Value)
      Next C
End Sub
Cordialement,

PS : Hellboy, ta procédure fonctionne bien... mais sauf erreur de ma part, il me semble que l'objectif d'Emmanuel est de convertir ses valeurs 'texte' (reconnaissables à leur alignement à gauche de la cellule) en véritables valeurs numériques (alignées à droite de la cellule)...
 

Hellboy

XLDnaute Accro
re a tous

PS : Hellboy, ta procédure fonctionne bien... mais sauf erreur de ma part, il me semble que l'objectif
d'Emmanuel est de convertir ses valeurs \\'texte\\' (reconnaissables à leur alignement à gauche de la
cellule) en véritables valeurs numériques (alignées à droite de la cellule)...

En fait, je ne pense pas que l'enlignement des valeurs (original en texte) et la valeur transformer (reconnues Numériquement) étais la préocupation principale d'Emmanuel. Je dirais même que maintnant il a le choix des deux.
 

EMMANUEL

XLDnaute Junior
Bonsoir Mydearfriend, Hellboy et Staple1600

la formule de Mydearfriend me convient....

Seulement si je veut sélectionner qu'une ou plusieurs colonnes données... car sur la feuille je peut avoir des colonnes avec uniquement du texte (à ne pas convertir)!
:unsure:
 

myDearFriend!

XLDnaute Barbatruc
Re Emmanuel,

Si tu veux pouvoir limiter l'effet de la procédure à certaines colonnes uniquement (par exemple, uniquement les colonnes B à E et H à I) :
Sub ConversionTxtNum()
Dim C As Range
      For Each C In Application.Intersect(ActiveSheet.UsedRange.SpecialCells(2, 2),Range('B:E,H:I'))
            C.Value = Val(C.Value)
      Next C
End Sub
Cela dit, je pense qu'il conviendrait mieux d'utiliser la solution globale ci-dessous qui ne convertira que les valeurs potentiellement numériques :
Sub ConversionTxtNum()
Dim C As Range
      For Each C In ActiveSheet.UsedRange.SpecialCells(2, 2)
            If Val(C.Value) <> 0 Then
                  C.Value = Val(C.Value)
            End If
      Next C
End Sub
On peut bien sûr, faire aussi un mélange des deux...

Cordialement,
 

Discussions similaires

Réponses
34
Affichages
4 K
  • Résolu(e)
Microsoft 365 Macro VBA
Réponses
16
Affichages
3 K

Statistiques des forums

Discussions
312 228
Messages
2 086 420
Membres
103 205
dernier inscrit
zch