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

  1. #1
    Membre habitué
    Importation de fichier CSV et format des colonnes ?
    Bonjour,

    J'ai un petit problème de format et de validation dans Excel
    Exemple (une fois l'importation du CSV)
    je suis dans une colonne ou j'ai plusieurs valeur qui ressemble a
    +2,99000000000000E+000
    +3,84000000000000E+000
    +1,31600000000000E+002
    Ces valeurs sont au format TEXT, je convertis au format numéro et pas de changement, je suis obligé d'entrer dans la cellule (par un double clic) et revalide par entrée et la valeur change :
    2,99
    3,84
    131,60

    Comment faire pour le faire pour toutes les valeurs du tableau ? (en VBA ou pas ?)

    En vous remerciant d'avance

  2. #2
    Membre expérimenté
    Curieux, car ton 1er nombre équivaut à 299,000,000,000,000 et non pas 2,99
    Tu peux t'en rendre compte en insérant une colonne à droite contenant la fonction "Value(cellule)" avec un format personnalisé "#,##0"

  3. #3
    Membre habitué
    Quand j'écris dans une cellule vide
    +2,99000000000000E+000 {enter}
    j'ai une valeur qui est :
    2,99E+00 le format est de type scientifique et quand je la change en nombre j'ai bien la valeur : 2,99
    Pour moi la valeur est bonne (je me trompe peut être ?)

  4. #4
    Membre expérimenté
    C'est juste; mon séparateur décimal est le "point", d'où la confusion.
    Donc, en insérant une colonne a droite contenant la formule "Value(celluleDeGauche)" et en appliquant le format personnalisé "#.##" (ou "#,##"), ça devrait marcher

  5. #5
    Membre éprouvé
    Bonjour

    A priori, il y a une petite coche verte en haut à gauche des cellules concernées. En cliquant sur la première qui est concernée, un petit panneau doit apparaitre. En cliquant sur ce panneau, Excel propose de convertir en nombre. Si on choisit cela, on retrouve un nombre "habituel". Eventuellement, il faut changer ensuite le format (qui est passé en scientifique) en mode Standard.

    On peut gagner beaucoup de temps en sélectionnant d'un coup toutes les cellules concernées. MAIS, il faut que la première que l'on sélectionne pose ce problème afin que le panneau s'affiche.

    Tout ceci est illustré sur l'image suivante.



    Bien entendu cela fonctionne sur un "one-shot" mais ce n'est pas la méthode à utiliser s'il faut le faire 50 fois par jour tous les jours.

    En espérant que cela convienne

    Pierre Dumas
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  6. #6
    Membre habitué
    Bonjour Pierre Dumas

    Merci pour votre réponse, vu l'image que vous avez copié je dirais que c'est de l'Office 2013/2011 ?
    J'ai fait des tests avec la version que j'ai (2010) et au debut je n'avais pas cette petit bulle d'option mais j'ai trouvé en faisant une autre manipulation.
    et effectivement ça change bien la valeur (de type string) en numéro (de type int ou décimal), mais j'ai 37000 lignes a faire comme ça, il n'existerais pas un moyen pour faire toutes les valeurs en meme temps ?
    (j'ai bien changé la première valeur mais les autres n'ont pas suivis)

  7. #7
    Membre éprouvé
    Rebonjour

    C'est justement pour éviter de le faire une cellule par une cellule que j'ai écrit (et qui est illustré par l'image) :
    On peut gagner beaucoup de temps en sélectionnant d'un coup toutes les cellules concernées. MAIS, il faut que la première que l'on sélectionne pose ce problème afin que le panneau s'affiche.
    Il faut sélectionner TOUTES les cellules (sachant que le première sélectionnée DOIT avoir le souci d'être écrite sur beaucoup de caractères) et ensuite cliquer sur le panneau.

    En espérant que vous réussirez à réaliser la manipulation cette fois-ci.

    Bonne fin de journée

    Pierre Dumas
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  8. #8
    Membre habitué
    Effectivement ça fonctionne merci
    ça fonctionne aussi en sélectionnant le tableau sans les en-tete

    Existerait-il une macro VBA pour que ça se met a jour automatiquement ?

  9. #9
    Expert éminent sénior
    Il est préférable d'ouvrir proprement le fichier que de faire une réparation à postériori.

    Un des problèmes d'Excel, c'est qu'il croit connaitre le besoin de l'utilisateur mieux que celui-ci.
    Et donc il prend des initiatives sans lui demander son avis.
    Entre autre, il imagine pouvoir ouvrir un fichier CSV sans qu'on ait a lui expliquer les spécificités du contenu.

    Le moyen le plus simple que j'ai trouvé pour contourner ça, c'est de lui faire croire que le fichier est "autre chose" que du CSV.
    Pour ça, je renomme le .csv en .txt.
    Du coup, Excel ne sait pas exactement comment l'ouvrir et se met à poser des questions (généralement trois fenêtres successives) dans lesquelles on peut indiquer ses spécificités.
    Parmi celles-ci figure le séparateur de données utilisé et la nature de chaque colonne.
    Un conseil : ne laisser "Standard" que pour les véritables valeurs numériques. Pour tout le reste (y compris les codes composés de chiffres comme les numéro de téléphone ou de sécurité sociale), indiquer que la colonne est du texte.

    En procédant ainsi, ton importation devrait mieux se passer.

    Si tu veux le faire en VBA, il faudra passer par la méthode Workbooks.OpenText.
    Lire ça : https://docs.microsoft.com/fr-FR/off...books.opentext
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  10. #10
    Membre éclairé
    bonjour,
    une autre approche en VBA!

    Code TEST.CSV :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    N°;DATE;COMMANTAIRE;VALEUR
    1;01/01/2019;A;1,1
    2;02/01/2019;A;2,2
    3;03/01/2019;A;3,3
    4;04/01/2019;A;4,4
    5;05/01/2019;A;5,5
    6;06/01/2019;A;6,6
    7;07/01/2019;A;7,7
    8;08/01/2019;A;8,8
    9;09/01/2019;A;9,9
    10;10/01/2019;A;11
    11;11/01/2019;A;12,1

    Code Schema.ini :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    [TEST.CSV]
    Format=Delimited(
    DateTimeFormat=MM/dd/yyyy
    DecimalSymbol=, 
    Col1=[N°] Long
    Col2=[DATE] DateTime
    Col3=[COMMANTAIRE] Text Width 10  
    Col4=[VALEUR] Double

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub test()
    With CreateObject("AdoDb.Connection")
        .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\MyRep;Extended Properties=""Text;HDR=No;FMT=Delimited;"""
        ActiveCell.CopyFromRecordset .Execute("Select * from [TEST#CSV]")
        .Close
     End With
    End Sub

###raw>template_hook.ano_emploi###