Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2641 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  importer un fichier csv dans un classeur excel 2003

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

importer un fichier csv dans un classeur excel 2003

n°1745913
Valerie22
Posté le 13-06-2008 à 12:04:11  profilanswer
 

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

mood
Publicité
Posté le 13-06-2008 à 12:04:11  profilanswer
 

n°1746347
kiki29
Posté le 14-06-2008 à 04:14:18  profilanswer
 

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
n°1746413
Valerie22
Posté le 14-06-2008 à 14:02:22  profilanswer
 

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.

n°1746451
kiki29
Posté le 14-06-2008 à 16:49:27  profilanswer
 

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
n°1747176
Valerie22
Posté le 16-06-2008 à 19:48:52  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  importer un fichier csv dans un classeur excel 2003

 

Sujets relatifs
copie feuille d'un classeur vers un autreJ2ee Struts fichier
[Windev] Intégration de fichier texte venant d'un tab sage dans un HFImporter des données d'un fichier .txt dans bdd
Probleme : Executer un fichier bat sans le sauvegarderProblème fonction excel
Comparer lignes d'un fichier avec enregistrements tabletype d'acces dans un fichier binaire en C
Parser un fichier XML 
Plus de sujets relatifs à : importer un fichier csv dans un classeur excel 2003


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR