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 :

VBA - Importer un csv et mettre sous forme de tableau [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Gestionnaire de données
    Inscrit en
    Mai 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Gestionnaire de données

    Informations forums :
    Inscription : Mai 2011
    Messages : 44
    Par défaut VBA - Importer un csv et mettre sous forme de tableau
    Bonjour à tous.

    Je cherche à importer un fichier CSV dans un classeur Excel, et mettre sous forme de tableau le contenu importé.

    Mon code fonctionne correctement pour l'import du fichier csv.

    Concernant la mise en forme de tableau, débutante en VBA, j'utilise la fonction d'enregistrement de macro afin de récupérer le code généré lorsque je sélectionne les données et clique sur "Mettre sous forme de tableau". Malheureusement, impossible de cliquer sur "OK", et donc impossible d'obtenir un code.

    J'ai essayé de reprendre des bouts de codes trouvés sur le Web, mais à chaque fois j'obtiens une erreur d'exécution 1004 ("Un tableau ne peut pas chevaucher une plage contenant un rapport de tableau croisé dynamique, les résultats d'une requête, des cellules protégées ou un autre tableau"). Or aucun contenu n'est présent à partir de la ligne 3 de ma feuille active.

    Voici mon code :

    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
    Dim Fichier As String
     
    With ActiveSheet.QueryTables.Add(Connection:= _
            "TEXT;" & Fichier _
            , Destination:=Range("$C$3"))
            .Name = Fichier
            .FieldNames = False
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .RefreshStyle = xlOverwriteCells
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = False
            .RefreshPeriod = 0
            .TextFilePromptOnRefresh = False
            .TextFilePlatform = 1252
            .TextFileStartRow = 1
            .TextFileParseType = xlDelimited
            .TextFileTextQualifier = xlTextQualifierDoubleQuote
            .TextFileConsecutiveDelimiter = False
            .TextFileTabDelimiter = False
            .TextFileSemicolonDelimiter = True
            .TextFileCommaDelimiter = False
            .TextFileSpaceDelimiter = False
            .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1)
            .TextFileTrailingMinusNumbers = True
            .Refresh BackgroundQuery:=False
            .Delete
        End With
     
        Worksheets("Statistiques").Activate
        Cells(3, 3).Select
        Range(Selection, Selection.End(xlToRight)).Select
        Range(Selection, Selection.End(xlDown)).Select
        With ActiveSheet.ListObjects.Add(xlSrcRange, Selection, , xlYes)
            .Name = "Tableau1"
            .TableStyle = "TableStyleLight11"
        End With
    Sauriez-vous m'aider ?

    Bonne aprem

  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
    Faire des mises en forme par VBA, c'est toujours la galère. Ca oblige à faire des codes longs, compliqués et difficiles à modifier.

    Je te conseille plutôt de faire un modèle bien propre sous forme de feuille Excel, avec une seule ligne.
    Quand tu veux mettre en forme tes données,
    - tu ouvres ce modèle,
    - tu copies la ligne uniques autant de fois que tu as de lignes dans tes données sources
    - tu copies dedans tes données sources avec un PasteSpecial(xlPasteValues)
    - tu l'enregistres sous un nouveau nom.

    Ca te prendra bien moins de temps que de faire toute la mise en forme en VBA en bidouillant des bouts de macro issus de l'enregistreur automatique.
    En plus, si la mise en forme ne te convient pas (une taille de caractère ou une couleur de case qui ne convient pas), tu peux modifier très simplement le modèle sans avoir à fouiller dans le code.

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Décembre 2012
    Messages : 129
    Par défaut
    dac avec Menhir mais je préfère d'abord coller special valeur puis coller spécial format (xlPasteFormats)

  4. #4
    Membre averti
    Profil pro
    Gestionnaire de données
    Inscrit en
    Mai 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Gestionnaire de données

    Informations forums :
    Inscription : Mai 2011
    Messages : 44
    Par défaut
    Merci pour vos retours.

    Le copier-coller de format fonctionne.
    Merci.

    Après vérification, je réalise que le code me permettant d'insérer le contenu de mon fichier csv ne fonctionne pas correctement.
    Effectivement, il n'importe qu'une partie des lignes, jamais le même nombre (plus ou moins), mais surtout jamais le nombre exacte de lignes dans mon fichier (à savoir 1891 - ce nombre est amené à évoluer).

    Savez-vous pourquoi ?

    Edit :
    De temps à autre, j'ai une erreur de type "mémoire insuffisante" et je débug sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Refresh BackgroundQuery:=False

  5. #5
    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 hakkio Voir le message
    Effectivement, il n'importe qu'une partie des lignes, jamais le même nombre (plus ou moins), mais surtout jamais le nombre exacte de lignes dans mon fichier (à savoir 1891 - ce nombre est amené à évoluer).
    Savez-vous pourquoi ?
    Sans savoir quel instructions tu utilises pour charger tes données, je ne vois pas comment il serait possible de répondre.

  6. #6
    Membre averti
    Profil pro
    Gestionnaire de données
    Inscrit en
    Mai 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Gestionnaire de données

    Informations forums :
    Inscription : Mai 2011
    Messages : 44
    Par défaut
    Les instructions pour charger les données sont les suivantes :
    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
    With ActiveSheet.QueryTables.Add(Connection:= _
            "TEXT;" & Fichier _
            , Destination:=Range("$C$3"))
            .Name = Fichier
            .FieldNames = True
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .RefreshStyle = xlOverwriteCells
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .TextFilePromptOnRefresh = False
            .TextFilePlatform = 1252
            .TextFileStartRow = 1
            .TextFileParseType = xlDelimited
            .TextFileTextQualifier = xlTextQualifierDoubleQuote
            .TextFileConsecutiveDelimiter = True
            .TextFileTabDelimiter = True
            .TextFileSemicolonDelimiter = False
            .TextFileCommaDelimiter = False
            .TextFileSpaceDelimiter = False
            .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1)
            .TextFileTrailingMinusNumbers = True
            .Refresh BackgroundQuery:=False
        End With
    Le code dans son intégralité est le suivant :
    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
    Private Sub CommandButton1_Click()
     
        Dim Fichier As String
        Dim DernLigne As Long
     
        Fichier = "\\SRVNUM\Utilisateurs\amorillon\20_Coordination\30_GestionCharges\ImportStatistiques_" & Format(Date, "yyyy-mm-dd") & ".csv"
     
        Close
        Open "\\SRVNUM\Utilisateurs\amorillon\20_Coordination\30_GestionCharges\import_statistiques.bat" For Output As #1
            Print #1, "code du .bat qui exécute une requête sql"
        Close
     
        'commande pour exécuter le .bat avec invite de commande en fenêtre active
        Shell "\\SRVNUM\Utilisateurs\amorillon\20_Coordination\30_GestionCharges\import_statistiques.bat", vbNormalFocus
     
        With ActiveSheet.QueryTables.Add(Connection:= _
            "TEXT;" & Fichier _
            , Destination:=Range("$C$3"))
            .Name = Fichier
            .FieldNames = True
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .RefreshStyle = xlOverwriteCells
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .TextFilePromptOnRefresh = False
            .TextFilePlatform = 1252
            .TextFileStartRow = 1
            .TextFileParseType = xlDelimited
            .TextFileTextQualifier = xlTextQualifierDoubleQuote
            .TextFileConsecutiveDelimiter = True
            .TextFileTabDelimiter = True
            .TextFileSemicolonDelimiter = False
            .TextFileCommaDelimiter = False
            .TextFileSpaceDelimiter = False
            .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1)
            .TextFileTrailingMinusNumbers = True
            .Refresh BackgroundQuery:=False
        End With
     
     
    End Sub

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

Discussions similaires

  1. [PowerShell] Exporter au format CSV un résultat sous forme de tableau
    Par JLV1975 dans le forum Scripts/Batch
    Réponses: 18
    Dernier message: 20/05/2016, 09h04
  2. [XL-2010] Importer fichier csv vers excel sous vba
    Par Freudsw dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 23/10/2015, 23h36
  3. [XL-2010] Mettre sous forme de tableau
    Par Ginette54 dans le forum Excel
    Réponses: 4
    Dernier message: 02/03/2014, 18h22
  4. [XL-2007] Code vba :Mettre sous forme de tableau style de tableau clair 1
    Par aiglevb dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/06/2013, 12h57
  5. Réponses: 4
    Dernier message: 21/04/2006, 22h08

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