importer un fichier csv dans un classeur excel 2003

importer un fichier csv dans un classeur excel 2003 - VB/VBA/VBS - Programmation

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

Reply

Marsh Posté le 13-06-2008 à 12:04:11   

Reply

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
Private Declare Function GetTickCount Lib "kernel32" () As Long


 
Le pb d'erreur 400 est à mon avis extérieur à ce code et tient à la manière dont tu as voulu l'adapter


Message édité par kiki29 le 14-06-2008 à 04:45:52
Reply

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.

Reply

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
 


ActiveWorkbook.SaveAs Filename:="C:\tmp\cpp+\test4.csv", FileFormat:=xlCSV, CreateBackup:=False,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).


Message édité par kiki29 le 14-06-2008 à 16:53:34
Reply

Marsh Posté le 16-06-2008 à 19:48:52    

J'ai fini par trouver. Effectivement c'était un problème d'adaptation.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed