IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Import Csv dans un classeur existant Excel 97


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2
    Par défaut Import Csv dans un classeur existant Excel 97
    Bonjour à tous,

    je cherche à importer un fichier Csv dans un classeur excel 97 via une macro ( je précise bien dans un classeur existant sinon il me suffirait de faire "ouvrir" )

    J'ai ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    Option Explicit 
    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
    Le souci c'est qu'il me plante sur la ligne : Ar = Split97(Chaine, separateur) avec le message "impossible d'affecter à un tableau"

    Je précise que je suis sous Excel 97 ( c'est pour le taf et ya des excels 97 dans le tas, donc il faut que ca marche dessus :/ ) et que c'est pour ca que j'ai une fonction Split97 car la fonction Split n'est pas dispo sous Excel97.

    Merci d'avance

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Par défaut
    bonsoir

    Après plusieurs essais, je ne réussis pas à reproduire ton message d'erreur.

    Ton fichier csv a des particularités?


    michel

  3. #3
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Solution Testée sous XL97 ( sorti des décombres )
    Placer dans un Module
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Option Explicit
    Declare Function GetTickCount Lib "kernel32" () As Long
    Dans ThisWorkbook
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    Option Explicit
    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

  4. #4
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2
    Par défaut
    décidement tu es partout kiki29 :p

    Merci encore

  5. #5
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Résolu?

    ==>
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Un csv est un txt avec extension csv... ("Pourvou qué ça doure !")
    Si tu n'arrives pas à ouvrir un csv avec Excel 97 avec séparateur ";" c'est que tu n'utilises pas la bonne méthode. Regarde à cette adresse, ça te simplifiera la vie.
    Avant de l'ouvrir, tu renommes ton fichier .txt avec name ancienNom as nouveauNom, tu l'ouvres en tant que txt et là tu as la "recette" ici, la première. Plus de split97... plus de message d'erreur.

Discussions similaires

  1. Importer un fichier csv dans un classeur excel
    Par olivverte dans le forum Excel
    Réponses: 14
    Dernier message: 15/11/2013, 16h59
  2. Importer correctement un fichier .csv dans un classeur
    Par youpitralala dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 11/02/2011, 10h46
  3. Importation d'un fichier CSV dans un classeur ouvert
    Par mamax29 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 31/05/2010, 16h03
  4. Importer CSV dans MySQL
    Par The_freeman dans le forum Administration
    Réponses: 6
    Dernier message: 14/02/2006, 22h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo