Microsoft 365 VBA : Ouverture de fichier csv directement en mémoire

  • Initiateur de la discussion Initiateur de la discussion tbft
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

tbft

XLDnaute Accro
Bonjour à tous

J'aimerais savoir si il est possible d'ouvrir depuis le VBA un fichier au format csv mais sans l'ouvrir comme un classeur plutôt transférer le contenue du fichier dans une variable.
Avez-vous une idée, s'il vous plait ?

Je demande cela car je dois traiter un grand nombre de fichier csv, et j'aimerai ne pas à avoir tous à les ouvrir avec excel (même par macro).

Exemple de forme d'instruction :
VB:
Dim Contenue_CSV as variant 'ou autre
Contenue_CSV=open("C:\toto\titi.csv")

La variable Contenue_CSV contiendrai le contenue du fichier et le lien vers le fichier.
 
Bonjour

Avec ce que j'ai compris, peut-être comme ça (tu auras tout le texte du CSV dans une variable):
VB:
sub test()
Dim Filenumber%
Dim Contenue_CSV$, chainedata$

Contenue_CSV = "C:\toto\titi.csv"
Filenumber = FreeFile
'Ouverture du fichier
Open Contenue_CSV For Binary As #Filenumber
'Dimentionnement de la variable chainedata
chainedata = Space$(LOF(Filenumber))
'Chainedata = tout le texte du csv
Get #Filenumber, , chainedata
'Fermeture du CSV
Close #Filenumber
       
End Sub
 
Bonjour

Je viens de trouver une video qui me permet avec adaptation de faire ce que je demandais...
Pour afficher ce contenu, nous aurons besoin de votre consentement pour définir des cookies tiers.
Pour plus d'informations, consultez notre page sur les cookies.

Donc sauf boulette d'adaptation c'est résolue...
 
Salut @tbft ,

je regarde la video c'est complexe... en tout cas a comparer a powerquery... qui est fait pour cela.

ma méthode.

En gros tu crée un query sur un CSV
tu le transforme en FONCTION sur les fichiers

tu crée un query qui selectionne les CSV a importer
tu applique la fonction aux fichiers.

fini.


Si tu garde seulement en memoire, tu n'est pas limité a 1.000.000 lignes...
 
Bonjour
je te propose d'avoir carrément le tableau en mémoire
  1. séparateur au choix
  2. header(entete)au choix(on commence a la ligne 0 ou 1)

2 msgbox testent le return dans la sub

la seul chose a modifier c'est le chemin du fichier pour toi


VB:
Sub test()
    Dim MonTbloCSV, Fichier$
    Fichier = "C:\Users\polux\DeskTop\moncsv.csv"
    montabloCSV = GetTableCsV(Fichier)
   
    'montabloCSV est en base 0
    MsgBox montabloCSV(0, 0)    'le premier en haut a gauche
    MsgBox montabloCSV(2, 2)    'le 3me ligne,3eme colonne

'2 arguments sont optional
'1° le séparateur  avec le ";" par défaut
'2° 'header  on peut sauter la première ligne (les entêtes )
End Sub




Function GetTableCsV(Fichier, Optional separateur As String = ";", Optional header As Boolean = False)
    Dim laChaine As String, x, c&, i&, T, Q&
    x = FreeFile: Open Fichier For Binary Access Read As #x: laChaine = String(LOF(x), " "): Get #x, , laChaine: Close #x
    x = Split(laChaine, vbCrLf)
    For i = IIf(header, 1, 0) To UBound(x): Q = UBound(Split(x(i), separateur)): c = IIf(Q > c, Q, c): Next
    ReDim T(UBound(x), c)
    For i = 0 To UBound(x)
        Z = Split(x(i), separateur)
        For a = 0 To UBound(Z)
            T(i, a) = Z(a)
        Next: Next
    GetTableCsV = T
End Function
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
40
Affichages
2 K
  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
80
Retour