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 :

Problème fichier CSV


Sujet :

Macros et VBA Excel

  1. #1
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    j'essai de mettre en place une méthode de création/lecture/écriture sur fichier .csv. Je me suis inspiré sur un tuto disponible sur développez.com en utilisant la méthode par "accès direct".

    L'erreur affichée est que le "fichier est déjà ouvert" alors que je close le fichier à la fin.
    Voici mon code:
    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
    Private Sub Lecture(recu() As tRecu)
        Dim i As Integer
        Dim szTmp As String
        Dim nTmp As Integer
        Dim intFic As Integer
     
        If frmMain.lstPeriodes.ListIndex = -1 Then  'Si aucune période n'est selectionnée
            nTmp = 0
        Else
            nTmp = Val(Trim$(frmMain.lstPeriodes.ListIndex))
        End If
     
        szTmp = "D:\Documents\s611516\Mes Documents\Level1\" & Trim$(frmMain.szContrat) & "_" & Trim$(Replace(Replace(frmMain.lstPeriodes.List(nTmp), "   ", "-"), "/", "")) & "_" & Trim$(nomVariable) & ".csv"
     
        If Dir(szTmp) <> "" Then
            intFic = FreeFile
            Open szTmp For Output As #intFic 'For Random As intFic Len = Len(recu)
            For i = 0 To 4
                Get #intFic, (i + 1), recu(i)
            Next i
        Else
            Open szTmp For Output As FreeFile
            For i = 0 To 4
                recu(i).Montant = ""
                recu(i).Date = ""
                recu(i).Remarque = ""
            Next i
        End If
     
        Close #intFic
    End Sub
    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
    Private Sub Ecriture(numLigne As Integer, recu As tRecu)
        Dim szTmp As String
        Dim nTmp As Integer
        Dim intFic As Integer
        Dim intNum As Integer
     
        If frmMain.lstPeriodes.ListIndex = -1 Then  'Si aucune période n'est selectionnée
            nTmp = 0
        Else
            nTmp = Val(Trim$(frmMain.lstPeriodes.ListIndex))
        End If
     
        szTmp = "D:\Documents\s611516\Mes Documents\Level1\" & Trim$(frmMain.szContrat) & "_" & Trim$(Replace(Replace(frmMain.lstPeriodes.List(nTmp), "   ", "-"), "/", "")) & "_" & Trim$(nomVariable) & ".csv"
     
        If Dir(szTmp) <> "" Then
            Open szTmp For Random As intFic Len = Len(recu)
            intNum = LOF(intFic) / Len(recu)    'Compte le nombre d'enregistrements
            Put intFic, intNum + 1, recu      'Ajoute la donnée
        Else
            Open szTmp For Output As FreeFile
        End If
     
        Close intFic
    End Sub
    J'ai fias un débeugage et ça s'arrête à la ligne 19 de la méthode Lecture en m'écrivant m'éthode d'accés au fichier incorrect.
    On ne peut pas utiliser la méthode d'accés direct avec les fichiers .csv contrairement aux fichiers .txt?
    Dernière modification par fring ; 16/05/2012 à 10h04. Motif: fusion de 2 messages

  2. #2
    Invité
    Invité(e)
    Par défaut
    Apparemment il faudrait utiliser les méthodes Print# et Write#. Voici ce que j'ai fait:
    La lecture du .csv:
    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
    Private Sub Lecture(recu() As tRecu)
        Dim i As Integer
        Dim szTmp As String
        Dim nTmp As Integer
        Dim intFic As Integer
     
        If frmMain.lstPeriodes.ListIndex = -1 Then  'Si aucune période n'est selectionnée
            nTmp = 0
        Else
            nTmp = Val(Trim$(frmMain.lstPeriodes.ListIndex))
        End If
     
        szTmp = "D:\Documents\s611516\Mes Documents\Level1\" & Trim$(frmMain.szContrat) & "_" & Trim$(Replace(Replace(frmMain.lstPeriodes.List(nTmp), "   ", "-"), "/", "")) & "_" & Trim$(nomVariable) & ".csv"     'Le chemin d'accés du fichier csv
        intFic = FreeFile
     
        If Dir(szTmp) <> "" Then       'Si le csv existe déjà
            Open szTmp For Output As intFic 'For Random As intFic Len = Len(recu)
            For i = 0 To 4      'On fait ça 5 fois car il y a au maximum 5 entrées
                Print #intFic, recu(i).Montant; recu(i).Date; recu(i).Remarque
            Next i
        Else     'S'il n'existe pas on le crée juste et on initialise les 4 variables contenues dans le Type tRecu
            Open szTmp For Output As intFic
            For i = 0 To 4    'On fait ça 5 fois car il y a au maximum 5 entrées
                recu(i).Montant = ""
                recu(i).Date = ""
                recu(i).Remarque = ""
            Next i
        End If
     
        Close #intFic    'on ferme le fichier ouvert précedement
    End Sub
    Pour l'écriture sur le fichier cvs:
    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
    Private Sub Ecriture(numLigne As Integer, recu As tRecu)
        Dim szTmp As String
        Dim nTmp As Integer
        Dim intFic As Integer
        Dim intNum As Integer
     
        If frmMain.lstPeriodes.ListIndex = -1 Then  'Si aucune période n'est selectionnée
            nTmp = 0
        Else
            nTmp = Val(Trim$(frmMain.lstPeriodes.ListIndex))
        End If
     
        szTmp = "D:\Documents\s611516\Mes Documents\Level1\" & Trim$(frmMain.szContrat) & "_" & Trim$(Replace(Replace(frmMain.lstPeriodes.List(nTmp), "   ", "-"), "/", "")) & "_" & Trim$(nomVariable) & ".csv"   'Le chemin d'accés du fichier csv
        intFic = FreeFile
     
        If Dir(szTmp) <> "" Then    'Si le csv existe déjà
            Open szTmp For Random As intFic Len = Len(recu)
            intNum = LOF(intFic) / Len(recu)    'Compte le nombre d'enregistrements
            Write #intFic, recu.Montant; recu.Date; recu.Remarque
        Else
            Open szTmp For Input As intFic
        End If
     
        Close #intFic   'on ferme le fichier ouvert précedement
    End Sub
    Mais ça me dit toujours "Mode d'accés au fichier incorrect".

    De l'aide svp

  3. #3
    Invité
    Invité(e)
    Par défaut
    J'ai oublié de mettre un ImprEcran pour que ce soit plus parlant.

    Voir pièce jointe.

    Donc j'aimerai simplement que les champs de ce UserForms soit enregistrés dans un .csv



    Merci
    Images attachées Images attachées  

Discussions similaires

  1. Problème fichier CSV
    Par medessad dans le forum Administration
    Réponses: 2
    Dernier message: 26/07/2012, 17h22
  2. problème fichier .csv
    Par comrad85 dans le forum Développement de jobs
    Réponses: 4
    Dernier message: 24/02/2009, 21h40
  3. Problème de séparateur dans fichier CSV
    Par mbibim63 dans le forum Excel
    Réponses: 4
    Dernier message: 05/07/2007, 08h29
  4. [SQL] Problème exécution sql pour insertion fichier csv
    Par Kyvin dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 20/08/2006, 17h47
  5. Réponses: 1
    Dernier message: 20/10/2005, 10h32

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