Remplacer point par virgule sans l'option "Rechercher et Selectionner"

Bonjour

Je voudrais si possible remplacer tous les points du fichier joint par une virgule en utilisant des fonctions de remplacements, sans passer par le fameux raccourci "Ctrl + F".

Merci beaucoup !

40remplacer.xlsx (9.79 Ko)

bonjour,

via une fonction excel alors ?

à mettre en B2 et à tirer vers le bas

=SUBSTITUE(A2;".";",")

Bonjour Schmilblick, h2so4,

je te retourne ton fichier modifié :

22remplacer.xlsx (10.34 Ko)

ma formule est presque la même que celle d'h2so4 :

=--(SUBSTITUE(A2;".";","))

c'est au cas où tu dois faire des calculs dessus, car le retour de SUBSTITUE() est du texte.


dans le fichier, j'ai aussi mis une remarque importante concernant la précision !

dhany

Bonjour,

2 solutions :

=CNUM(SUBSTITUE(A2;".";","))
=SUBSTITUE(A2;".";",")*1

Note :

les 2 tirets est appelé double opérateur unaire.

Il convertit les valeurs logiques (VRAI/FAUX) issues d'une condition en valeurs numériques (1/0).

Voir aussi la fonction N().

Jean-Eric a écrit :

screen 1

copie d'écran de mon fichier joint (post d'hier à 21:31) :

screen 2

ah, ben j'suis rassuré : mon double opérateur unaire marche vraiment très bien ! (même encore mieux que c'que l'laisse supposer Jean‑Eric puisque mes résultats sont pas que des valeurs numériques 1 ou 0 mais des nombres avec 15 décimales, bien alignés à droite !)

dhany

Bonjour à vous tous par ici!

Je voudrais cette fois ci passer en sens inverse en remplaçant les virgules par des points .

J'ai donc essayer ceci en B2: =TEXTE(SUBSTITUE(A4;",";".");"hh:mm:ss.ss"), mais cela ne fonctionne pas.

pourriez-vous une fois de plus m'aider, svp ?

Merci !

8remplacer.xlsx (12.57 Ko)

Bonjour,

petite rectification concernant le fichier de mon post d'hier à 21:31 :

par rapport aux données d'A9 et A13, il faut 16 décimales (pas 15)

6remplacer.xlsx (10.36 Ko)
screen

dhany

Bonjour Schmilblick,

lis d'abord mon post précédent, puis celui-ci.

[quote="dans ton post de 09:57, tu"]Je voudrais cette fois-ci passer en sens inverse en remplaçant les virgules par des points.[/quote]

ta demande est faite dans ce fichier :

19remplacer.xlsm (20.04 Ko)

Ctrl e ➯ travail effectué !


Alt F11 pour voir le code VBA, puis revenir sur Excel

si besoin, tu peux demander une adaptation.

merci de me dire si ça te convient.

dhany

Bonjour Dhanny

Cela marche parfaitement bien. Mais j'ai pas compris le code VBA associé.

Alors voici mon fichier. Pourras-tu me réadapté les données de la colonne H en remplacant juste les virgules par des points.

Je te remercie !

tes données sont en colonne H et tu veux tes résultats en colonne J, c'est bien ça ?

mais peut-être que tu préfères les résultats en colonne H ?

dhany

Insert une colonne après H sa sera le I, je pense et transforme les données de la colonne H dans I

Thanks !

pour l'instant, c'est comme ça :

screen

donc j'ajoute une colonne à gauche de II J K décalés à droite et on laisse Fleche ?

ça m'paraît bizarre, mais si c'est c'que tu veux, ok !

dhany

Voici le fichier. Transforme juste h en i en remplacant les virgules de h par des point a la colonne i.

@Schmilblick

j'ai été plus long que prévu car ton présent fichier a pas mal de différences par rapport à ton fichier initial !

tout ça démontre que ton fichier exemple n'était vraiment pas assez représentatif de ton vrai fichier !

voici ton nouveau fichier :

6convertir.xlsm (167.04 Ko)

Ctrl e ➯ travail effectué


Alt F11 pour voir le code VBA, puis revenir sur Excel

dhany

Bonjour,

Pour le fun !...

4convertir.xlsm (142.63 Ko)
Sub Essai2()
Dim n As Long, i As Long, x
    n = Cells(Rows.Count, 1).End(xlUp).Row
    For i = 4 To n Step 4
        x = Split(Cells(i, 1))(0)
        x = Val(x) / 86400
        x = WorksheetFunction.Text(x, "hh:mm:ss.00")
        With Cells(i - 1, 15)
            .NumberFormat = "@"
            .Value = x
        End With
    Next i
End Sub

Merci à vous ! Cela marche parfaitement bien !

Merci dhanny et Jean-Eric !

merci pour ton retour, et pour avoir passé le sujet en résolu !

bonne continuation !

dhany

@Jean-Eric

pour transformer une donnée de départ avec virgule en la même donnée avec point au lieu de la virgule, ta méthode utilise ceci :

x = Val(x) / 86400
x = WorksheetFunction.Text(x, "hh:mm:ss.00")
...
.NumberFormat = "@"
.Value = x

comparaison de nos 2 méthodes :

screen 1

* à gauche, ma méthode retourne exactement les mêmes nombres sans aucune perte de précision !

* tes 3 autres résultats sont carrément complètement faux !

00:00:01.00 au lieu de 00:00:10.04

00:00:01.00 au lieu de 00:00:12.00

00.00.00.00 au lieu de 15.12.59.85

je ne peux donc pas valider ta méthode !

screen 2

désolé de te gâcher ton plaisir, mais pour le fun, tu repasseras :

tu peux revoir ta copie !


voici le fichier que j'ai utilisé pour tester ta méthode :

0remplacer.xlsm (19.81 Ko)

Ctrl emauvais résultats de la méthode Jean-Eric


dans mon code, ta variable x de type Variant est n, en double précision : Dim n#

mais même en mettant Dim n (donc Variant), j'ai les mêmes mauvais résultats.

Option Explicit

Sub Essai()
  Dim n#, dlig&, lig&: Application.ScreenUpdating = 0
  dlig = Cells(Rows.Count, 1).End(xlUp).Row
  For lig = 2 To dlig
    n = Val(Cells(lig, 1)) / 86400
    With Cells(lig, 2)
      .NumberFormat = "@": .IndentLevel = 1
      .Value = WorksheetFunction.Text(n, "hh:mm:ss.00")
    End With
  Next lig
End Sub

mes excuses d'avance si j'me suis trompé !

dhany

RE,

@ dhany,

Nos résultats sont identiques.

Voir fichier.

3convertir-1.xlsm (165.41 Ko)

Maintenant, ci-dessous le 2 propositions.

Option Explicit
'dhany
Sub Essai()
Dim n#, h%, m As Byte, s As Byte, c As Byte
Dim dlig&, lig&: Application.ScreenUpdating = 0
    dlig = Cells(Rows.Count, 8).End(xlUp).Row
    Do: dlig = dlig - 1: Loop Until Cells(dlig, 8) <> ""
    For lig = 3 To dlig Step 4
        n = Cells(lig, 8) * 24: h = Int(n)
        n = (n - h) * 60: m = Int(n)
        n = (n - m) * 60: s = Int(n + 0.01)
        n = (n - s) * 100: c = Int(n + 0.01)
        With Cells(lig, 9)
            .NumberFormat = "@": .IndentLevel = 1
            .Value = Format(h, "00") & ":" & Format(m, "00") _
                     & ":" & Format(s, "00") & "." & Format(c, "00")
        End With
    Next lig
End Sub
'jean-eric
Sub Essai2()
Dim n As Long, i As Long, x
    n = Cells(Rows.Count, 1).End(xlUp).Row
    For i = 4 To n Step 4
        x = Split(Cells(i, 1))(0)
        x = Val(x) / 86400
        x = WorksheetFunction.Text(x, "hh:mm:ss.00")
        With Cells(i - 1, 15)
            .NumberFormat = "@"
            .Value = x
            .Font.Bold = True
            .Font.Color = vbRed
        End With
    Next i
End Sub

@Jean-Eric

1) fichier Convertir(1)

mes résultats sont en colonne I ; les tiens en colonne O ; et c'est vrai : nos résultats sont exactement les mêmes : OK !


2) fichier Remplacer

mystère ! c'est pourtant la même macro que celle du fichier Convertir(1) ; ben là, ça m'dépasse : j'y comprends absolument rien !

screen

faudrait qu'tu m'envoies le fichier Remplacer avec ta macro, et qu'elle me donne les mêmes résultats que les miens, notamment pour 15:12:59,8515:12:59.85 (et pas 00:00:00.00)


voici le fichier qu'j'ai utilisé :

2remplacer.xlsm (22.38 Ko)

j'me demande bien c'que tu vas pouvoir changer dans ta macro pour qu'elle donne mes résultats ? faut croire que j'ai pas dû transposer correctement ta macro d'un fichier à l'autre, mais j'arrive pas à voir en quoi !

dhany

Rechercher des sujets similaires à "remplacer point virgule option rechercher selectionner"