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 :

Par Macro, gérer fichier TXT


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 684
    Par défaut Par Macro, gérer fichier TXT
    Bonjour,

    Je voudrais qu'a l'exécution d'une Macro, (pour la première fois)
    1 - Créer un fichier toto.txt
    2 - Ecrire le chiffre 1 (un compteur)
    3 - Lire le fichier pour en extraire le compteur
    4 - Pour la réexécution de la Macro, incrémenter ce compteur
    5 - Après je gère le chiffre du compteur

    Merci à vous

  2. #2
    Membre Expert
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Par défaut
    Utilise FileSystemObject (merci )...
    J'ai pas l'impression que tu as cherché beaucoup...

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 684
    Par défaut
    Merci de m'avoir répondu,

    Oui, j'ai utilisé FileSystemObject

    La seule chose que j'ai réussi a faire,
    c'est a créer le fichier

    Mais pas le reste !

  4. #4
    Membre Expert
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Par défaut
    Bonjour,

    on pourrai écrire
    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
     
    '
    ' Penser à mettre la référence à Microsoft Scripting
    '
    Function MonCompteur(Optional Incremente As Boolean = False) As Integer
     Dim objFso As New Scripting.FileSystemObject
     Dim f As Scripting.TextStream
     Const MON_FICHIER = "c:\Tmp\MonCompteur.txt"
     Dim iCpt As Integer
     'Lecture du compteur
     On Error Resume Next
         Set f = objFso.OpenTextFile(MON_FICHIER)
        On Error GoTo 0
         If f Is Nothing Then
           iCpt = 0 'Cas ou fichier inexistant
           Else
           iCpt = Val(f.ReadLine)
           f.Close
         End If
       If Incremente Then
          iCpt = iCpt + 1
          Set f = objFso.CreateTextFile(MON_FICHIER)
          f.Write iCpt
          f.Close
        End If
     
      MonCompteur = iCpt
     
    End Function
    ensuite tu utilse la fonction :

    pour lire ton compteur :
    pour lire et incrémenter ton compteur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox MonCompteur(true)

    tu dis quoi

  5. #5
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour,

    et comme ne n'aime personnellement pas que l'on alourdisse l'application inutilement par FSO, qui est du VBS (j'ai déjà eu l'occasion de le dire) , voilà la solution directe VB, toute simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Command1_Click()
      Open "d:\titi.txt" For Input As #1
        Line Input #1, compteur
      Close #1
      DoEvents
      Open "d:\titi.txt" For Output As #1
        Print #1, Val(compteur) + 1
      Close #1
      MsgBox "compteur à " & compteur
    End Sub
    Clique plusieurs fois sur command1 et comprends.

  6. #6
    Membre Expert
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Par défaut
    Citation Envoyé par ucfoutu Voir le message
    Bonjour,

    et comme ne n'aime personnellement pas que l'on alourdisse l'application inutilement par FSO, qui est du VBS (j'ai déjà eu l'occasion de le dire) , voilà la solution directe VB, toute simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Command1_Click()
      Open "d:\titi.txt" For Input As #1
        Line Input #1, compteur
      Close #1
      DoEvents
      Open "c:\titi.txt" For Output As #1
        Print #1, Val(compteur) + 1
      Close #1
      MsgBox "compteur à " & compteur
    End Sub
    Clique plusieurs fois sur command1 et comprends.
    toute simple mais elle ne marche pas

  7. #7
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    En effet ...
    J'ai écrit à main levée et ai mis la mauvaise lettre de lecteur à l'écriture ...

    C'est corrigé (en rouge) mais... c'était évident !!!

  8. #8
    Membre Expert
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Par défaut
    Perso,j'aime pas trop le côté "old schol" de la fonction Open qui remonte au bon veux Basic
    Pour moi FileSystemObject est une bonne solution... (le mieux c'est de déclarer l'objet FileSystemObject en variable globale)

  9. #9
    Membre Expert
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Par défaut
    Citation Envoyé par ucfoutu Voir le message
    En effet ...
    J'ai écrit à main levée et ai mis la mauvaise lettre de lecteur à l'écriture ...

    C'est corrigé (en rouge) mais... c'était évident !!!
    évident , même moi je l'ai vu ,mais tu ne traite pas le cas où fichier inexistant ... ( un petit coup de dir )

  10. #10
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Je crois que nous sommes partout sauf à l'école primaire ...

    Mais jouons le jeu des petits écoliers et finissons-en !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Command1_Click()
      If Dir("d:\titi.txt") <> "" Then
        Open "d:\titi.txt" For Input As #1
          Line Input #1, compteur
        Close #1
        DoEvents
      End If
      Open "d:\titi.txt" For Output As #1
        Print #1, Val(compteur) + 1
      Close #1
      MsgBox "compteur à " & compteur
    End Sub

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 684
    Par défaut
    Merci pour vos élucubrations !
    (riches en savoir pour un novice)

    De mon côté, j'ai bidouillé cela :
    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
     
    Sub compteur()
     repertoire = ThisWorkbook.Path & "\"
     nf = "toto.txt"
     chemin = repertoire & nf
     If Dir(chemin) <> "" Then
       Open chemin For Input As #1
       Input #1, temp
       Close #1
     Else
       temp = 0
     End If
     Open chemin For Output As #1
     Print #1, temp + 1
     Close #1
     MsgBox temp
    End Sub
    Cela semble bien tourner
    le soucis qu'il me reste, c'est de créer mon
    fichier en : C:\

  12. #12
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Ton fichier se créera seulk s'il n'existe pas ...

    Voilà (écrite en entier), ta procédure, qui commence à 1 si le fichier n'existe pas encore et le crée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Command1_Click()
      If Dir("d:\titi.txt") <> "" Then
        Open "d:\titi.txt" For Input As #1
          Line Input #1, compteur
        Close #1
        DoEvents
      End If
      compteur = Val(compteur) + 1
      Open "d:\titi.txt" For Output As #1
        Print #1, compteur
      Close #1
      MsgBox "compteur à " & compteur
    End Sub

  13. #13
    Membre Expert
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Par défaut
    Il suffit de faire
    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
    Sub compteur()
     repertoire = "C:\"
     nf = "toto.txt"
     chemin = repertoire & nf
     If Dir(chemin) <> "" Then
       Open chemin For Input As #1
       Input #1, temp
       Close #1
     Else
       temp = 0
     End If
     Open chemin For Output As #1
     Print #1, temp + 1
     Close #1
     MsgBox temp
    End Sub
    

  14. #14
    Membre Expert
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Par défaut
    Citation Envoyé par supersnail Voir le message
    Perso,j'aime pas trop le côté "old schol" de la fonction Open qui remonte au bon veux Basic
    Pour moi FileSystemObject est une bonne solution... (le mieux c'est de déclarer l'objet FileSystemObject en variable globale)




    Citation Envoyé par supersnail Voir le message
    Il suffit de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    [COLOR=black]Sub compteur()
     repertoire = "C:\"
     nf = "toto.txt"
     chemin = repertoire & nf
     If Dir(chemin) <> "" Then
       Open chemin For Input As #1
       Input #1, temp
       Close #1
     ....


    modifier la constante dans le code plus haut :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Const MON_FICHIER = "c:\Tmp\MonCompteur.txt"

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 684
    Par défaut
    Comme je l'avais dit avant,
    Le savoir est une chose, l'appliquer en est une autre

    Bref, merci a vous deux !
    J'ai maintenant un truc qui tourne Nickel

    Encore merci & @ +

  16. #16
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Tiens, je te renvois vers une discussion (tenue en anglais) dans une "vieille école" (mais tellement gourmandée, cette école_là)

    Lis tout, hein ...

    http://www.xtremevbtalk.com/showthread.php?t=63781
    Quoi qu'il en soit : je ne cesserai de répéter cette chose ici... La "vieille école, c'est VBS, pas VB ni VB.Net) ...

    Edit : et chez Bill ? ils sont également de la vieille école ?
    Tiens : celà traite de l'optimisation...

    http://msdn.microsoft.com/fr-fr/libr...13(VS.71).aspx

    Et qui plus est, avec du plus "nouvelle école encore" (VB.Net)

    Tu pourras y lire ceci, entre autres :

    FSO est fourni pour la compatibilité avec les langages de script et pour les applications qui requièrent sa fonctionnalité. Chacun de ses modèles est implémenté comme une série d'objets wrapper qui appelle les membres des classes dans l'espace de noms System.IO. Par conséquent, ils ne sont pas aussi efficaces que l'utilisation directe de System.IO. En outre, le FSO nécessite l'implémentation par votre application de l'interopérabilité COM, ce qui entraîne une charge mémoire de marshaling conséquente.
    Tu comprendras que je n'ai absolument pas envie de changer d'école, non ?

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

Discussions similaires

  1. [HTML] Ajouter même ligne html par macro (plusieur fichiers HTML)
    Par naouah dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 25/02/2009, 22h49
  2. Réponses: 4
    Dernier message: 04/03/2008, 15h46
  3. Réponses: 1
    Dernier message: 15/09/2006, 17h23
  4. Exportation d'1 fichier txt par une procédure stockée
    Par loutsky dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 15/06/2006, 19h25
  5. Lire un fichier txt par http (C sous Linux)
    Par sleg dans le forum Réseau
    Réponses: 4
    Dernier message: 18/10/2005, 12h07

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