Formater des chiffres

Y compris Power BI, Power Query et toute autre question en lien avec Excel
p
pedrosummer
Membre habitué
Membre habitué
Messages : 77
Inscrit le : 13 septembre 2016
Version d'Excel : 2016

Message par pedrosummer » 21 mai 2019, 11:53

Bonjour à tous,
Je suis en train de créer plusieurs macro pour retraiter automatiquement des données issues d'un système tiers.
Je reçois de ce système des valeurs avec des "." comme séparateurs décimaux (que je cherche à remplacer par des virgules) et également, ces chiffres sont vus par excel comme du texte (j'ai alors la petite icone me demandant si je souhaite les convertir en chiffres). Enfin, je cherche à formater ces chiffres (décimal deux digits ou currency Euro).

A date, j'ai créé ces deux macros :
Sub Clean_data()
' Macro pour remplacer les points par des virgules
   Sheets("RAW from system").Select
   Range("E2:R2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Range("B2").Select
End Sub
Sub Format_numbers()
' Macro pour formater les nombres'
    Sheets("RAW from system").Select
    Range("G:G,H:H,J:J,L:L,N:N,P:P,Q:Q,R:R,T:T,U:U,V:V,W:W,X:X,Y:Y,Z:Z,AA:AA").Select
    Range("AA1").Activate
    Selection.Style = "Currency"
    Range("E:E,F:F,M:M,O:O,S:S").Select
    Range("S1").Activate
    Selection.Style = "Comma"
    Range("B2").Select
End Sub
J'arrive donc à répondre au point 1/ (remplacer "." par ",") et au point 2/ (formater les nombres en chiffres ou en euro)

Le problème est donc pour le point 2/, je n'arrive pas à créer une macro qui va venir convertir le texte en "chiffre".

J'ai lu pas mal de messages identiques mais sans jamais réussir à trouver un code qui réponde à ce souhait, j'espère donc que vous allez pouvoir m'aider (je n'en doute pas :P )

Et pour couronner le tout, est ce que vous savez s'il est possible de mettre une ligne de code disant que si le format (tous les paramètres, virgules, deux digit et stocké sous format nombre) est déjà respecté, Excel ne doit pas traiter cette ligne (pour optimiser les temps de traitements)?

Un grand merci par avance pour votre aide :)

Bonne journée

Pierre
Avatar du membre
xorsankukai
Membre impliqué
Membre impliqué
Messages : 1'560
Appréciations reçues : 152
Inscrit le : 7 octobre 2014
Version d'Excel : 2010 FR

Message par xorsankukai » 21 mai 2019, 12:21

Bonjour pedrosummer, le forum,
je n'arrive pas à créer une macro qui va venir convertir le texte en "chiffre".
Un exemple ci-joint, en espérant que cela t'aidera...
Classeur1.xlsm
(17.76 Kio) Téléchargé 6 fois
Cordialement,
xorsankukai

La connaissance, c’est partager le savoir qui nous fait grandir.
p
pedrosummer
Membre habitué
Membre habitué
Messages : 77
Inscrit le : 13 septembre 2016
Version d'Excel : 2016

Message par pedrosummer » 21 mai 2019, 17:38

Merci pour ta réponse

J'ai modifié le code pour l'adapter à mon fichier:
dl = .Range("E:R" & Rows.Count).End(xlUp).Row
mais j'ai une erreur. En fait je veux jouer cette macro uniquement sur les colonnes E à R

Comment dois-je corriger le code en conséquence?

Merci encore
Avatar du membre
xorsankukai
Membre impliqué
Membre impliqué
Messages : 1'560
Appréciations reçues : 152
Inscrit le : 7 octobre 2014
Version d'Excel : 2010 FR

Message par xorsankukai » 21 mai 2019, 18:13

Re,
Sub Bouton1_Cliquer()

 Dim dl As Integer, c As Range
 
  With Sheets("Feuil1")
   dl = .Range("A" & Rows.Count).End(xlUp).Row
    For Each c In .Range("E1:R" & dl)
     c.Value = CDbl(c.Value)
    ' c.Value = val(c.Value)
    Next c
  End With
End Sub
Copie de Classeur1.xlsm
(19.9 Kio) Téléchargé 3 fois
Cordialement,
xorsankukai

La connaissance, c’est partager le savoir qui nous fait grandir.
p
pedrosummer
Membre habitué
Membre habitué
Messages : 77
Inscrit le : 13 septembre 2016
Version d'Excel : 2016

Message par pedrosummer » 22 mai 2019, 09:46

Merci pour ta réponse

Le code fonctionne avec la deuxième ligne
c.Value = Val(c.Value)
Par contre, une fois que la macro tourne, les chiffres sont convertis sans les 2 décimales après la virgule, comment puis-je faire pour garder cette information?

Un grand merci encore une fois
Avatar du membre
xorsankukai
Membre impliqué
Membre impliqué
Messages : 1'560
Appréciations reçues : 152
Inscrit le : 7 octobre 2014
Version d'Excel : 2010 FR

Message par xorsankukai » 22 mai 2019, 10:01

Bonjour pedrosummer,

Merci pour ton retour, :)
Par contre, une fois que la macro tourne, les chiffres sont convertis sans les 2 décimales après la virgule, comment puis-je faire pour garder cette information?
Il faut peut-être préciser le format des cellules (je n'ai pas ce problème chez moi...).

A tester....
Sub Bouton1_Cliquer()

 Dim dl As Integer, c As Range
 
 Application.ScreenUpdating = False
  With Sheets("Feuil1")
   dl = .Range("A" & Rows.Count).End(xlUp).Row
    For Each c In .Range("E1:R" & dl)
     c.Value = Val(c.Value)
     c.NumberFormat = "0.00"
    Next c
  End With
 Application.ScreenUpdating = True
End Sub
Classeur1-1.xlsm
(20.05 Kio) Téléchargé 3 fois
Cordialement,
xorsankukai

La connaissance, c’est partager le savoir qui nous fait grandir.
p
pedrosummer
Membre habitué
Membre habitué
Messages : 77
Inscrit le : 13 septembre 2016
Version d'Excel : 2016

Message par pedrosummer » 22 mai 2019, 17:07

Merci pour ta réponse

Cela ne marche pas :(
Le temps de traitement est en plus très long

En fait, voici un fichier d'exemple, ce sera sans doute beaucoup plus simple...

L'idée est de convertir les données des colonnes E à R en chiffres avec deux décimales (sachant que dans l'exemple j'ai uniquement 15 lignes mais chaque jour je rajoute des lignes...)

Est ce que vous pouvez m'aider quant au code qu'il faut crééer pour y arriver?

Désolé mais je n'y arrive pas malgré mes nombreux essais... :cry: :cry: :cry:

un grand merci :oops:
Test.xlsx
(10.03 Kio) Téléchargé 3 fois
Avatar du membre
xorsankukai
Membre impliqué
Membre impliqué
Messages : 1'560
Appréciations reçues : 152
Inscrit le : 7 octobre 2014
Version d'Excel : 2010 FR

Message par xorsankukai » 22 mai 2019, 19:15

Re,
Cela ne marche pas :(
Tu es sûre ?
Le temps de traitement est en plus très long
Pour 2000 lignes à traiter : à peine 8 secondes....c'est vrai que c'est un peu long, je l'admets, :bof:

Je ne peux pas faire mieux, je passe donc la main.... ::(
Test-3.xlsm
(119.09 Kio) Téléchargé 4 fois
Bonne soirée,
xorsankukai

La connaissance, c’est partager le savoir qui nous fait grandir.
Avatar du membre
xorsankukai
Membre impliqué
Membre impliqué
Messages : 1'560
Appréciations reçues : 152
Inscrit le : 7 octobre 2014
Version d'Excel : 2010 FR

Message par xorsankukai » 22 mai 2019, 20:12

Re,

Une dernière tentative....en utilisant une variable tablo.....chez moi le traitement est immédiat, :lole:
Sub Bouton1_Cliquer()

Dim Montab As Variant, cmpt1 As Long, cmpt2 As Long

 With Sheets("Sheet1")
  Montab = Range("E3:R" & .UsedRange.Rows.Count + 1).Value
   For cmpt1 = LBound(Montab, 1) To UBound(Montab, 1)
    For cmpt2 = LBound(Montab, 2) To UBound(Montab, 2)
        Montab(cmpt1, cmpt2) = Val(Montab(cmpt1, cmpt2))
    Next cmpt2
   Next cmpt1

   Range("E3:R" & .UsedRange.Rows.Count + 1).Value = Montab
   Range("E3:R" & .UsedRange.Rows.Count + 1).NumberFormat = "0.00"
 End With
End Sub

Test-4.xlsm
(118.3 Kio) Pas encore téléchargé
Cordialement,
xorsankukai

La connaissance, c’est partager le savoir qui nous fait grandir.
p
pedrosummer
Membre habitué
Membre habitué
Messages : 77
Inscrit le : 13 septembre 2016
Version d'Excel : 2016

Message par pedrosummer » 23 mai 2019, 14:13

Un grand merci xorsankukai pour ton aide, je suis reparti de ton fichier "test 3" et cela fonctionne

Et le temps de traitement n'était pas lié à ton code, c'est juste que j'avais une petite dizaine de colonnes ad'hoc avec des recherchev, d'où le temps de traitement élevé chez moi

C'est donc parfait, merci encore

J'ai une dernière question, j'ai un autre onglet quasi similaire mais pour le coup, là, je voudrais uniquement appliquer ce traitement sur les colonnes C,D et G (donc pas un range continu de colonnes).

Sais-tu comment je dois modifier le code pour qu'il fonctionne avec cette nouvelle contrainte?

Merci et bonne journée
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message