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

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Import Csv sous Excel 97

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Import Csv sous Excel 97

n°1607927
ceryal28
Posté le 04-09-2007 à 10:24:08  profilanswer
 

Bonjour à tous :)
 
Je débute en VB et je cherche à faire un truc tout simple :
 
Je clique sur un bouton ( ça ça va encore :p ) qui me fait un l'import d'un fichier csv dans une feuille prédéfinie du classeur, le tout bien évidemment en remplaçant les ; par des colonnes distinctes.
 
Mon souci est que j'ai du mal à trouver un code pour faire ça. J'en ai trouvé un ou deux mais à chaque fois il y a une instruction qui pose pb ( genre la fonction split qui n'est pas sous excel 97 par exemple )
 
Pour résumer : import d'un fichier csv sur une feuille précise d'un classeur excel 97
 
Merci d'avance pour votre aide.

mood
Publicité
Posté le 04-09-2007 à 10:24:08  profilanswer
 

n°1607939
durkheim
Posté le 04-09-2007 à 10:31:51  profilanswer
 

Je sais pas toi, mais quand j'ouvre un fichier csv par excel, il reconbnait le format et charge les infos dans les cases tout seul hein. Ou alors le séparateur de colonnes est pas le bon.

n°1607982
ceryal28
Posté le 04-09-2007 à 11:35:37  profilanswer
 

Le but n'est pas d'ouvrir les fichiers sous excel ( on fait ouvrir > csv et il fait les colonnes toutes seules ) mais de l'importer dans un .xls déjà existant avec des feuilles déja existantes.
 
Si je fais ouvrir le .csv, il m'ouvre dans un nouveau classeur, moi je veux l'importer dans un classeur déjà existant.

n°1608071
kiki29
Posté le 04-09-2007 à 14:24:44  profilanswer
 

N'ayant pas 97 sera peut-être à adapter
Placer dans un Module

Option Explicit
Declare Function GetTickCount Lib "kernel32" () As Long
 
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 separateur As String * 1
 
    separateur = ";"
    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
            Ar = Split97(Chaine, separateur)
            For i = LBound(Ar) To UBound(Ar)
                Cells(iRow, iCol) = Ar(i)
                iCol = iCol + 1
            Next i
        Loop
    Close #NumFichier
     
    Application.ScreenUpdating = True
End Sub
 
Private Function Split97(ByVal s As String, ByVal sSep As String)
Dim Tableau() As String
Dim sStr As String, Pos As Integer
Dim i As Long, j As Long
    Erase Tableau
    sStr = s
    i = 1: j = 0
    Do While i < Len(sStr)
        If Mid(sStr, i, 1) = sSep Then
            ReDim Preserve Tableau(j)
            Pos = InStr(sStr, sSep)
            Tableau(j) = Left(sStr, Pos - 1)
            sStr = Right(sStr, Len(sStr) - Pos)
            j = j + 1: i = 0
        End If
        i = i + 1
    Loop
    ReDim Preserve Tableau(j)
    Tableau(j) = sStr
    Split97 = Tableau
End Function


Message édité par kiki29 le 05-10-2007 à 23:27:22
n°1608094
ceryal28
Posté le 04-09-2007 à 15:04:57  profilanswer
 

j'avais trouvé un script dans ce genre qui me parait pas mal mais il me fait une erreur au niveau :
 
Ar = Split97(Chaine, separateur)
 
Erreur de compilation : impossible d'affecter à un tableau :(

n°1608347
kiki29
Posté le 05-09-2007 à 08:49:28  profilanswer
 

Peut-être que tes fichiers Csv nécessiteraient un Nettoyage du style
http://forum.hardware.fr/hfr/Progr [...] 7546_1.htm , encore à adapter puisque certaines instructions n'existent pas dans XL97


Message édité par kiki29 le 05-09-2007 à 23:07:47
n°1608359
tegu
Posté le 05-09-2007 à 09:19:56  profilanswer
 

C'est le « Dim Ar() As String » qui pose problème
En Excel97 il faut écrire simplement « Dim Ar » (déclaration de type variant)

Voir plus bas.


Message édité par tegu le 05-09-2007 à 20:52:41
n°1608363
kiki29
Posté le 05-09-2007 à 09:31:15  profilanswer
 

Saint Cloud Tegu, et donc également le Tableau() du Split97, n'ayant plus 97 je n'ai pas pu le vérifier.@+


Message édité par kiki29 le 05-09-2007 à 21:14:28
n°1608680
tegu
Posté le 05-09-2007 à 20:56:26  profilanswer
 

J'ai lu trop vite et confondu avec une autre particularité d'Excel97, désolé.
Le problème est la déclaration de la fonction Split97()
Elle doit renvoyer un tableau de String et sa déclaration devrait être

Private Function Split97(ByVal s As String, ByVal sSep As String) As String()

« Ar », ainsi que « Tableau » sont bien déclarés a priori (pas de Excel 97 sous la main).
Navré de la méprise.

n°1608712
kiki29
Posté le 05-09-2007 à 22:40:43  profilanswer
 

Solution testée sous XL97 ( sorti des décombres ) et XL2002  
Placer dans un Module

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


Message édité par kiki29 le 05-10-2007 à 23:27:05
mood
Publicité
Posté le 05-09-2007 à 22:40:43  profilanswer
 

n°1608800
ceryal28
Posté le 06-09-2007 à 10:50:52  profilanswer
 

Super ca fonctionne :)
 
Merci Bcp :)


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

  Import Csv sous Excel 97

 

Sujets relatifs
Problème d'import de dllProbleme excel/vb
piloter un fichier excel intégré dans un fichier wordCode en vb dans Excel -> comment faire un .exe
ouvrir un fichier word avec bouton macro excel[Excel] Envoyer le contenu d'une cellule XL par mail ?
[VBA] Via Macro Excel, Ouvrir & Editer fichier CSV [RÉSOLU]avec une macro Excel, ouvrir un fichier sous un autre logiciel
Ouvrir Word et Excel en javascript 
Plus de sujets relatifs à : Import Csv sous Excel 97


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