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

Re,

Je ne sais pas ou tu veux m'emmener !?

snip 20181219202100

Ma proposition part du fichier de Schmiblick et des données en colonne 1.

C'est tout et cette procédure est simple.

Cdlt.

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

Re Jean-Eric,

tu a écrit :

Je ne sais pas où tu veux m'emmener !?

??? non, il ne s'agit pas d'ça du tout : j'cherche à t'emmener nulle part ! simplement, partons du principe que nos 2 macros donnent les bons résultats ; ça fait que pour le 1er fichier "Convertir(1)", nos résultats sont les mêmes : ça coïncide, et c'est parfait ! ici, ça prouve que les 2 macros sont OK.

la question, ensuite, c'est : pourquoi nos 2 macros ne donnent pas les mêmes résultats dans le 2ème fichier "Remplacer" aussi alors que seules les données sont différentes ? comme en plus ce 2ème fichier est beaucoup moins complexe que le 1er, j'ai vraiment du mal à croire que tu arrives pas à adapter ta propre macro à ce fichier ; elle devrait alors donner les mêmes résultats que les miens !

par « beaucoup moins complexe », je veux dire : « pas de saut entre les lignes car elles se suivent l'une après l'autre, et y'a seulement 9 données, de A2 à A10 » ; alors ne m'dis pas qu'tu trouves que c'est la mer à boire d'adapter ta macro à 9 petites données seulement ! moi, j'y suis pas arrivé ; p't'être à cause d'une erreur d'étourderie ou autre, mais c'est pas ma propre macro ; alors que toi qui en es l'auteur, tu devrais avoir aucun mal à faire ça !

le fichier "Remplacer", c'est celui du demandeur (son post d'hier à 09:57) que j'ai converti en .xlsm ; et pour mes tests, j'ai ajouté une seule donnée 15:12:59,85 (en A10) ; cela car je voulais vérifier qu'ma macro marche aussi pour des données dont le nombre d'heures est autre que 0 (idem pour les minutes).

https://forum.excel-pratique.com/viewtopic.php?p=717222#p717222

dhany

Re,

Même principe :

14remplacer.xlsm (26.98 Ko)
'jean-eric
Sub Essai2()
Dim n As Long, i As Long, x As String
    n = Cells(Rows.Count, 1).End(xlUp).Row
    For i = 2 To n
        x = WorksheetFunction.Text(Cells(i, 1).Value, "hh:mm:ss.00")
        With Cells(i, 3)
            .NumberFormat = "@"
            .IndentLevel = 1
            .Value = x
        End With
    Next i
End Sub
'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, 1).End(xlUp).Row
    For lig = 2 To dlig
        n = Cells(lig, 1) * 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, 2)
            .NumberFormat = "@"
            .IndentLevel = 1
            .Value = Format(h, "00") & ":" & Format(m, "00") _
                     & ":" & Format(s, "00") & "." & Format(c, "00")
        End With
    Next lig
End Sub

@Jean-Eric

ah oui, mais non, là, c'est pas du jeu ! t'as triché !!!

ton code VBA d'avant :

'jean-eric
Sub Essai2()
Dim n As Long, i As Long, x$
    n = Cells(Rows.Count, 1).End(xlUp).Row
    For i = 2 To n
        x = Split(Cells(i, 1))(0)
        x = Val(x) / 86400
        x = WorksheetFunction.Text(x, "hh:mm:ss.00")
        With Cells(i, 3)
            .NumberFormat = "@"
            .Value = x
            .Font.Bold = True
            .Font.Color = vbRed
        End With
    Next i
End Sub

est devenu maint'nant celui-ci :

'jean-eric
Sub Essai2()
Dim n As Long, i As Long, x As String
    n = Cells(Rows.Count, 1).End(xlUp).Row
    For i = 2 To n
        x = WorksheetFunction.Text(Cells(i, 1).Value, "hh:mm:ss.00")
        With Cells(i, 3)
            .NumberFormat = "@"
            .IndentLevel = 1
            .Value = x
        End With
    Next i
End Sub

* elle est passée où ton instruction avec Split ? x = Split(Cells(i, 1))(0)

* et ton instruction avec Val() et division par 86400 ? x = Val(x) / 86400

* et le 1er argument de .Text n'est plus (x, mais (Cells(i, 1).Value,

j'risquais pas d'arriver à adapter ton code, hein, avec tous tes changements !

il va de soi que j'te dis rien pour l'aspect cosmétique : plus de gras, ni de rouge : ça, c'est vraiment pas important.


screen

cela dit, comme nos résultats sont (enfin !) exactement les mêmes (et ça jusqu'au dernier chiffre au bout à droite), je peux ENFIN approuver et valider ta (nouvelle) méthode, totalement et sans aucune réserve ! ouf ! ça nous y aura pris l'temps, hein ? et comme ta (nouvelle) méthode est effectivement plus courte et plus simple que la mienne, je te dis quand même Bravo ! et Félicitations !!!

bon, allez, on va pas chipoter : j'mets quand même un à Jean-Eric !

dhany

Bonjour,

@ dhany,

Au départ les données sont sous forme de texte, d'où Split() pour extraire une sous-chaîne.

Dans ton fichier les données sont numériques !...

Cdlt.

Bonjour Jean-Eric,

j'viens tout juste de lire ton post.

merci pour ta réponse.

dhany

Bonjour,

@ dhany,

Je suis interloqué !... un retour clair, concis et structuré.

Merci de ce retour.

Cdlt.

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