Impotation CSV
Bonjour
J'ai une macro pour importer les données d'un fichier CSV.Pour l'instant mon code fonctionne pour 30 données, je vais devoir faire la même chose pour beaucoup plus de données hors dans mon code j'ai ceci :
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
Y a t-il un moyen d'écrire ce code plus simplement pour faire l'importation de la donnée 1 à la donnée X (ou X correspond à la dernière donnée du CSV.
Merci pour votre aide
Personne n'a d'idée à me proposer ?
Bonjour,
Peut-être avec un exemple de CSV et le code que tu utilises tu auras des réponses
Bonjour
Désolé pour mon retard à répondre.
Voici un exemple de CSV que j'utilise :
Et le code VBA dont je me sert pour faire l'importation :
Sub ImportationCSV()
Dim Page1,Page2 As Worksheet
Dim Fichier As Variant
Dim Nom As Name
Dim Urlapi As String
Set Page1 = Worksheets("Page1")
Set Page2 = Worksheets("Page2")
Urlapi = "http://xxx.xxx.xxx.xx/folder/XXXXXX/XXXXXXXX/"
Fichier = Application.GetOpenFilename("Fichiers csv (*.csv),*.csv")
If Fichier = False Then
Exit Sub
Else
Page2.Rows("39:40").Delete 'Shift:=xlUp
With Page2.QueryTables.Add(Connection:="TEXT;" & Fichier, Destination:=Page2.Range("$A$39"))
'.Name = "datas"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
Page2.Range("A40:AK40").NumberFormat = "0.00"
Page2.Cells.EntireColumn.AutoFit
End With
'traitement des données pour mise en page dans la Page1
Page1.Range("Url") = Urlapi
Page1.Range("file_csv") = Mid(Fichier, InStrRev(Fichier, "\") + 1)
Page1.Range("precision_api") = Page2.Range("E40").Value
Page1.Range("ecarttype_api") = Page2.Range("F40").Value
Page1.Range("moyenne_api") = Page2.Range("G40").Value
Page2.Range("H40:AK40").Copy
Page1.Range("doses").PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Transpose:=True
Application.CutCopyMode = False
If MsgBox("Voulez enregistrer la fiche de test ?", vbYesNo, "Enregistrement de la fiche") = vbYes Then
Page1.Range("info_importation") = "Importation des données via fichier CSV"
Call Enregistrement
Else
Page1.Range("Url").ClearContents
Page1.Range("file_csv").ClearContents
Page1.Range("precision_api").MergeArea.ClearContents
Page1.Range("ecarttype_api").MergeArea.ClearContents
Page1.Range("moyenne_api").MergeArea.ClearContents
Page1.Range("info_importation").MergeArea.ClearContents
Page1.Range("doses").ClearContents
Page2.Rows("39:40").Delete
'Rechercher les plages nommées contenant le terme DonnéesExternes_ et les effacer
For Each Nom In ActiveWorkbook.Names
If Nom.Name Like "*DonnéesExternes_*" Then Nom.Delete
Next Nom
Exit Sub
End If
End If
End Sub
Dans ce cas j'ai systématiquement le même nombre de données à importer mais je voudrais avoir la possibilité de pouvoir importer un CSV dont le nombre de données serait variables.
Je pense que cela doit se jouer au niveau de cette ligne :
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
Mais je ne sais pas comment la modifier.
Merci pour votre aide.
Bonjour
Personne n'a de solutions à me proposer où il manque des éléments pour trouver une solution ?