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

VBA Word Discussion :

Pourquoi mon code ne fonctionne pas ?


Sujet :

VBA Word

  1. #1
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2017
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2017
    Messages : 19
    Points : 18
    Points
    18
    Par défaut Pourquoi mon code ne fonctionne pas ?
    Bonjour,

    voici un code très simple qui fait appel à une fonction ( je débute en vba ).

    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
    Private Sub UserForm_Click()
    Dim n As Integer
     
    n = MsgBox(NombreLigne("F:\DateMiseJour.txt"))
     
     
    End Sub
     
    ' Nombre de lignes d'un fichier
     
    Function NombreLigne(Monchemin As String) As Integer
     
    Dim Fichier As Object
    Dim objet As Object
    Dim nbreligne As Integer
     
    Set objet = CreateObject("Scripting.FileSystemObject")
    Set Fichier = objet.OpenTextFile(Monchemin)
     
    nbreligne = 0
    Do While Fichier.AtEndOfStream <> True
    nbreligne = nbreligne + 1
    Fichier.SkipLine
    Loop
    MsgBox ("nbre lignes est" & nbreligne)
    Fichier.Close
     
    End Function
    Lorsque je lance le code,
    le message box à l'intérieur m'indique le bon nombre de lignes de mon fichier.
    Par contre le 2e message box
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    n = MsgBox(NombreLigne("F:\DateMiseJour.txt"))
    m'indique 0.

    Je ne comprends pas pourquoi il ne m'indique pas 1.
    Voyez vous mon erreur ?

    Lionel.

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Jusqu'à preuve du contraire, skip c'est sauter par-dessus et non sauter au suivant.

    Comme c'est si bien mentionné là

    P.S. Regarde sur ton disque si tu n'aurais pas la documentation de Microsoft Scripting.

    Chez moi c'est dans : C:\Program Files\Microsoft Windows Script\ScriptDocs\Script56.CHM
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2017
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2017
    Messages : 19
    Points : 18
    Points
    18
    Par défaut
    Merci ClementMarcotte de ta réponse.

    Je n'avais pas vu la ligne avec le skipline mais sans cette ligne mon code ne marchait quand même pas.

    J'ai trouvé la solution un peu plus tard.
    Je n'avais pas affecté le nom de ma fonction à une variable.
    J'ai ajouté la ligne
    Fichier.Readline
    et la ligne
    NombreLigne=nbreligne
    dans ma fonction.

    Ce code maintenant fonctionne :
    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
    Private Sub UserForm_Click()
    Dim n As Integer
     
     
    n = MsgBox(NombreLigne("F:\DateMiseJour.txt"))
     
     
    End Sub
     
    ' Nombre de lignes d'un fichier
     
    Function NombreLigne(Monchemin As String) As Integer
     
    Dim Fichier As Object
    Dim objet As Object
    Dim nbreligne As Integer
     
    Set objet = CreateObject("Scripting.FileSystemObject")
    Set Fichier = objet.OpenTextFile(Monchemin)
     
    nbreligne = 0
    Do While Fichier.AtEndOfStream <> True
    Fichier.ReadLine
    nbreligne = nbreligne + 1
    Loop
    MsgBox ("nbre lignes est" & nbreligne)
    NombreLigne = nbreligne
    Fichier.Close
     
    End Function
    A bientôt.

  4. #4
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    On peut aussi tricher. Puisque FSO a une propriété Line, pour désigner la ligne en cours, il suffit de lui faire croire que l'on veut ajouter des lignes au fichier. Je l'ai fait avec une fonction, mais c'est une affaire de rien de le faire dans une Sub.

    Ceci étant dit, je considère que le fichier se termine par un retour de chariot unique, sur une ligne autrement vide. Et le nombre de lignes ne comprend pas la ligne vide, sauf s'il y a plus d'une ligne vide. D'où le -1.

    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
    Sub OpenTextFileTest()
        Dim UnFichier As String
        Dim Nombre As Integer
       UnFichier = "C:\Users\Clement Marcotte\Documents\voix.txt"
       Nombre = CombienDeLignes(UnFichier)
       MsgBox (Nombre)
    End Sub
     
    Function CombienDeLignes(UnFichier As String) As Integer
    Const ForReading = 1, ForWriting = 2, ForAppending = 8
       Dim fso, f
       Set fso = CreateObject("Scripting.FileSystemObject")
       Set f = fso.OpenTextFile(UnFichier, ForAppending)
       Dim Laligne As Integer
       'la propriété Line donne le numéro de ligne
       'où la nouvelle ligne devrait être écrite
       'Mais là on triche et on n'écrit rien.
       Laligne = f.Line
       'Donc en enlevant 1 au numéro de ligne sur laquelle
       '(En fait, ce doit être une "ligne" qui ne contient
       'rien d'autre qu'un retour de chariot'
       'on serait supposé écrire, om obtient la derniàre ligne
       'écrite; sauf s'il y a des retours de chariot intempestifs
          CombienDeLignes = Laligne - 1
       f.Close
     
    End Function
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

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

Discussions similaires

  1. Pourquoi mon code ne fonctionne pas sur Linux
    Par Amaury_35 dans le forum Langage
    Réponses: 2
    Dernier message: 24/08/2009, 09h58
  2. Mon code ne fonctionne pas mais pourquoi ?
    Par veriecherie dans le forum ASP
    Réponses: 3
    Dernier message: 01/08/2008, 12h19
  3. pourquoi mon code ne fonctionne pas
    Par jmlb35 dans le forum VBA Access
    Réponses: 2
    Dernier message: 30/06/2008, 19h02
  4. [VB.Net/DataReader] Pourquoi mon ExecuteReader ne fonctionne pas ?
    Par emeraudes dans le forum Accès aux données
    Réponses: 8
    Dernier message: 21/08/2006, 13h38
  5. Réponses: 2
    Dernier message: 31/07/2006, 08h48

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