Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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 à tous.

@Efgé : on s'est croisé dans le fils. J'ai du coup fait un truc qui ressemble à ta proposition

@merinos : elle n'est pas si compliqué que cela, car j'ai pur l'adapter sans aucun soucis.

Mais en tout les cas un grand merci pour votre aide
 
[...] @Efgé : on s'est croisé dans le fils. J'ai du coup fait un truc qui ressemble à ta proposition
[...]
Mis à part que ta video lit séqentiellement le fichier alors que ma proposition transfert tout le texte dans une variable, comme tu l'avais demandé.
Ce qui, somme toute, n'est pas la même chose.
A toi de voir ce qui t'interresse...
Cordialement
 
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
91
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…