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 :

Comment faire du File Mapping en VBA [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 18
    Par défaut Comment faire du File Mapping en VBA
    Bonjour,
    je voudrais lire un fichier texte en binaire, mais j'ai l'impression qu'il est trop gros (222Mo). voici mon code (que j'ai copié à je ne sais plus qui) :
    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
     
    Dim nomFichier As String, numFile As Integer
    Dim errCode As Integer
    Dim errString As String
    Dim fileContent As String
    Dim t() As String
     
    fileContent = ReadFileToBuffer(nomFichier, errCode, errString)
    If errCode = 0 Then
        ...
    Else
        ' Erreur rencontrée, affichage
        MsgBox "Erreur lors de la lecture. Code : " & errCode & ". Description : " & errString
    End If
     
    ' Cette fonction lit le contenu du fichier szFileName et retourne
    ' ce contenu. En cas d'erreur, elle retourne une chaîne vide et
    ' renseigne le code d'erreur et la description de l'erreur
    '
    Private Function ReadFileToBuffer(ByVal szFileName As String, _
                                     ByRef errCode As Integer, _
                                     ByRef errString As String) As String
        Dim f As Integer
        Dim Buffer As String
     
        ' trappe les erreurs
        On Error GoTo ReadFileToBuffer_ERR
     
        ' Ouverture du fichier en 'Binary'
        f = FreeFile
        Open szFileName For Binary As #f
            ' préallocation d'un buffer à la taille du fichier
            Buffer = Space$(LOF(f))
            ' lecture complète du fichier
            Get #f, , Buffer
        Close #f
        ReadFileToBuffer = Buffer
    ReadFileToBuffer_END:
        Exit Function
     
    ReadFileToBuffer_ERR:
        ' Gestion d'erreur
        ReadFileToBuffer = ""
        errCode = Err.Number
        errString = Err.Description
        Resume ReadFileToBuffer_END
    End Function
    Au décodage, à la ligne , on passe directement à (sans fermer le fichier du coup !!), et le message d'erreur c'est : "Erreur lors de la lecture. Code 7 Description : mémoire insuffisante"

    J'ai lu que pour des gros fichier il faut faire du file mapping, mais après avoir cherché un certain temps, je n'ai rien trouvé de concret sur comment on l'utilise en vba. Est--ce que quelqu'un saurait me donner une base de code pour faire du fileMapping ?

    (mon but au fait étant d'ajouter une ligne à la fin de mon fichier si la dernière ligne respecte certaines conditions)

    Merci

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour,

    définir la variable Buffer d'une taille raisonnable permettrait de lire le fichier par blocs;
    mais ce serait dommage de lire l'intégralité du fichier même par blocs dans ton cas vu que seule la fin du fichier t'intéresse !

    Donc lire plutôt directement le dernier bloc du fichier depuis la position stratégique
    égale à la fin de fichier plus un moins la taille du buffer grâce à l'instruction Get


    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 18
    Par défaut
    J'avais essayé de lire par blocs, mais je n'ai pas réussi. Je ne savais pas comment coder ça : j'avais créé deux variables Buffer1 et Buffer2 de taille la moitié du fichier, mais après je ne sais pas comment placer la première moitié du fichier dans Buffer1 et la deuxième moitié dans Buffer2.
    Pareil pour ta solution, je ne sais pas comment on code la lecture du fichier à partir d'un endroit précis.

  4. #4
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Citation Envoyé par pikron Voir le message
    Pareil pour ta solution, je ne sais pas comment on code la lecture du fichier à partir d'un endroit précis.
    Comme je l'ai indiqué pour le calcul, entre les deux virgules dans ton code de l'instruction Get,
    et c'est pourtant bien expliqué dans l'aide intégrée de VBA …


    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …


    __________________________________________________________________________________________
    Comment les huissiers préfèrent-ils leur viande ? Bien saisie évidemment ‼

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 18
    Par défaut
    désolé pour le temps de réponse, mais je suis sur plusieurs projets en parallèle

    si tu es toujours là Marc, je n'arrive pas à trouver nulle part une explication du fonctionnement de la méthode get. L'aide intégrée de vba me donne rien du tout (à moins que ce soit moi...)

    (sinon, j'ai esquivé le problème et j'ai lu le fichier en mode séquentiel)

  6. #6
    Membre émérite
    Inscrit en
    Décembre 2006
    Messages
    897
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 897
    Par défaut Bonsoir Pikron et Mark-L
    bonsoir,

    à cette adresse par exemple :

    http://msdn.microsoft.com/en-us/libr...(v=vs.60).aspx

    C'est le second argument qui indique le numéro du bloc. A calculer en fonction de la taille du bloc défini lors de l'utilisation de la fonction "Open"

    ESVBA

  7. #7
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Citation Envoyé par pikron Voir le message
    je n'arrive pas à trouver nulle part une explication du fonctionnement de la méthode get. L'aide intégrée de vba me donne rien du tout (à moins que ce soit moi...)
    Ben oui c'est toi car c'est bien expliqué dedans ‼

    Ne pas oublier la touche

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/04/2010, 11h11
  2. Comment faire un fichier "Aide" en VBA ?
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/01/2009, 10h28
  3. Réponses: 2
    Dernier message: 01/05/2008, 16h13
  4. Comment faire Copier/Coller par code VBA sur INTERNET...
    Par GESCOM2000 dans le forum Access
    Réponses: 5
    Dernier message: 02/01/2006, 13h19
  5. Comment faire du bump mapping
    Par CladStrife dans le forum DirectX
    Réponses: 7
    Dernier message: 01/01/2004, 05h07

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