Bonjour à tous,
J'ai un problème, comme d'habitude:
j'ai un fichier csv, créé automatiquement par un logiciel, et j'aimerai l'importer par une macro dans un feuillet excel, et faire la mise en forme du tableau obtenu.
Avec le logiciel, je peux aussi obtenir un fichier txt, contenant ces mêmes informations. La macro fonctionne parfaitement avec le txt, mais le fichier csv pose problème.

Voici la partie du code chargée d'importer les lignes des fichiers, et de les ranger en colonnes, dans le cas du fichier txt.

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
 
'Ouverture et lecture du fichier à importer
Open Fichier For Input As #1
While Not EOF(1)
    Line Input #1, a
    'Copie des lignes dans excel
    ActiveSheet.Cells(NumRow + i, NumCol).Value = a
    i = i + 1
Wend
Close #1
 
'Conversion des données délimitées par une virgule
Set Plage = Range(Cells(NumRow, NumCol), Cells(NumRow + i, NumCol))
Plage.TextToColumns DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
        ConsecutiveDelimiter:=False, Comma:=True
Lorsque j'applique cela au csv, j'obtiens que la première ligne du document. En enlevant le TextToColumns, tout le document est copié dans une seule cellule .

La principale différence que je vois entre le csv et le txt est que le csv contient une ligne "sautée" au début, et trois à la fin. Les données (séparateurs ",", guillemets,...) sont identiques ensuite.
En convertissant le csv en txt, le bloc note ne parvient pas à lire les retours chariots (rectangle, comme pour les caractères inconnus)

J'ai déjà cherché sur le forum, beaucoup de solutions existent pour importer un csv dans un nouveau feuillet, mais moi, je veux l'intégrer à un feuillet déjà existant, et contenant d'autres données (d'autres csv et txt importés, en fait).
Pour l'instant, j'ai une solution temporaire, en passant par une querytable, mais celle ci insère une colonne pour chacune de ses colonnes, et décale donc le reste de mes données.

Quelqu'un a une idée pour m'aider?
Merci d'avance...