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 :

Erreur macro VBA Word de lecture de document incompréhensible


Sujet :

VBA Word

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    mai 2023
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : mai 2023
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Erreur macro VBA Word de lecture de document incompréhensible
    Bonjour,
    j'ai établi une routine VBA sur Word pour:
    1. Lire chaque ligne du fichier word contenant un "#"
    2. Pour chaque ligne contenant le hashtag, il faut créer un fichier txt dans un dossier précis.

    Exemple:
    si dans mon word qui est ouvert j'ai
    #2023-05-17-ecrire sur le forum
    #2023-05-18-faire compta

    il faut que ça me crée 2 fichier txt qui s'appelleront respectivement "2023-05-17-ecrire sur le forum" et "2023-05-18-faire compta"

    J'ai fait la routine mais il y a une erreur quand je la lance (je l'exécute directement dans le Word ouvert avec les lignes dedans).
    Error 52: nom ou numéro de fichier incorrect.

    Je ne comprends pas ce qui coince.

    merci pour vos retours

    Voici le code:

    Sub TraiterLignes()
    Dim doc As Document
    Dim paragraphe As Paragraph
    Dim NBLIG As Integer
    Dim INDEXLIGNE As String
    Dim dossier As String
    Dim cheminFichier As String
    Dim fichier As Object

    ' Spécifiez le chemin du dossier où vous souhaitez enregistrer les fichiers texte
    dossier = "C:\ACTIVITE\8_INDEX"

    ' Ouvrir le document Word
    Set doc = ActiveDocument

    ' Compter le nombre total de lignes commençant par "#"
    NBLIG = 0
    For Each paragraphe In doc.Paragraphs
    If Left(paragraphe.Range.Text, 1) = "#" Then
    NBLIG = NBLIG + 1
    End If
    Next paragraphe

    ' Lire chaque ligne commençant par "#"
    For Each paragraphe In doc.Paragraphs
    If Left(paragraphe.Range.Text, 1) = "#" Then
    ' Récupérer le contenu de la ligne
    INDEXLIGNE = Trim(paragraphe.Range.Text)
    INDEXLIGNE = Replace(INDEXLIGNE, "#", "") ' Supprimer le caractère "#"

    ' Créer le fichier texte avec le titre correspondant à INDEXLIGNE
    cheminFichier = dossier & "\" & INDEXLIGNE & ".txt"
    Set fichier = CreateObject("Scripting.FileSystemObject").CreateTextFile(cheminFichier, True)
    fichier.Close
    End If
    Next paragraphe

    End Sub

  2. #2
    Membre averti
    Homme Profil pro
    Auto entrepreneur
    Inscrit en
    décembre 2021
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Auto entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : décembre 2021
    Messages : 207
    Points : 309
    Points
    309
    Par défaut
    Citation Envoyé par Vince73 Voir le message
    Bonjour,

    Il y a peut-être un ou des caractères interdits pour rentrer dans le nom d'un fichier dans INDEXLIGNE. Ajoutez un Debug-Print pour voir ce que vous récupérez dans la fenêtre exécution (Ctrl-G dans l'éditeur VBA).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
              INDEXLIGNE = Trim(paragraphe.Range.Text)
              INDEXLIGNE = Replace(INDEXLIGNE, "#", "") ' Supprimer le caractère "#"
              Debug.Print INDEXLIGNE
    Sinon, c'est peut-être votre méthode pour créer votre fichier txt qui coince.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    mai 2023
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : mai 2023
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par E KERGRESSE Voir le message
    Bonjour,

    Il y a peut-être un ou des caractères interdits pour rentrer dans le nom d'un fichier dans INDEXLIGNE. Ajoutez un Debug-Print pour voir ce que vous récupérez dans la fenêtre exécution (Ctrl-G dans l'éditeur VBA).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
              INDEXLIGNE = Trim(paragraphe.Range.Text)
              INDEXLIGNE = Replace(INDEXLIGNE, "#", "") ' Supprimer le caractère "#"
              Debug.Print INDEXLIGNE
    Sinon, c'est peut-être votre méthode pour créer votre fichier txt qui coince.

    Merci E KERGRESSE pour votre réponse.
    Le Debug.print a montré que la concaténation avec "&" créait un retour chariot et le ".txt" se retrouvait sur une 2e ligne.
    Ca c'est réglé. Par contre ça ne marche toujours pas.

    J'ai regardé avec une version beaucoup plus simple pour voir où ça coince et effectivement c'est le fait d'avoir une variable qui bloque je ne sais pas pourquoi.


    CODE très simplifié:
    (ici on va directement lire la seule et unique ligne du document et il faut directement en faire un fichier .txt )
    (la ligne du document c'est directement le chemin d'accès C:\ACTIVITE\test\20230519Fairefichierindex.txt )

    Sub INDEXERDOSSIER()
    Dim doc As Document
    Dim paragraphe As Paragraph
    Dim NBLIG As Integer
    Dim INDEXLIGNE As String


    ' Ouvrir le document Word
    Set doc = ActiveDocument

    ' Lire chaque ligne
    For Each paragraphe In doc.Paragraphs
    INDEXLIGNE = paragraphe.Range.Text
    Debug.Print INDEXLIGNE

    ' Créer le fichier texte avec le titre correspondant à INDEXLIGNE
    Open INDEXLIGNE For Output As #1
    Print #1, ""
    Close #1

    Next paragraphe

    End Sub



    Le Debug.print me renvoie
    C:\ACTIVITE\test\20230519Fairefichierindex.txt donc OK.

    La fonction Open ne marche pas non plus tant qu'il y a l' INDEXLIGNE.
    Si je remplace INDEXLIGNE dans l'OPEN directement par "C:\ACTIVITE\test\20230519Fairefichierindex.txt" ça fonctionne très bien.
    Je ne vois pas ce qui peut poser problème puisque mon INDEXLIGNE est ben déclarée comme une chaine de caractères.

    Avez vous une solution à me proposer ?
    Merci pour votre retour.

    Cordialement

  4. #4
    Membre averti
    Homme Profil pro
    Auto entrepreneur
    Inscrit en
    décembre 2021
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Auto entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : décembre 2021
    Messages : 207
    Points : 309
    Points
    309
    Par défaut
    Dans votre code, vous incluez le séparateur de paragraphes qui est un caractère interdit dans le nom du fichier. Il vous faut retrancher 2 caractères au contenu du Range.Text.

    A tester.

    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
     
    Sub TestCreerFichiersTxt()
     
    Dim MonDoc As Document
    Dim I As Integer
     
        Set MonDoc = ActiveDocument
        With MonDoc
             For I = 1 To .Paragraphs.Count
                 With .Paragraphs(I)
                      If InStr(1, .Range, "#", vbTextCompare) = 1 Then
                         CreerFichiersTxt ActiveDocument.Path, Mid(.Range.Text, 2, Len(.Range.Text) - 2)
                      End If
                 End With
             Next I
        End With
        Set MonDoc = Nothing
     
     End Sub
     
     
    Sub CreerFichiersTxt(RepertoireFichier As String, Contenu As String)
     
    Dim Fs, F1
     
        Set Fs = CreateObject("Scripting.FileSystemObject")
        Set F1 = Fs.CreateTextFile(RepertoireFichier & "\" & Contenu & ".txt", True)
     
        F1.Write Contenu & vbNewLine
        F1.Close
     
        Set F1 = Nothing
        Set Fs = Nothing
     
    End Sub

Discussions similaires

  1. [XL-2007] erreur macro vba excel 2007
    Par yan14 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 22/02/2012, 23h04
  2. Message d'erreur Macro VBA
    Par debutVBA dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/01/2012, 10h48
  3. Php et macro vba word
    Par neuneu1 dans le forum Langage
    Réponses: 4
    Dernier message: 19/08/2009, 18h48
  4. Réponses: 1
    Dernier message: 27/11/2008, 16h47
  5. Réponses: 0
    Dernier message: 06/08/2007, 12h46

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