remplacer . PAR , par macro

  • Initiateur de la discussion Initiateur de la discussion EMMANUEL
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

E

EMMANUEL

Guest
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

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
 
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:
 
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
 
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+
 
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)...
 
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.
 
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:
 
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,
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

E
Réponses
7
Affichages
2 K
excel12
E
M
Réponses
0
Affichages
1 K
M
K
Réponses
15
Affichages
21 K
karstou
K
G
Réponses
9
Affichages
18 K
guillaume3687irish
G
W
Réponses
1
Affichages
668
W
Z
Réponses
2
Affichages
1 K
P
Réponses
2
Affichages
6 K
plombiero
P
Réponses
1
Affichages
2 K
Compte Supprimé 979
C
T
Réponses
5
Affichages
3 K
Tintin
T
C
Réponses
6
Affichages
3 K
Coucou
C
Retour