IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Enregistrement d'un CSV via Macro -> Rogne les décimales des nombres à 4 décimales


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Trésorier
    Inscrit en
    Novembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Trésorier

    Informations forums :
    Inscription : Novembre 2018
    Messages : 9
    Par défaut Enregistrement d'un CSV via Macro -> Rogne les décimales des nombres à 4 décimales
    Cher amis,

    J'ai besoin de votre aide

    J'utilise Excel 2016 sous windows 10.

    J'utilise VBA pour enregistrer mon Excel au format CSV afin qu'il soit utilisé dans une autre interface.

    Le code VBA utilisé est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ChDir "R:\Reval_Import"
        ActiveWorkbook.SaveAs Filename:="R:\Reval_Import\To_Be_Uploaded\Deal_FX_Swap_" & Day(Date) & Month(Date) & Year(Date) & Hour(Now) & Minute(Now) & Second(Now) & ".csv" _
            , FileFormat:=xlCSV, CreateBackup:=False
    Le code fonctionne, il n'y a pas de problème avec ca.

    Le problème vient du fait qu'Excel lors de la conversion au format CSV rogne le nombre de décimales des nombres.

    J'ai essayé plusieurs techniques:
    - formater le nombre comme Texte avec 10 décimales
    - faire un copy/paste value du nombre (pensant que si je laissais le calcul ca ne marcherait pas)

    La seule solution que j'ai trouvé, c'est de rentrer toutes les données (toutes les colonnes) sous forme d'une chaine de texte séparée d'une virgule (ie monter CSV à la main).

    Cette solution ne me convient pas.

    J'aimerai donc de l'aide pour savoir comment garder le nombre de décimales des nombres lors de la conversion au format CSV.

    merci beaucoup de votre aide future ; )

    Robin,

  2. #2
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    bonsoir
    afin de bouger cette discussion peux tu joindre un petit exemple du fichier excel obtenu ??

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Trésorier
    Inscrit en
    Novembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Trésorier

    Informations forums :
    Inscription : Novembre 2018
    Messages : 9
    Par défaut
    Citation Envoyé par BENNASR Voir le message
    bonsoir
    afin de bouger cette discussion peux tu joindre un petit exemple du fichier excel obtenu ??
    Ci-joint, les fichiers Excel et CSV:

    - fichier Excel => contient les décimales (colonnes en vert) => -601212.0786578490000 et 594766.230823130000000

    - fichier CSV => les décimales ont été tronquées => -601212.0787 et 594766.2308

    Ci-dessous, le code que j'ai mis dans la macro pour avoir les décimales:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("U" & i).Value = Application.WorksheetFunction.Text(-(Range("R" & i).Value / Range("T" & i)), "#0.00000000000")
    Depuis le début du post, j'ai remarqué que si je mettais une formule dans la cellule (ie R4/C4), ca me donnait aussi que 4 décimales ...

    Merci de votre aide,
    Fichiers attachés Fichiers attachés

  4. #4
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    re
    désolé réponse hors sujet...je continue à voir de près

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Trésorier
    Inscrit en
    Novembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Trésorier

    Informations forums :
    Inscription : Novembre 2018
    Messages : 9
    Par défaut
    Citation Envoyé par BENNASR Voir le message
    re
    désolé réponse hors sujet...je continue à voir de près
    Merci Bennasr,

    Le code a marché quand je l'ai exécuté sur deux lignes.

    En revanche, des que j'ai mis 60 lignes, il a de nouveau tronqué les décimales ... Est ce que tu as une explication pour ca ?

    Merci deja pour ton aide,

    Robin,

  6. #6
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,

    Au lieu de FileFormat:=xlCSV essaies avec FileFormat:=xlCSVMSDOS
    Chez moi ça fonctionne avec ton fichier et 80 lignes
    Edit : ça fonctionne aussi avec xlCSV.

    Edit 2: la valeur enregistrée est la propriété .Text de chaque cellule, i.e. la valeur formatée, il faut donc que les décimales soient affichées pour qu'elles soient enregistrées

  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    bonjour
    je te propose de, sortir des sentier battus, ne pas faire comme les autres,

    j'ai donc imaginé copier la plage en format texte en un coup sans boucle

    cette astuce je l'ai deja proposé dans les contributions une recherche t'aurait été bien utile

    je te propose meme 2 modes saveas "blablabla" ou avec boite de dialogue saves as



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Function save_with_dialog(plage, Soption As Variant)
        Dim Dossier$, Fname, texte$
        If Soption = True Then
            Fname = Application.GetSaveAsFilename(filefilter:="CSV Files (*.csv), *.csv", Title:="ENREGISTREMENT DE LA plage en csv")
            If Fname <> False Then chemin = Fname Else Exit Function
        Else
            Dossier = Mid(Soption, 1, InStrRev(Soption, "\"))
            If Dir(Dossier) <> "" Then chemin = Soption Else MsgBox "chemin non valide": Exit Function
        End If
        plage.Copy
        texte = Replace(CreateObject("htmlfile").parentwindow.clipboardData.GetData("TEXT"), vbTab, ";")
        X = FreeFile
        Open chemin For Output As #X: Print #X, texte: Close #X
        Application.CutCopyMode = False
    End Function
    une sub que j'ai testé sur ton xlsx
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub test()
        Dim plage, X
        Set plage = Range("A1").CurrentRegion' a toi d'adapter la plage comme caavec currentregion  ca copie tout ce qui est rempli 
        'X = save_with_dialog(plage, "C:\Users\polux\DeskTop\monfichier.csv")    'sans boite de dialogue save as
        X = save_with_dialog(plage, True)    'avec  boite de dialogue save as
    End Sub
    think differently !!!
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

Discussions similaires

  1. importer données de fichiers csv via macro
    Par seb31085 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/02/2017, 11h41
  2. Réponses: 3
    Dernier message: 20/02/2014, 16h34
  3. [XL-2007] importer données de fichiers csv via macro
    Par paul311 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/09/2012, 18h53
  4. Réponses: 1
    Dernier message: 23/02/2012, 23h17
  5. [XL-2003] macro pour afficher les dates des troisièmes vendredi du mois
    Par julius999 dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 28/10/2009, 18h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo