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 :

Macro importation .csv [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2012
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2012
    Messages : 4
    Par défaut Macro importation .csv
    Bonjour le forum!

    Je suis débutant avec les macros et VBA, et j'ai besoin d'un petit coup de pouce.
    Voilà la situation: j'aimerais importer les données brutes d'un fichier .csv dans le deuxième onglet de mon fichier xls. J'aimerais que la macro demande à l'utilisateur le chemin d'accès vers ce fichier .csv, puis que la macro copie les lignes du fichier .csv dont la première case contient le mot "Porosité" + les deux premières lignes. Dernière contrainte, il faudrait que tout soit copié dans la case A3 du deuxième onglet de mon fichier .xls (onglet nommé "Imported Data").

    C'est assez spécifique comme demande, j'en suis conscient, et pour le moment tout ce que j'arrive à faire c'est faire apparaître la fenêtre "Ouvrir" de Excel, sauf que même ca ce n'est pas très au point (en gros quand j'ouvre le fichier .csv, il y a des problèmes de compatibilité).

    Donc si quelqu'un pouvait me donner le code qui me permet de faire tout ca, j'en serai très reconnaissant (je veux bien quelques explications sur le fonctionnement du code aussi).

    Merci à toutes les bonnes âmes qui voudront m'aider!

    Fred

  2. #2
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Bonjour,

    Ce code importe un fichier CSV dans l'onglet actif

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    Sub Import_Fichier()
     
    Dim file As FileDialog
    Dim strLigne As String
    Dim str() As String
     
    Dim i As Integer
    Dim Ligne As Long
     
    'Choix du fichier à importer
    Set file = Application.FileDialog(msoFileDialogFilePicker)
    file.Filters.Clear
    file.Filters.Add "Fichier CSV", "*.csv"
    file.Title = "Fichier à importer"
     
    If file.Show = False Then
        Exit Sub
    End If
     
    Ligne = 1
     
    'Ouverture du fichier
    Open file.SelectedItems(1) For Input As #1
     
    'Boucle sur les lignes du fichier
    Do While Not EOF(1)
     
        Line Input #1, strLigne
        str() = Split(strLigne, ";") 'séparateur ;
     
        'Pour chaque colonne
        For i = 0 To UBound(str)
            Cells(Ligne, i + 1).Value = str(i)
        Next i
     
        Ligne = Ligne + 1
     
    Loop
     
    Close #1
     
     
    End Sub

  3. #3
    Futur Membre du Club
    Inscrit en
    Juin 2012
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2012
    Messages : 4
    Par défaut
    Bonjour Jerôme et merci pour votre réponse.

    J'ai essayé votre code, et je rencontre deux soucis: quand le fichier s'importe, (il s'agit de nombres décimaux), le séparateur pris en compte est la virgule et pas le ; (alors que dans le code il est spécifié séparateur = . J'ai donc essayé de trouver dans les options Excel comment modifier ca, sans succès. Avez-vous une piste?

    Deuxième problème, lorsque je lance la macro, les valeurs sont copiées (certes pas correctement mais au moins c'est un début), mais Excel devient inutilisable. Il continue à mouliner comme si il était dans une boucle infinie (je pense). Or je n'arrive pas à comprendre tout le code que vous m'avez donné, donc je n'arrive pas à voir d'où vient le problème.

    Merci pour votre aide.

    Frédéric

  4. #4
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    J'ai essayé votre code, et je rencontre deux soucis: quand le fichier s'importe, (il s'agit de nombres décimaux), le séparateur pris en compte est la virgule et pas le ; (alors que dans le code il est spécifié séparateur = . J'ai donc essayé de trouver dans les options Excel comment modifier ca, sans succès. Avez-vous une piste?
    Sur la ligne 29 de mon précédent code il y a un commentaire. Il ne devrait pas être difficile d'adapter à la virgule

    Deuxième problème, lorsque je lance la macro, les valeurs sont copiées (certes pas correctement mais au moins c'est un début), mais Excel devient inutilisable. Il continue à mouliner comme si il était dans une boucle infinie (je pense). Or je n'arrive pas à comprendre tout le code que vous m'avez donné, donc je n'arrive pas à voir d'où vient le problème.
    Le temps d'exécution dépend de beaucoup de la taille du fichier à importer
    Pour gager du temps, on peux désactiver l'affichage et les calculs
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    Sub Import_Fichier()
     
    Dim file As FileDialog
    Dim strLigne As String
    Dim str() As String
     
    Dim i As Integer
    Dim Ligne As Long
     
    'Choix du fichier à importer
    Set file = Application.FileDialog(msoFileDialogFilePicker)
    file.Filters.Clear
    file.Filters.Add "Fichier CSV", "*.csv"
    file.Title = "Fichier à importer"
     
    If file.Show = False Then
        Exit Sub
    End If
     
    Ligne = 1
     
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
     
    'Ouverture du fichier
    Open file.SelectedItems(1) For Input As #1
     
    'Boucle sur les lignes du fichier
    Do While Not EOF(1)
     
        Line Input #1, strLigne
        str() = Split(strLigne, ";") 'séparateur ;
     
        'Pour chaque colonne
        For i = 0 To UBound(str)
            Cells(Ligne, i + 1).Value = str(i)
        Next i
     
        Ligne = Ligne + 1
     
    Loop
     
    Close #1
     
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
     
    End Sub

  5. #5
    Futur Membre du Club
    Inscrit en
    Juin 2012
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2012
    Messages : 4
    Par défaut
    Bonsoir et désolé pour le silence,

    J'ai testé le code et j'ai réussi à m'en sortir avec l'importation, merci beaucoup.

    J'ai désormais un nouveau soucis: je traite environ 10 000 lignes, et les macros mettent un certains temps à s'exécuter. Le problème c'est qu'on a l'impression que le programme plante, ce n'est pas le cas puisqu'après 10 minutes tout est normal et les macros sont finies et les résultats affichés. Mais j'aimerais créer une barre de progression, un truc assez visuel pour qu'un utilisateur lambda ne ferme pas excel car il pense que tout est planté.

    J'ai pas mal chercheé sur le net, mais je n'arrive pas à m'en sortir. Tous les codes que j'ai essayés ont abouti à un échec. Je n'arrive pas à comprendre pourquoi, mais par exemple pour certains d'entre eux, je dois utiliser des lignes du style "F_BarreAttente.show", et excel me dit qu'il ne connaît pas cet objet. J'ai vraiment essayé pleins de trucs mais je ne m'en sors pas.. Si quelqu'un pouvait m'aider avec ca, ca me serait d'une grande aide. (Je précise au passage que ma macro utilise une boucle à un moment, et j'ai cru comprendre que c'était ce qui servait à créer la barre. la boucle va de 10 000 à 1 par pas de -1).

    Et merci encore à Jerôme.

    Bien cordialement,
    Fred

  6. #6
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, la solution minimaliste est de placer dans la boucle Do ... Loop qqch comme Application.StatusBar = Ligne

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Macro Access import CSV et move files
    Par jicayom dans le forum VBA Access
    Réponses: 3
    Dernier message: 28/01/2015, 17h11
  2. Macro - Importation .csv en UTF-8
    Par alpking dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 05/08/2009, 17h08
  3. [Macro]Problème d'importation .CSV avec macro
    Par Eric Harvey dans le forum VBA Access
    Réponses: 8
    Dernier message: 12/04/2007, 17h04
  4. import csv décimale
    Par gIch dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 13/12/2005, 12h46
  5. Importation CSV vers base de données
    Par Brice Yao dans le forum Bases de données
    Réponses: 1
    Dernier message: 29/06/2005, 13h42

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