importer un fichier csv dans un classeur excel 2003 - VB/VBA/VBS - Programmation
Marsh Posté le 14-06-2008 à 04:14:18
Salut , ce code est adapté pour tourner d'XL97 à 2007, ce qui est le cas
Il permet l'import de fichiers au séparateur exotique, car sinon Excel importe sans pb les fichiers Csv
tu peux remplacer
Split97 Ar(), chaine, Sep |
par
Ar = Split(chaine, Sep) |
si tu n'en as pas besoin
De plus adapter Sep = "," au contexte
D'autre part, le code est incomplet ( drame du copier/coller )
Rajouter en tête de module
Option Explicit |
Le pb d'erreur 400 est à mon avis extérieur à ce code et tient à la manière dont tu as voulu l'adapter
Marsh Posté le 14-06-2008 à 14:02:22
Merci pour ta réponse, j'ai testé le code mais ça ne fonctionne toujours pas. En fait, le séparateur du tableau est la virgule donc je ne pense pas que le problème soit là. Ce qui est bizarre c'est que le code fonctionne sur mon ordi (quand j'enregistre sous le tableau téléchargé, il l'enregistre en tant que fichier csv avec séparateur point virgule). En revanche sur d'autres ordis le code ne fonctionne pas alors que le tableau s'enregistre avec séparateur virgule, qui est le vrai séparateur du tableau. Je ne comprend pas.
Marsh Posté le 14-06-2008 à 16:49:27
salut,Depuis XL 2002, l'export en CSV via VBA prend par défaut pour séparateur une ","
sauf si on le fait à la main : Fichier Enregistrer sous CSV (séparateur point-virgule)
Vérifier dans les Options Régionales | Personnaliser si le séparateur de listes est bien un point-virgule.
Ajouter Local:=True
|
Extrait de l'aide ne ligne sur SaveAs
Local Argument de type Variant facultatif. La valeur True enregistre les fichiers en fonction de la langue de Microsoft Excel (y compris les paramètres du Panneau de configuration). La valeur False (valeur par défaut) enregistre les fichiers en fonction de la langue de Visual Basic pour Applications (VBA) (qui est généralement l'anglais des États-Unis, sauf si le projet VBA où Workbooks.Open est exécuté est un ancien projet VBA XL5/95 de niveau international).
Marsh Posté le 16-06-2008 à 19:48:52
J'ai fini par trouver. Effectivement c'était un problème d'adaptation.
Marsh Posté le 13-06-2008 à 12:04:11
Salut, je suis une débutante dans le langage VBA. Je dois réaliser un programme qui consiste à importer un fichier csv dans un classeur excel 2003. J'ai déjà trouvé un programme sur le forum mais appliqué sur excel 97 et 2002. Quand je l'exécute, ça affiche "erreur 400". Je pense qu'il y a juste une petite erreur qui fait que ça ne marche pas. Est-ce un problème de versions Excel ? Je suis un peu perdue
Voici le code :
Sub Tst97()
Dim Fichier As Variant
ChDir ThisWorkbook.Path
Fichier = Application.GetOpenFilename("Fichier CSV (*.csv), *.csv" )
If Fichier <> False Then Lire97 Fichier
End Sub
Private Sub Lire97(ByVal NomFichier As String)
Dim chaine As String
Dim Ar() As String
Dim i As Long
Dim iRow As Long, iCol As Long
Dim NumFichier As Integer
Dim Sep As String * 1
Dim Debut As Long, Fin As Long
Debut = GetTickCount
Sep = ","
Cells.Clear
Application.ScreenUpdating = False
Close
NumFichier = FreeFile
iRow = 0
Open NomFichier For Input As #NumFichier
Do While Not EOF(NumFichier)
iCol = 1: iRow = iRow + 1
Line Input #NumFichier, chaine
Split97 Ar(), chaine, Sep
For i = LBound(Ar) To UBound(Ar)
Cells(iRow, iCol) = Ar(i)
iCol = iCol + 1
Next i
Loop
Close #NumFichier
Fin = GetTickCount
Application.StatusBar = Format((Fin - Debut) / 1000, "0.00" )
Application.ScreenUpdating = True
End Sub
Private Sub Split97(ByRef Ar() As String, ByVal s As String, ByVal sSep As String)
Dim Pos As Integer
Dim i As Long, j As Long
Erase Ar
i = 1: j = 0
Do While i < Len(s)
If Mid(s, i, 1) = sSep Then
ReDim Preserve Ar(j)
Pos = InStr(s, sSep)
Ar(j) = Left(s, Pos - 1)
s = Right(s, Len(s) - Pos)
j = j + 1: i = 0
End If
i = i + 1
Loop
ReDim Preserve Ar(j)
Ar(j) = s
End Sub