Exploiter Données fichiers csv sur excel

Exploiter Données fichiers csv sur excel - VB/VBA/VBS - Programmation

Marsh Posté le 30-10-2007 à 17:40:53    

Bonjour,
 
Je dois réaliser un programme en VBA sur excel me permettant de charger plusieurs fichiers csv (qui contiennent chacun des données différentes) et les mettre en mémoire dans mon fichier Excel afin d'utiliser ces données.
Etant débutant dans la programmation en VBA sur Excel, je suis seulement arrivé a selectionner mes fichiers csv (Avec la fonction Application.GetOpenFilename("Fichier CSV (*.csv),*.csv" ) )
 
Je ne connait pas le code VBA pour mémoriser les données de ces fichiers après les avoir sélectionnés et je ne sais pas non plus comment utiliser seulement certaines données de chaque fichier..
 
Si quelqu'un connait la solution, merci de poster une reponse.
Merci d'avance

Reply

Marsh Posté le 30-10-2007 à 17:40:53   

Reply

Marsh Posté le 30-10-2007 à 17:52:41    

Là, tu ne les mémorises pas, si tu avais lu l'aide, tu noteras que application.getopenfilename te renvoie seulement le chemin vers le fichier
du coup, tu affectes cette valeur à une variable, ensuite, si ta variable est différente de fausse, tu la donne en paramètre de workbooks.open
 
Par contre, Excel gère assez mal les CSV, il les met directement en forme à l'ouverture... Du coup, quand tu as des formats à respecter, c'est plutôt gênant vu qu'il te "casse" tout dès l'ouverture

Reply

Marsh Posté le 30-10-2007 à 17:56:41    

Ce code met a jour un fichier Excel avec un fichier csv :
 
 
Sub CorrespTitres()
 
Set TSMBk = Workbooks.Open(Filename:="C:\Medialand\baseAscii\titres_ojd.csv" )
Set TSMSht = TSMBk.Worksheets(1)
Set CouplBk = Workbooks.Open(Filename:="C:\Medialand\baseAscii\support_bdd.csv" )
Set CouplSht = CouplBk.Worksheets(1)
 
'Suppression des Espaces dans Fichier Correspondance
NbLineCorresp = CorrespSht.Cells(65536, 1).End(xlUp).Row
For A = 2 To NbLineCorresp
For B = 1 To 5
    CorrespSht.Cells(A, B) = Trim(CorrespSht.Cells(A, B))
Next B
Next A
 
'Tri Fichier Correspondance
CorrespSht.Cells.Sort Key1:=CorrespSht.Cells(1, 1), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
 
'A/ SUPPORT_BDD.CSV
 
'Transformation CSV >> XLS
'1/ Rétablissement des Virgules
With CouplSht
    NbLineCoupl = .Cells(65536, 2).End(xlUp).Row
    If NbLineCoupl > 1 Then
        For A = 1 To NbLineCoupl
            If .Cells(A, 256).End(xlToLeft).Column > 1 Then
                For B = 2 To .Cells(A, 256).End(xlToLeft).Column
                    .Cells(A, 1) = .Cells(A, 1) & "," & .Cells(A, B)
                Next B
            End If
        Next A
        Range(.Cells(1, 2), .Cells(NbLineCoupl, 256)).Clear
    End If
     
    '2/ Séparation des champs
    Application.DisplayAlerts = False
     
    .Columns(1).TextToColumns Destination:=Range("A1" ), DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
    Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
    :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
    Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1 _
    ), Array(14, 1), Array(15, 1), Array(16, 1), Array(17, 1), Array(18, 1), Array(19, 1), Array _
    (20, 1), Array(21, 1), Array(22, 1), Array(23, 1)), TrailingMinusNumbers:=True
     
    Application.DisplayAlerts = True
     
    'MAJ Fichier Correspondance
    NbLineCoupl = .Cells(65536, 1).End(xlUp).Row
    NbLineCorresp = CorrespSht.Cells(65536, 1).End(xlUp).Row
    For A = 1 To NbLineCoupl
     
        'Cas Code TSM Numérique
        If IsNumeric(.Cells(A, 3)) Then
         
            'Cas Code TSM Présent dans Fichier Correspondance
            If Not IsError(Application.Match(.Cells(A, 3), Range(CorrespSht.Cells(2, 2), CorrespSht.Cells(NbLineCorresp, 2)), 0)) Then
                B = Range(CorrespSht.Cells(1, 2), CorrespSht.Cells(NbLineCorresp, 2)).Find(what:=Trim(.Cells(A, 3)), lookat:=xlWhole).Row
                CorrespSht.Cells(B, 1) = Trim(.Cells(A, 1))
                 
            'Code TSM Absent
            Else
                CorrespSht.Cells(NbLineCorresp + 1, 2) = Trim(.Cells(A, 3))
                CorrespSht.Cells(NbLineCorresp + 1, 1) = Trim(.Cells(A, 1))
                NbLineCorresp = NbLineCorresp + 1
            End If
         
        'Autres Cas
        Else
            If Not IsError(Application.Match(Trim(.Cells(A, 3)), Range(CorrespSht.Cells(2, 2), CorrespSht.Cells(NbLineCorresp, 2)), 0)) Then
                B = Range(CorrespSht.Cells(1, 2), CorrespSht.Cells(NbLineCorresp, 2)).Find(what:=Trim(.Cells(A, 3)), lookat:=xlWhole).Row
                CorrespSht.Cells(B, 1) = Trim(.Cells(A, 1))
            Else
                CorrespSht.Cells(NbLineCorresp + 1, 2) = Trim(.Cells(A, 3))
                CorrespSht.Cells(NbLineCorresp + 1, 1) = Trim(.Cells(A, 1))
                NbLineCorresp = NbLineCorresp + 1
            End If
        End If
    Next A
End With
 
'B/ TITRE_OJD.CSV
 
'Transformation CSV >> XLS
'1/ Rétablissement des Virgules
With TSMSht
    NblineTSM = .Cells(65536, 1).End(xlUp).Row
    If .Cells(65536, 2).End(xlUp).Row > 1 Then
        For A = 2 To NblineTSM
            If .Cells(A, 256).End(xlToLeft).Column > 1 Then
                For B = 2 To .Cells(A, 256).End(xlToLeft).Column
                    .Cells(A, 1) = .Cells(A, 1) & "," & .Cells(A, B)
                Next B
            End If
        Next A
        Range(.Cells(1, 2), .Cells(NblineTSM, 256)).Clear
    End If
     
    '2/ Séparation des Champs
    Application.DisplayAlerts = False
     
    .Columns(1).TextToColumns Destination:=Range("A1" ), DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
    Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
    :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1)), TrailingMinusNumbers:=True
     
    Application.DisplayAlerts = True
     
    'MAJ Fichier Correspondance
    For A = 1 To NblineTSM
        If IsNumeric(.Cells(A, 2)) Then
             If Not IsError(Application.Match(.Cells(A, 2), Range(CorrespSht.Cells(2, 2), CorrespSht.Cells(NbLineCorresp, 2)), 0)) Then
                B = Range(CorrespSht.Cells(1, 2), CorrespSht.Cells(NbLineCorresp, 2)).Find(what:=Trim(.Cells(A, 2)), lookat:=xlWhole).Row
                CorrespSht.Cells(B, 1) = Trim(.Cells(A, 1))
            Else
                CorrespSht.Cells(NbLineCorresp + 1, 2) = Trim(.Cells(A, 2))
                CorrespSht.Cells(NbLineCorresp + 1, 1) = Trim(.Cells(A, 1))
                NbLineCorresp = NbLineCorresp + 1
            End If
        Else
            If Not IsError(Application.Match(Trim(.Cells(A, 2)), Range(CorrespSht.Cells(2, 2), CorrespSht.Cells(NbLineCorresp, 2)), 0)) Then
                B = Range(CorrespSht.Cells(1, 2), CorrespSht.Cells(NbLineCorresp, 2)).Find(what:=Trim(.Cells(A, 2)), lookat:=xlWhole).Row
                CorrespSht.Cells(B, 1) = Trim(.Cells(A, 1))
            Else
                If Len(Trim(.Cells(A, 2))) > 3 And Left(Trim(.Cells(A, 2)), 3) <> "WWW" And Left(Trim(.Cells(A, 2)), 4) <> "HSTV" _
                And Left(Trim(.Cells(A, 2)), 4) <> "EPIQ" Or Len(Trim(.Cells(A, 2))) = 3 Then
                    CorrespSht.Cells(NbLineCorresp + 1, 2) = Trim(.Cells(A, 2))
                    CorrespSht.Cells(NbLineCorresp + 1, 1) = Trim(.Cells(A, 1))
                    NbLineCorresp = NbLineCorresp + 1
                End If
            End If
        End If
    Next A
End With
 
TSMBk.Close savechanges:=False
CouplBk.Close savechanges:=False
End Sub

Reply

Marsh Posté le 30-10-2007 à 18:11:44    

Merci pour la réponse. Mais en fait je ne veux pas forcément que mes fichiers csv s'ouvrent dans Excel.  
Je veux seulement les enregistrer dans mon projet et utiliser certaines données de ces fichiers. (Les valeurs du fichiers ne doivent pas apparaitre, je dois faire mes opérations en travail masqué en fait)
 
Il faudrait que chacun de mes fichiers csv soit enregistré sous un nom différent.  
Je ne sais pas si cela est possible et si mes explications sont assez claires mais j'espere que quelqu'un pourra m'aider.
Merci.

Reply

Marsh Posté le 30-10-2007 à 18:30:34    

Bah...  
Tu l'ouvres, soit en tant que classeur, soit en tant que fichier texte à l'aide du FileSystemObject , tu récupères ce que tu veux, et tu le refermes
Application.ScreenUpdating=false si tu veux que ça ne soit pas perceptible à l'écran

Reply

Marsh Posté le 31-10-2007 à 12:44:40    

Merci pour ton aide devil_k. Je pense que je vais pouvoir me débrouiller maintenant..

Reply

Sujets relatifs:

Leave a Replay

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