Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

import csv vers excel sur plusieurs feuilles

  • Initiateur de la discussion Initiateur de la discussion jeffe
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

jeffe

XLDnaute Impliqué
Bonjour à tous et toutes,
J'ai 400 fichiers csv de 300 lignes. (soit 120000 lignes pour 65536 pour excel)
Tous sont rangés dans le meme repertoire. ils onts tous un nom différent . La trame du csv est toujours identique
voici un exemple de fiche csv
je cherche une macro qui me permette d'importer toutes ces données soit sur plusieurs feuilles oubien sur la même feuille dans de colones differentes decallées

merci pour votre aide
 

Pièces jointes

Re : import csv vers excel sur plusieurs feuilles

Salut,

Un petit exemple ci-dessous.
Code:
Option Explicit

Sub ImportCsv()
    Dim Derlig As Long
    Dim Col As Byte
    Dim NbrLigMaxCsv As Integer
    Dim Dossier As String, Fichier As String

    Dossier = ThisWorkbook.Path
    
    NbrLigMaxCsv = 300
    Derlig = 1
    Col = 1
    Fichier = Dir(ThisWorkbook.Path & "\*.csv")
    
    With ActiveSheet
        .Cells.ClearContents
        Do While Fichier <> ""
            With .QueryTables.Add(Connection:="TEXT;" & Dossier & "\" & Fichier, Destination:=.Cells(Derlig, Col))
                .TextFileStartRow = IIf(Derlig = 1, 1, 2)
                .TextFileParseType = xlDelimited
                .TextFileConsecutiveDelimiter = True
                .TextFileOtherDelimiter = """"
                .TextFileColumnDataTypes = Array(9, 9, 4, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1)
                .Refresh
                .Delete
            End With
            Derlig = .Range("A65536").End(xlUp).Row + 1
            
            If Derlig + NbrLigMaxCsv > 65536 Then
                Derlig = 1
                Col = .Range("IV1").End(xlToLeft).Column + 2
            End If
            Fichier = Dir
        Loop
    End With
End Sub
Ici on met tout dans la meme feuille en decalant si on atteint le nombre
max de lignes de la feuille. Plus precisement, si la derniere ligne rempli plus
NbrLigMaxCsv depasse 65536 lignes.
 
Dernière édition:
Re : import csv vers excel sur plusieurs feuilles

bonjour Micick, le forum
je viens de crer le fichier avec ta macro qui semble fonctionner, crois tu quil soie possible de rajouter lors de l'import des colonnes suplementaires pour faire des calculs ?
2ème question, lors de l'import, on peut convertir les dates , et les textes en nombre
voici le fichier
merci pour votre aide
 

Pièces jointes

Re : import csv vers excel sur plusieurs feuilles

Salut,

Essaie ceci:
Code:
Option Explicit

Sub ImportCsv()
    Dim Derlig As Long
    Dim Col As Byte
    Dim NbrLigMaxCsv As Integer
    Dim Dossier As String, Fichier As String

    Dossier = ThisWorkbook.Path
    
    NbrLigMaxCsv = 300
    Derlig = 1
    Col = 1
    Fichier = Dir(ThisWorkbook.Path & "\*.csv")
    
    With ActiveSheet
        .Cells.ClearContents
        Do While Fichier <> ""
            With .QueryTables.Add(Connection:="TEXT;" & Dossier & "\" & Fichier, Destination:=.Cells(Derlig, Col))
                .TextFileStartRow = IIf(Derlig = 1, 1, 2)
                .TextFileParseType = xlDelimited
                .TextFileConsecutiveDelimiter = True
                .TextFileOtherDelimiter = """"
                .TextFileColumnDataTypes = Array(9, 9, 4, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1)
                .Refresh
                .Delete
            End With
            Derlig = .Range("A65536").End(xlUp).Row + 1
            
            If Derlig + NbrLigMaxCsv > 65536 Then
                Call SeparateurDecimal(Derlig, Col)
                Call AjoutCalculs(Derlig, .Range("IV1").End(xlToLeft).Column + 1)
                Derlig = 1
                Col = .Range("IV1").End(xlToLeft).Column + 2
            End If
            Fichier = Dir
        Loop
        
        If Derlig <> 1 Then
            Call SeparateurDecimal(Derlig, Col)
            Call AjoutCalculs(Derlig, .Range("IV1").End(xlToLeft).Column + 1)
        End If
        
        .UsedRange.Columns.AutoFit
    End With
End Sub

Sub SeparateurDecimal(Derlig As Long, ColDeb As Byte)
    With ActiveSheet
        With .Range(.Cells(2, ColDeb), .Cells(Derlig, .Range("IV1").End(xlToLeft).Column))
            Application.DisplayAlerts = False
                If Application.DecimalSeparator = "." Then
                    .Replace what:=",", replacement:=".", lookat:=xlPart
                Else
                    .Replace what:=".", replacement:=",", lookat:=xlPart
                End If
            Application.DisplayAlerts = True
        End With
    End With
End Sub

Sub AjoutCalculs(Derlig As Long, ColDeb As Byte)
    With ActiveSheet
        .Cells(1, ColDeb).Value = "Concentration" & vbLf & "de vapeur dans l'air"
        .Cells(1, ColDeb + 1).Value = "Pression de" & vbLf & "saturation"
        .Cells(1, ColDeb + 2).Value = "Pression de" & vbLf & "vapeur d 'eau"
        .Cells(1, ColDeb + 3).Value = "Entalpie ext"
        
        .Cells(2, ColDeb).FormulaR1C1 = "=(0.62*RC[2])/(96506-RC[2])"
        .Cells(2, ColDeb + 1).FormulaR1C1 = "=610.78*EXP((RC[-3]/(RC[-3]+238.3))*17.2694)"
        .Cells(2, ColDeb + 2).FormulaR1C1 = "=RC[-3]*(RC[-1]/100)"
        .Cells(2, ColDeb + 3).FormulaR1C1 = "=((1.007*RC[-5]-0.026)+(RC[-3]*(2501+1.84*RC[-5])))"
        
        With .Range(.Cells(2, ColDeb), .Cells(Derlig, ColDeb + 3))
            .FillDown
            Application.Calculate
            '***************************************************************************
            ' Partie a commenter si tu veux conserver les formules dans les cellules
            .Copy
            .PasteSpecial Paste:=xlPasteValues
            '***************************************************************************
        End With
    End With
End Sub
 
Re : import csv vers excel sur plusieurs feuilles

Hello Minick,
je viens d'essayer, ça à l'air de fonctionner parfaitement

J'ai une erreur cette ligne:If Application.DecimalSeparator = "." Then (methode non gérée par cet objet) j'ai supprimé cette partie et cela semble fonctionner

il y a une ligne que je n'arrive pas à comprendre malgrés l'aide:

TextFileColumnDataTypes = Array(9, 9, 4, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1)
quand j'utilise l'enregistreur j'obtiens:
.TextFileColumnDataTypes = Array(9, 4, 1, 1, 1, 1, 1)

peux tu m'expliquer
merci
 
Re : import csv vers excel sur plusieurs feuilles

Salut,

Apparemment la propriete DecimalSeparator ne doit pas exister sous Xl2000...

Array(9, 9, 4, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1) correspond aux colonnes du fichier csv et leur format de sortie.

  • 9 -> on ne reprend pas
  • 4 -> format date JMA
  • 1 -> standard
Pourquoi j'ai plus de colonne? cela doit etre du au separateur de champs utilise.
J'ai du utiliser les guillemets car avec la virgule ca ne fonctionne pas chez moi
(tous les 9 correspondent d'ailleurs aux virgules).
 
Re : import csv vers excel sur plusieurs feuilles

hello, merci pour la reponce ultra rapide, nikel je change mon format date et c'est tout bon

d'ou tu as trouvé ces info 9, 4 etc

merci beaucoup et bon we
 
Re : import csv vers excel sur plusieurs feuilles

Je les connais par habitude mais en faisant F1 sur TextFileColumnDataTypes
tu auras les equivalents en constantes xl pour les autres
(pour etre precis c'est une enumeration de constantes)
 
Dernière édition:
Re : import csv vers excel sur plusieurs feuilles

hello, je reviens vers vous pour un legr bub de transfert:
malgrés cette ligne, je recopie l'entete de chaque fichier ouvert
Code:
.TextFileStartRow = IIf(Derlig = 1, 1, 2)
si vous avez une idée
j'ai essayé de demarrer à partir de la 2ème ligne mais j'ai un msg d'erreur : La selection est trop grande (filldown est surligné)
Code:
   With .Range(.Cells(2, ColDeb), .Cells(Derlig, ColDeb + 3))
            .FillDown

merci
 
Re : import csv vers excel sur plusieurs feuilles

Salut,

Je n'arrive pas a reproduire l'erreur, j'ai essaye avec un fichier de 65000 lignes
et ca passe sans probleme et je n'ai l'entete que sur les fichiers qui commencent une nouvelle colonne.
Je ne comprend pas 😕

Peux tu mettre ton code, il y a peut etre quelque chose qui cloche.
 
Re : import csv vers excel sur plusieurs feuilles

oups en voyant ton mail j'ai eu comme un doute et ai reverifié le code, effectivement ya eu un probleme de recopie
encore toutes mes excuses pour cette panique je dois rendre cette etude demain : leger stress)
Je te remercie beaucoup de l'aide apportée et encore une fois désolé
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

L
Réponses
2
Affichages
2 K
L
L
  • Question Question
Réponses
7
Affichages
6 K
Y
Réponses
37
Affichages
24 K
P
Réponses
0
Affichages
988
P
P
Réponses
0
Affichages
637
Pliskhy
P
S
Réponses
10
Affichages
3 K
sophievba
S
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…