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 :

Récupérer les numéros de ligne des titres


Sujet :

VBA Word

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 42
    Points : 25
    Points
    25
    Par défaut Récupérer les numéros de ligne des titres
    bonjour,


    Depuis excel, je scanne un document word en reperant les paragraphes de niveau 2 et 3 dont je copie ensuite les titres dans une feuille exel.
    Je voudrais aussi pouvoir reperer leur localisation (n° de ligne dans le doc) et la je seche, impossible de trouver la commande qui me renvoie le n° de ligne..

    pouvez vous m'aider?

    merci

    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
    Sub Identifie_Paragraphe()
    Dim WordApp As Word.Application
    Dim WordDoc As Word.document
    Dim cible As Paragraph
     
    Set WordApp = New Word.Application
    WordApp.Visible = False
     
    Set WordDoc = WordApp.Documents.Open("D:\Doc_Export_para2.Docx")
    WordDoc.Bookmarks("\StartOfDoc").Select
     
    i = 1
    ligne = 1
    For Each cible In WordDoc.Paragraphs
     
        largeur = cible.LineSpacing
        If cible.OutlineLevel = wdOutlineLevel2 Then
        Cells(i, 1).Value = Trim(cible.Range)
        'Cells(i, 3) = numero de ligne du paragraphe
     
         i = i + 1
        End If
        If cible.OutlineLevel = wdOutlineLevel3 Then
        Stop
        Cells(i, 2).Value = Trim(cible.Range)
        'Cells(i, 3) = numero de ligne du paragraphe
         i = i + 1
        End If
        ligne = ligne + 1
    Next cible
     
    WordApp.Visible = True
    End Sub

  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
    Bonjour,

    Il n'y a aucun moyen se déterminer une ligne dans un document Word. C'est un élément extrêmement variable qui dépend de trop nombreux facteurs. Entre autres de l'imprimante et de sa zone imprimable, du pilote d'imprimante, de la police de caractères utilisée, de la taille de la police, des tableaux, des images, des marges, de la justification, des coupures de mots etc.
    À 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
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Le seul moyen que je connaisse pour y parvenir est de passer par un objet Selection.

    Il faut placer la Selection sur la ligne et on peut alors récupérer le numéro de la ligne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    selection.Information(wdFirstCharacterLineNumber)
    Le seul problème, c'est que le numéro de ligne est donné par rapport à la page et pas pour la totalité du texte.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  4. #4
    Expert éminent
    Avatar de Sepia
    Homme Profil pro
    Administrateur du cursus IDE@L - Chef de Projet NCU (digital learning) - Université de Rennes
    Inscrit en
    Octobre 2007
    Messages
    3 117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur du cursus IDE@L - Chef de Projet NCU (digital learning) - Université de Rennes
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 3 117
    Points : 6 856
    Points
    6 856
    Par défaut
    Salut a_centaure,

    En fait Heureux-Oli a raison (comme d'habitude, il n'est pas responsable pour rien) et clementmarcotte aussi. Mais il a une ruse pour calculer la position d'une ligne dans un texte. Mais attention, il s'agit d'une ruse et comme le dit clementmarcotte ça dépend de tous les facteurs qu'il t'a donné (l'imprimante et de sa zone imprimable, du pilote d'imprimante, de la police de caractères utilisée, de la taille de la police, des tableaux, des images, des marges, de la justification, des coupures de mots etc.).
    Voici la ruse, il faut une fois de plus demander à Word de résoudre le problème tout seul : dans Word, il y a dans la boite de propriétés, un onglet "Statistiques" qui donne la dernière valeur calculée du nombre de paragraphe, de mots et... de lignes. Voilà le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NbLignes = Selection.Range.ComputeStatistics(Statistic:=wdStatisticLines)
    Attention, tu dois d'abord faire une sauvegarde complète de ton document (avec les mises à jour des champs) puis te positionner sur le paragraphe dont le n° t'intéresse.

    Evidemment tu peux adapter le code en te basant la position du paragraphe concerné mais tu devras faire la sauvegarde complète auparavant (1 seule fois suffit depuis la dernière modification).

    @+

  5. #5
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Dans le code que tu viens de donner, il faut étendre la sélection jusqu'au début du document pour avoir le nombre de lignes.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  6. #6
    Expert éminent
    Avatar de Sepia
    Homme Profil pro
    Administrateur du cursus IDE@L - Chef de Projet NCU (digital learning) - Université de Rennes
    Inscrit en
    Octobre 2007
    Messages
    3 117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur du cursus IDE@L - Chef de Projet NCU (digital learning) - Université de Rennes
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 3 117
    Points : 6 856
    Points
    6 856
    Par défaut
    Oui, en effet, j'ai oublié de préciser.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 42
    Points : 25
    Points
    25
    Par défaut
    bonjour,

    merci de vos astuces.. ca m'a l'air bien compliqué !!!
    Je pense qu'il est plus simple que je fasse directement une recherche du paragraphe dans mon texte word où je veux me placer (je veux transférer des tableaux d'excel vers word), faire un décalage d'un certain nombre de lignes et insérer mes données !!

  8. #8
    Expert éminent
    Avatar de Sepia
    Homme Profil pro
    Administrateur du cursus IDE@L - Chef de Projet NCU (digital learning) - Université de Rennes
    Inscrit en
    Octobre 2007
    Messages
    3 117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur du cursus IDE@L - Chef de Projet NCU (digital learning) - Université de Rennes
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 3 117
    Points : 6 856
    Points
    6 856
    Par défaut
    Salut a_centaure,

    C'est comme tu veux mais la méthode n'est pas trop compliquée, c'est juste qu'elle dépend d'énormément de paramètres liés essentiellement à l'imprimante.

    @+

Discussions similaires

  1. Comment récupérer les numéros de ligne/colonne d'une plage
    Par Val2000 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 18/07/2013, 16h56
  2. Réponses: 3
    Dernier message: 12/01/2012, 17h07
  3. Récupérer les numéros de ligne et de colonne
    Par cheeser dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/07/2008, 16h28
  4. Rajouter les numéros de ligne dans une colone d'une requete
    Par AntiSAL dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 02/11/2005, 19h07

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