Format symbole decimal

Bonsoir tt le monde,

Sur mon PC, en format décimal, j' ai un point au lieu d'une virgule ( dans option région régional...).

Mes macros fonctionnent sans problème sur mon poste. Or je me suis aperçu que lorsque j' envoi une macro à des collègues, ils avaient des erreurs du au fait qu'ils n'avaient pas le même paramétrage que moi ( le fameux point au lieu de la virgule).

Je ne peux pas m'amuser à paramétrer tt les pc manuellement. J' ai donc trouvé une macro qui devrait gérer ce problème, or cela ne fonctionne pas tt le temps :

Dim s As Boolean, d As String, m As String
With Application
s = .UseSystemSeparators
d = .DecimalSeparator
m = .ThousandsSeparator
.DecimalSeparator = "."
.ThousandsSeparator = " "
.UseSystemSeparators = False
End With

" J INSERE LA MACRO "

With Application
.DecimalSeparator = d
.ThousandsSeparator = m
.UseSystemSeparators = s
End With

Auriez-vous ne suggestion pour pallier ce problème ?

Par avance, merci de votre aide

Bonjour,

Pour une appli qui doit être opérationnelle sur plusieurs PC j'emploi une fonction qui transcode la virgule en point.

ça risque d’alourdir le classeur si beaucoup de calcul par VBA.

Une piste,

Dans un module

Public Function PVirg(R) As Double
    PVirg = Val(Replace(R, ",", "."))
End Function

Exemple dans une maco...

        [D6].Value = PVirg([B6].Value) + PVirg([C6].Value)

Y a probablement plus simple mais je ne connais pas.

A+

Bonsoir L'ermite,

Navré de te répondre si tard, je vais essayer ta proposition et te tiens au courant.

Merci et bonne soirée.

Bonsoir,

c'est étonnant que .UseSystemSeparators = False ne résolve pas ton pb.

Dans quels cas ça ne fonctionne pas ?

eric

Bonsoir tt le monde;

@ Lermite

J'ai essayé ta proposition mais ça ne change rien, dans le sens ou lorsque je sélectionne 3 ligne par ex (10 sur la premiere ligne; 20 sur la deuxieme; 30 sur la troisieme, au lieu de me donner " Somme : 60", en bas à droite, il me donne " Nb( non vide) : 3.

@ Eric

c'est étonnant que .UseSystemSeparators = False ne résolve pas ton pb.

Dans quels cas ça ne fonctionne pas ?

Dans tout les cas, il me donne toujours " Nb( non vide) : 3" lorsque je selectionne 3 lignes par ex.

Si vous avez une idée.....Je continue mes recherches de mon côté.

Bonjour,

tu peux faire un classeur exemple avec ta macro en cause ?

eric

Bonjour

Voici :

96test1.xlsx (8.53 Ko)

Bonsoir,

xlsx = classeur sans macro...

Précise quelle procédure fait l'erreur (et quelle erreur, on ne sait toujours pas...) et si on peut la lancer directement.

Et sur ton poste, en mettant la "," en séparateur décimal ça fait l'erreur aussi ?

or cela ne fonctionne pas tt le temps

Tu as des précisions du contexte ? Car on risque de ne pas avoir l'erreur non plus.

eric

Précise quelle procédure fait l'erreur (et quelle erreur....

Pour la procédure, je n' ai pas de messages d'erreurs. Lorsque le lance la macro, il ne se passe rien.

Sur l' exemple joint, la macro doit simplement additionner B2 à B33.

Or comme les carrectéres ne sont pas reconnu comme chiffres, il me met "0".

Et sur ton poste, en mettant la "," en séparateur décimal ça fait l'erreur aussi ?

Oui tu te doutes bien que c' est la première chose que j' ai faite.

Tu as des précisions du contexte ?

C' est une extraction Oracle en format xls.

83test1.xlsm (13.92 Ko)

Bonjour,

Dans ton fichier B est en texte (pas la peine de forcer l'alignement à droite pour faire croire que c'est un nombre, ça ne trompe que l'utilisateur, pas excel)

Supprime dans cette colonne les séparateurs de millier, ensuite fait une conversion en numérique avec par exemple :

Sub test()
    Dim derlig As Long
    derlig = Cells(Rows.Count, "B").End(xlUp).Row
    [B2].Resize(derlig).Replace What:=",", Replacement:=""
    '[B2].Resize(derlig).Replace What:=".", Replacement:="," ' à-priori non nécessaire
    [B2].Resize(derlig) = [B2].Resize(derlig).Value
    [B:B].NumberFormat = "0.00"
End Sub

A-priori en faisant comme ça on peut se passer de remplacement du . en , sur les systèmes configurés ainsi mais teste en réel.

eric

Salut tous,

Y a longtemps que je crois plus au Père-Noël ..

A+

Bonsoir,

Ce fil m' intéresse.

    Sub test()
        Dim derlig As Long
        derlig = Cells(Rows.Count, "B").End(xlUp).Row
        [B2].Resize(derlig).Replace What:=",", Replacement:=""
        '[B2].Resize(derlig).Replace What:=".", Replacement:="," ' à-priori non nécessaire
       [B2].Resize(derlig) = [B2].Resize(derlig).Value
        [B:B].NumberFormat = "0.00"
    End Sub

eriic Comment appliquer votre formule sur une plage plus large telle que B2 à F120.

merci

Bonjour,

Ca t'interesse plus que le demandeur apparemment...

Agit au niveau des .resize(nombre_de_lignes, nombre_de_colonnes) et boucle à l'intérieur de la sélection.

Sub test()
        Dim derlig As Long, c as range
        derlig = Cells(Rows.Count, "B").End(xlUp).Row
        for each c in [B2].Resize(derlig,5)
              c.Replace What:=",", Replacement:=""
               'c.Resize(derlig).Replace What:=".", Replacement:="," ' à-priori non nécessaire
              c = c.Value
              c.NumberFormat = "0.00"
       next c
End Sub

Ecrit en direct faute de fichier de test. Tu sais ce qu'il te reste à faire si ça ne marche pas...

eric

Bonjour éric

Cela fonctionne à merveille.

Merci pour votre aide.

Rechercher des sujets similaires à "format symbole decimal"