Récupérer dans un seul fichier excel les données de plusieur fichiers CSV

idamien

XLDnaute Nouveau
Bonjours à tous.

Mes connaissances de base d'excel ne me suffisent pas à résoudre mon problème et j'ai besoin de votre aide.

La situation est la suivante:
  • Je possède un appareil de mesure de lumière que me permet d’acquérir multiples données dans un fichier csv.
  • Je fais plusieurs acquisitions d'une même source de lumière à différente puissance ce qui me créé X fichiers csv différents dans un dossier

Je souhaiterais importer dans la colonne A toutes les valeurs des positions "B6" des touts les csv de mon dossier,
dans une autre colonne, toutes les valeurs des positions "B7" des mêmes fichiers... et ainsi de suite.

Idéalement je voudrais pouvoir sélectionner les fichiers csv à lire depuis un userforms ou au moins lire touts les fichiers d'un dossier par "BrowseForFolder"

Merci d'avance pour votre aide.
 

Pièces jointes

  • XNOVA18-56 FLASH_17_5429K.zip
    5 KB · Affichages: 31

Marc L

XLDnaute Occasionnel
Pour débutant …

Moi je ne vois que les données en colonne A ???
il me faudrait aussi l'information comprise en "B5" (Digital/film)
J'ai également voulu tester d'ajouter les données "spectral data" (Pour essai personnel) jusqu'à la ligne 114
Le C de CSV correspond en anglais à comma et veut donc dire virgule !
Mais en fait cela peut être selon les paramètres régionaux de Windows (Séparateur de listes)
sauf pour des applications générant uniquement le format US comme ici …

Un débutant a le choix pour ouvrir un fichier texte en se limitant au standard VBA Excel :

• via l'objet [HIGHLIGHT]QueryTable[/code] (Données, à partir d'un fichier …)

• En ouvrant manuellement depuis Excel le fichier après avoir activé l'Enregistreur de macros,
une base de code exploitant la méthode [HIGHLIGHT]Workbooks.OpenText[/code] est livrée sur un plateau !

• Ou encore ne serait-ce qu'en lisant l'aide VBA de la méthode [HIGHLIGHT]Workbooks.Open[/code],
souvent la solution la plus simple !

Peu importe la méthode, ensuite c'est juste un banal Copier puis Collage Spécial en transposé

P'tite démonstration - à coller dans le module de la feuille - avec transposition directe des valeurs :

VB:
Sub Demo2()
    ChDrive ThisWorkbook.Path:  ChDir ThisWorkbook.Path
    CSV = Application.GetOpenFilename("Fichiers csv ,*.csv", , "    Sélection des fichiers de mesures :", , True)
    If Not IsArray(CSV) Then Exit Sub
    D$ = Left$(CSV(1), InStrRev(CSV(1), "\"))
    Me.UsedRange.Clear
    Application.ScreenUpdating = False
For R% = 1 To UBound(CSV)
         Cells(R + 1, 1).Value = Split(Replace(CSV(R), D, ""), ".")(0)
                            B% = R > 1
    With Workbooks.Open(CSV(R), Format:=2)
        Cells(R - B, 2).Resize(2 + B, 110).Value = Application.Transpose(.Worksheets(1).[A5:A114].Offset(, -B).Resize(, 2 + B).Value)
        .Close
    End With
Next
With Me.UsedRange.Columns
'    .Item(30).Delete
    .AutoFit
End With
    Application.ScreenUpdating = True
End Sub
La ligne en commentaire sert à supprimer la colonne vide …

_______________________________________________________________________________
Damien, tu apprécies ? Alors merci de cliquer sur J'aime ce post en bas à gauche de ce message !
 
Dernière édition:

Marc L

XLDnaute Occasionnel
Retour à la Via Romana …

il me faudrait aussi l'information comprise en "B5" (Digital/film)

J'ai également voulu tester d'ajouter les données "spectral data" (Pour essai personnel) jusqu'à la ligne 114

mais j'aurais voulu comprendre comment les ajouter par la suite si besoin
Avec des constantes pour le début et la fin des lignes à copier c'est plus facile à maintenir !
Cependant décaler de -1 car le premier indice de la fonction Split est le zéro …

Toujours à coller dans le module de la feuille de calculs regroupant les données :

VB:
Sub Demo1a()
    Const DEB = 4, FIN = 113
    ChDrive ThisWorkbook.Path:  ChDir ThisWorkbook.Path
    CSV = Application.GetOpenFilename("Fichiers csv ,*.csv", , _
          "    Sélection des fichiers de mesures :", , True)
    If Not IsArray(CSV) Then Exit Sub
    D$ = Left$(CSV(1), InStrRev(CSV(1), "\"))
    ReDim VA(UBound(CSV), DEB - 1 To FIN)
    Me.UsedRange.Clear
With CreateObject("ADODB.Stream")
                    .Charset = "UTF-8"
    For N% = 1 To UBound(CSV)
        VA(N, DEB - 1) = Split(Replace(CSV(N), D, ""), ".")(0)
                    .Open
                    .LoadFromFile CSV(N)
        SPQ = Split(.ReadText, vbCrLf)
                    .Close
        If UBound(SPQ) >= FIN Then
            For R% = DEB To FIN
                          SP = Split(SPQ(R), ",")
                If UBound(SP) > 0 Then
                 If VA(0, R) = "" Then VA(0, R) = SP(0)
                                       VA(N, R) = SP(1)
                End If
            Next
        End If
    Next
End With
    With Cells(1).Resize(UBound(VA) + 1, FIN - DEB + 2).Columns
        .Value = VA
'        .Item(30).Delete
        .AutoFit
    End With
End Sub
La ligne en commentaire sert à supprimer la colonne vide …

_______________________________________________________________________________
Monsieur Isely, appréciez-vous ?
Alors merci de cliquer sur J'aime ce post en bas à gauche de ce message !
 
Dernière édition:

Discussions similaires