Microsoft 365 Probleme format VBA

gillmo

XLDnaute Occasionnel
Bonjour,

j'utilise une macro qui fonctionne correctement, à un détail près, celle ci modifie une valeur alors qu'elle ne devrait pas le faire. Etant donné que c'est toujours très compliqué d'écrire un problème Excel, je vous joint un petit fichier reprenant des données de test, afin que vous puissiez vous rendre compte de l'anomalie.

Dans la cellule R14 qui une fois le début de la macro exécutée, deviendra K14, il y a une valeur de 20.1. Après la ligne de code "cell.Value = Format(cell.Value, "0.00")" le chiffre change pour devenir 0.84. Pour toutes les autres valeurs je n'ai pas de soucis.

Ce souci peut se répéter sur d'autres valeurs de façon très aléatoire, ce fichier ne contenant qu'une partie des valeurs.

Je vous laisse vous rendre compte par vous même, et si jamais mes explications ne sont pas claires, je répondrai à toutes vos questions.
Merci du temps que vous m'accorderez.
 

Pièces jointes

  • test.xlsm
    15.8 KB · Affichages: 46

TooFatBoy

XLDnaute Barbatruc
Bonjour,

Visiblement le "20.10" est pris par Excel pour "20:10", d'où le 0,84.

Je te propose d'essayer de déplacer des lignes de ton code :
VB:
For Each cell In plage
    cell.Value = Application.Trim(cell.Value)
    cell.Value = Replace(cell.Value, ".", "")
    cell.Value = Format(cell.Value, "0.00")
Next cell
 
Dernière édition:

vgendron

XLDnaute Barbatruc
Hello
un essai
remplace la partie du code concernée
VB:
Set plage = Range(Cells(11, 5), Cells(derlig, 12))

For Each cell In plage
    cell.Value = Replace(cell.Value, ",", "") 'on supprime le séparateur de milliers
    cell.NumberFormat = "# ##0.00" 'on applique le format
Next cell
 

TooFatBoy

XLDnaute Barbatruc
J'ai regardé les différentes propositions et chez moi, sous Excel 2016, ça ne paraît pas 100 % satisfaisant. :(


Proposition #2 : H, I, J et K n'ont pas le bon format, et L n'est pas numérique.
Prop2.jpg

Proposition #3 : E, F, G et K ne sont pas numériques.
Prop3.jpg

Proposition #4 : E, F, G et K ne sont pas numériques, et H, I et J ne sont pas au bon format.
Prop4.jpg

Du coup j'ai cherché un truc qui me paraisse mieux correspondre à la demande.
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
J'ai donc une proposition #7 où tout me semble être numérique et au bon format.
Prop7.jpg

La macro de la nouvelle proposition, basée sur la macro initiale :
VB:
Sub test()
'
Dim plage As Range
Dim derlig As Long
Dim dc As Long, ic As Long

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Range("A1").Select

    dc = Sheets("test").Cells(9, Columns.Count).End(xlToLeft).Column
    For ic = dc To 1 Step -1
        If Sheets("test").Cells(9, ic) = "" Then Sheets("test").Columns(ic).Delete
    Next

    derlig = Range("a" & Rows.Count).End(xlUp).Row
    Set plage = Range(Cells(7, 5), Cells(derlig, 12))

    For Each cell In plage
        With cell
            .Value = Trim(Replace(Replace(.Value, ",", ""), ".", ","))
            If .Value <> "" And IsNumeric(.Value) Then
                .NumberFormat = "# ##0.00"
                .Value = .Value * 1
            End If
        End With
    Next cell

    For Lig = [a65536].End(xlUp).Row To 1 Step -1
        If Len(Range("a" & Lig)) <> 9 Then Rows(Lig).Delete
    Next

    Range("A1").Select
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = False

End Sub
 

gillmo

XLDnaute Occasionnel
Merci TooFatBoy pour cette macro, cela fonctionne parfaitement, mais à vrai dire, sur office 365, les autres propositions font correctement le job. Je la garde tout de même, car si je rencontre une difficulté à cause des autres propositions, j'utiliserai la tienne.
Merci d'avoir consacré du temps pour ce problème :)
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 069
Messages
2 085 040
Membres
102 763
dernier inscrit
NICO26