Convertir un CSV en XLS

lebarbo

XLDnaute Occasionnel
Bonjour à tous,

J'ai un code qui me permet d'enregistrer une pièce jointe quand un mail arrive dans ma boite aux lettres, mon souci c'est que la pièce jointe est en CSV et je n'arrive pas à convertir proprement le CSV en XLS pour ensuite pouvoir modifier certaines cellules en VBA.
Voici mon code :

Private Sub objInbox_ItemAdd(ByVal Item As Object)

If Item.Class = OLmail And InStr(1, Item.Subject, "Repères") > 0 Then
If Item.Attachments.Count > 0 Then
Dim objAttachments As Outlook.Attachments
Set objAttachments = Item.Attachments
For Each objAttach In objAttachments
' Does not handle duplicate filename scenarios
objAttach.SaveAsFile "C:\Mon dossier\essai.xls" '& objAttach.FileName
Next
Set objAttachments = Nothing
Call modif
End If
End If

End Sub

Donc j'enregistre ma pièce en xls, du coup les cellules sont toutes en colonne A au lieu d'être proprement réparti en fonction du point virgule. Si jamais j'essaie en code de réouvrir ce XLS et de convertir les colonnes :

''Ouverture de l'application
Set appExcel = CreateObject("Excel.Application")
''Ouverture d'un fichier Excel
Set wbExcel = appExcel.Workbooks.Open("C:\Mon dossier\essai.xls")
''wsExcel correspond à la première feuille du fichier
Set wsExcel = wbExcel.Worksheets(1)

'wsExcel.Columns("A:A").TextToColumns Destination:=wsExcel.Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1 _
), Array(14, 1), Array(15, 1), Array(16, 1), Array(17, 1), Array(18, 1), Array(19, 1), Array _
(20, 1), Array(21, 1), Array(22, 1), Array(23, 1), Array(24, 1), Array(25, 1), Array(26, 1), _
Array(27, 1), Array(28, 1), Array(29, 1), Array(30, 1), Array(31, 1), Array(32, 1), Array( _
33, 1), Array(34, 1), Array(35, 1), Array(36, 1), Array(37, 1), Array(38, 1), Array(39, 1), _
Array(40, 1), Array(41, 1), Array(42, 1), Array(43, 1), Array(44, 1), Array(45, 1), Array( _
46, 1), Array(47, 1), Array(48, 1), Array(49, 1), Array(50, 1), Array(51, 1), Array(52, 1), _
Array(53, 1), Array(54, 1), Array(55, 1), Array(56, 1), Array(57, 1), Array(58, 1), Array( _
59, 1), Array(60, 1), Array(61, 1), Array(62, 1), Array(63, 1), Array(64, 1), Array(65, 1), _
Array(66, 1), Array(67, 1), Array(68, 1), Array(69, 1), Array(70, 1), Array(71, 1), Array( _
72, 1), Array(73, 1), Array(74, 1), Array(75, 1), Array(76, 1), Array(77, 1)), _
TrailingMinusNumbers:=True


Il ne se passe visiblement pas grand chose. Je tourne en rond sans comprendre.
Merci de votre aide,
 

kjin

XLDnaute Barbatruc
Re : Convertir un CSV en XLS

Bonjour, salut Papou :),
1 - pourquoi enregistrer le fichier en xls alors que c'est un csv ?
2 - pourquoi ouvrir une nouvelle session excel ?
3 - pourquoi, vu le 1, ne pas ouvrir directement le csv pour ensuite le convertir ?
A+
kjin
 

lebarbo

XLDnaute Occasionnel
Re : Convertir un CSV en XLS

Bonjour kjin,
1- pour le convertir en xls mais ce n'est pas forcément la meilleure façon
2- parce que c'est un code dans Outlook, je dois donc ouvrir Excel pour modifier le fichier
3- pourquoi pas si ça résout mon problème ; ) mais alors comment faire pour convertir le csv en xls ?
 
Dernière édition:
G

Guest

Guest
Re : Convertir un CSV en XLS

Bonjour lebardo,
Kjin,
Papou,

Avec les paramètres strictement nécessaires, j'ai pu faire la conversion:

Code:
wsExcel.TextToColumns Destination:=wsExcel.Range("A1"), DataType:=xlDelimited, Tab:=False, Semicolon:=True

Le fichier ne respecte pas les normes .csv pouvant être traduites et ouvertes directement par la méthode OpenText avec délimiteurs ';'. Chaque ligne étant entourée par des guillemets:

"date;lieu"
"18/02/2011;lyon"
"18/02/2011;paris"


A+
 
Dernière modification par un modérateur:

lebarbo

XLDnaute Occasionnel
Re : Convertir un CSV en XLS

Bonjour Hasco, kiki29,

Le fichier joint n'est effectivement pas bon. Voici celui correspondant. Désolé pour l'erreur.
Du coup, je peux utiliser la méthode OpenText ? Comment je peux procéder ?
 

Pièces jointes

  • essai4.zip
    310 bytes · Affichages: 32
  • essai4.zip
    310 bytes · Affichages: 37
  • essai4.zip
    310 bytes · Affichages: 39
Dernière édition:
G

Guest

Guest
Re : Convertir un CSV en XLS

Bonjour,

@Kjin, je ne voudrais pas lourdement insister mais son ancien fichier csv, dont les lignes étaient entourées de guillemets:
"date;lieu"
"18/02/2011;lyon"
"18/02/2011;paris"
Ne pouvait pas être correctement interprété par OpenText. (autrement qu'en tant que colonne unique).

Il y a csv et ..csv.

A+
 

lebarbo

XLDnaute Occasionnel
Re : Convertir un CSV en XLS

Alors voici où j'en suis, j'ai modifié mon 1er code :
Private Sub objInbox_ItemAdd(ByVal Item As Object)

If Item.Class = OLmail And InStr(1, Item.Subject, "Repères") > 0 Then
If Item.Attachments.Count > 0 Then
Dim objAttachments As Outlook.Attachments
Set objAttachments = Item.Attachments
For Each objAttach In objAttachments
' Does not handle duplicate filename scenarios
objAttach.SaveAsFile "C:\Mon dossier\essai4.csv" '& objAttach.FileName
Next
Set objAttachments = Nothing
Call modif
End If
End If

End Sub

Par contre pour le deuxième à adapter j'ai vraiment du mal, désolé. Juste pour info, une fois que j'aurais réussi à le convertir je devrais ensuite tester les valeurs dans la colonne B.
 
G

Guest

Guest
Re : Convertir un CSV en XLS

Re,


Je reviens de tester sur le dernier .csv donner et ceci fonctionne correctement:

Code:
   Workbooks.Open Filename:= Chemin & "\essai4.csv"
    With ActiveWorkbook.Sheets(1).Columns(1)
        .TextToColumns Destination:=.Cells(1, 1), DataType:=xlDelimited, Tab:=False, Semicolon:=True
    End With

Remplacer chemin par le chemin vers le dossier qui contient le ficher .csv

A+
 

lebarbo

XLDnaute Occasionnel
Re : Convertir un CSV en XLS

Voici, pour le deuxième :
Set appExcel = CreateObject("Excel.Application")
''Ouverture d'un fichier Excel
Set wbExcel = appExcel.Workbooks.Open("C:\Mon dossier\essai4.csv")
''wsExcel correspond à la première feuille du fichier
Set wsExcel = wbExcel.Worksheets(1)

wsExcel.Columns("A:A").TextToColumns Destination:=wsExcel.Range("A1"), DataType:=xlDelimited, Tab:=False, Semicolon:=True

appExcel.DisplayAlerts = False
wbExcel.SaveAs "C:\Mon dossier\essai4.csv"
appExcel.DisplayAlerts = True

wbExcel.Close False 'Fermeture du classeur Excel
appExcel.Quit 'Fermeture de l'application Excel


J'ai enfin trouver l'erreur : .Columns("A:A"). à ajouter, (dans Oultook avec les constante à déclarer c'est moins évident pour trouver l'erreur je trouve)

Maintenant, mon souci c'est qu'il remplace le ";" en "," sans rien que je lui demande : (
 

Discussions similaires

Statistiques des forums

Discussions
312 228
Messages
2 086 421
Membres
103 205
dernier inscrit
zch