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 :

importer un fichier csv dans un tableau


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Septembre 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Septembre 2019
    Messages : 3
    Par défaut importer un fichier csv dans un tableau
    comment importer les données d'un fichier csv dans une variable tableau?
    je m'explique :

    mon fichier CSV de 100000 lignes délimité par des ";" est composé d'une multitude de données textes et numériques que je souhaite intégrées dans une variable tableau. Après avoir appliqué la fonction split à chacune de ces lignes, j'aimerai pouvoir traiter ce tableau pour le modifier.

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Le plus simple est d'ouvrir ce fichier CSV avec un OpenText (plus besoin de split) puis de transférer le contenu des cellules dans ta variable tableau avec une instruction comme MonTableau = Range("A1:D10"), à condition d'avoir déclaré MonTableau comme une variable de type Variant sans dimensions.

  3. #3
    Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Septembre 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Septembre 2019
    Messages : 3
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Le plus simple est d'ouvrir ce fichier CSV avec un OpenText (plus besoin de split) puis de transférer le contenu des cellules dans ta variable tableau avec une instruction comme MonTableau = Range("A1:D10"), à condition d'avoir déclaré MonTableau comme une variable de type Variant sans dimensions.

    Le problème c'est que le premier terme de chaque ligne est du format "000000" que je veux transformer au format heure en "00:00:00". Or, si j'ouvre ce fichier tel quel, les 0 vont disparaître automatiquement et ce n'est pas l'objectif...
    de plus, je ne souhaite pas traiter les données sur une fiche de calcul afin d'optimiser le temps d'acquisition du programme d'où l'intérêt d'utiliser la variable tableau.

  4. #4
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par jocelynlcs Voir le message
    Le problème c'est que le premier terme de chaque ligne est du format "000000" que je veux transformer au format heure en "00:00:00". Or, si j'ouvre ce fichier tel quel, les 0 vont disparaître automatiquement et ce n'est pas l'objectif...
    Regarde le paramètre FieldInfo de OpenText : https://docs.microsoft.com/fr-FR/off...books.opentext
    Tu verras qu'il est possible d'indiquer pour un champ (ou plusieurs) que l'import se fait en tant que texte et non de valeur numérique.
    Ainsi, l'import conservera tous tes 000000.

    Avec un coup d'enregistreur automatique, tu auras 90% le code sur un plateau.

    de plus, je ne souhaite pas traiter les données sur une fiche de calcul afin d'optimiser le temps d'acquisition du programme d'où l'intérêt d'utiliser la variable tableau.
    Comme je l'ai expliqué, une fois que le fichier est ouvert, tu peux le transférer dans une variable tableau en une seule ligne très simple.
    Ce transfert effectué, tu peux fermer la feuille ouverte avec le OpenText.

    Comparer à une batterie d'instructions dans une boucle, je ne suis pas sûr que ce sera moins rapide.
    Vu que ce que je propose se fait en 3 lignes de code (4 lignes si on compte le Dim), faire un essai ne te prendra que quelques minutes.

  5. #5
    Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Septembre 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Septembre 2019
    Messages : 3
    Par défaut
    Le fait que le code ne fasse que 3-4 lignes, l'acquisition reste tout de même longue puisque je suis obliger d'ouvrir le fichier de 100000 lignes dans excel. Je viens de faire le test.

  6. #6
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par jocelynlcs Voir le message
    je suis obliger d'ouvrir le fichier de 100000 lignes dans excel.
    Passer une telle quantité de donnée d'un disque dur à la mémoire vive, ça prend forcément un certain temps.
    Si tu parviens à trouver une méthode scrutant 100000 lignes plus rapidement qu'un Open, chapeau. Moi je n'en connais pas.

    Je serais étonné (ce qui ne veut pas dire que je n'y crois pas), qu'une boucle While sur une ouverture de fichier séquentielle avec 100000 Split et une affectation à la variable indice par indice soit plus rapide.

    Il y a aussi un autre élément à avoir en tête : une variable String, c'est 10 octets à vide plus le poids des caractères eux-mêmes.
    Donc, ta variable tableau fera de base 1 Go multiplié par le nombre de colonnes de données plus le poids du fichier CSV (qui représente à peu près la taille des caractères eux-mêmes). Je te laisse faire le calcul mais j'espère que ton PC a de la mémoire, sinon il faudra prévoir une grosse swap et ça va ramer.

Discussions similaires

  1. importer un fichier csv dans un tableau
    Par student student dans le forum Débuter avec Java
    Réponses: 10
    Dernier message: 10/04/2018, 12h41
  2. [XL-2010] Import de nombreux fichiers csv dans un tableau de synthèse excel
    Par PtiCanari dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/10/2016, 01h21
  3. Réponses: 1
    Dernier message: 29/02/2012, 17h42
  4. Réponses: 1
    Dernier message: 09/01/2012, 14h49
  5. Importer un fichier CSV dans un clientdataset ?
    Par mls dans le forum Bases de données
    Réponses: 7
    Dernier message: 15/04/2005, 12h35

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