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 :

Point à la fin du paragraphe [WD-2010]


Sujet :

VBA Word

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 59
    Points : 41
    Points
    41
    Par défaut Point à la fin du paragraphe
    Bonjour,
    Si je place systématiquement un point à la fin d'une phrase, il m'arrive d'en oublier à la fin des paragraphes. Je cherche à créer une petite macro de vérification qui constaterait la présence ou l'absence de ce point à la fin de chaque paragraphe et qui l'ajouterait si nécessaire...
    Je connais l'architecture mais tous les éléments du code

    ActiveDocument. début du document
    Pour chaque paragraphe, vérifiez si le dernier caractère est "." : S'il y est passez au paragraphe suivant sinon insérez "."

    une base trouvé dans l'aide VBA de word 2010 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Set doc = ActiveDocument
    Set rngRange = _
        doc.Range(doc.Paragraphs(1).Start, _
        doc.Paragraphs(1).End - 1)
    rngRange.InsertAfter _
        "."
    Comment faire pour chaque paragraphe ( For each.... next)

    Ce code pourrait s'insérer dans une autre macro juste avant l'enregistrement



    Merci de votre aide

  2. #2
    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,

    On peut faire une boucle sur les paragraphes, mais elle va contenir les sauts de paragraphes.
    Donc, on va travailler sur un morceau du paragraphe.


    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
     
    'Déclaration des variables
    Dim pAra As Paragraph
     
    'Boucle sur les paragraphes
    For Each pAra In ActiveDocument.Paragraphs
    'Test sur le dernier caractère du paragraphe
    'Si ce n'est pas un point, on l'ajoute
    If Mid(pAra.Range.Text, Len(pAra.Range.Text) - 1, 1) <> "." Then
    pAra.Range.Select
    'On se déplace juste derrière le saut de paragraphe
    Selection.Collapse direction:=wdCollapseEnd
    'On recule d'un caractère pour être devant le saut de paragraphe
    Selection.MoveLeft unit:=wdCharacter, Count:=1
    'On ajoute le point
    Selection.TypeText "."
    End If
    Next pAra
    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 !

  3. #3
    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 Sanfric,

    Analyse ta demande et regarde ce que Word peut faire pour toi avec un simple remplacement global (cf. Tuto sur Rechercher/Remplacer) : tu demandes à Word d'ajoute des points à tous les paragraphes qui se terminent par un mot et pas par un signe de ponctuation.

    Le remplacement global à effectuer est le suivant :
    Critère de recherche = ">^p"
    Critère de remplacement = ".^&"
    Option "Utiliser les caractères génériques" cochée

    Mais comme Word ne sait pas traiter les retours chariot avec l'option "Utiliser les caractères génériques" cochée ==> tu dois faire un pré-traitement (et donc un post-traitement )

    Pré-traitement : on remplace les retours chariot par un truc que tu n'as pas dans ton document par exemple "$$$"
    Critère de recherche = "^p"
    Critère de remplacement = "$$$^&"
    Option "Utiliser les caractères génériques" non cochée

    Remplacement : on ajoute des points à tous les paragraphes qui se terminent par un mot et pas par un signe de ponctuation
    Critère de recherche = ">$$$"
    Critère de remplacement = ".$$$"
    Option "Utiliser les caractères génériques" cochée

    Post-traitement : on remplace le truc que tu n'as pas dans ton document initial (ici "$$$") par des retours chariot
    Critère de recherche = "$$$^p"
    Critère de remplacement = "^p"
    Option "Utiliser les caractères génériques" non cochée

    Voilà c'est fait. Tu ajoutes si tu n'as pas de signes de ponctuation, de tirets...
    En fait sur les documents correctement écrits en français.

    Maintenant si tu veux en plus traiter les cas qui ne sont pas correctement écrits en français comme ceux des paragraphes qui finissent par des espaces, des tabulations... tu dois ajouter dans le pré-traitement

    Critère de recherche = "^w^p"
    Critère de remplacement = "^p"
    Option "Utiliser les caractères génériques" non cochée

    Évidemment toutes ses commandes peuvent grouper dans une macro puisqu'il s'agit de fonctions standards Word. Le plus simple pour cela est alors d'enregistrer une fois les remplacements dans une macro puis d'associer cette macro à un bouton (du ruban puisque tu es en Word 2010).

    @+

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 59
    Points : 41
    Points
    41
    Par défaut pb lignes vides
    Bonjour,

    La macro de Heureux-Oli fonctionne bien s'il n'y a pas de ligne vierge(retour chariot uniquement) dans le texte et/ou à la fin du texte. Sinon on a erreur 5 : argument ou appel de procédure incorrect.
    Il manquerait,à mon avis,un If... Then précisant que si le paragraphe est vide, il faut passer au suivant.
    Autre anomalie pour la dernière ligne: si le retour chariot est juste après le dernier mot, le "." se met évidemment avant la dernière lettre.

    Quant à la méthode de Sépia, je n'arrive pour l'instant qu'à faire fonctionner que la première partie (sans les guillemets).Mais je vais réessayer !

  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,

    On peut toujours faire un test sur la longueur de la chaîne avant de traiter le paragraphe.
    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
    Membre à l'essai
    Inscrit en
    Janvier 2011
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 11
    Points : 12
    Points
    12
    Par défaut Ne compliquons pas une chose simple
    Bonjour à toutes et tous
    Je pense que vous donnez de la complexité à une solution simple. La macro a écrire (ou à enregistrer bêtement avec l’enregistreur de macro) est la suivante :
    Remplacer ¶ par . ¶
    Remplacer .. par .
    C’est tout.
    On peut ensuite traiter si nécessaire les paragraphes vides que l’on souhaite conserver par :
    Remplacer ¶.¶ par ¶¶
    Et si l’on ne souhaite pas les conserver :
    Remplacer ¶.¶ par ¶
    Bonne journée
    Histoire orale

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 59
    Points : 41
    Points
    41
    Par défaut début de solution simple basée sur le post précédent
    Ci-joint un code à 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
    36
    37
    38
    39
    Sub point2()
    '
    'point à la fin des paragraphes
       ' Aller au début du texte
        Selection.HomeKey Unit:=wdStory
     
     '  mettre des points
        Selection.Find.ClearFormatting
        Selection.Find.Highlight = False
        Selection.Find.Replacement.ClearFormatting
        Selection.Find.Replacement.Highlight = True
        With Selection.Find
            .TEXT = "^p"
            .Replacement.TEXT = ".^p"
            .Forward = False
            .Wrap = wdFindContinue
            .Format = True
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
        End With
        Selection.Find.Execute Replace:=wdReplaceAll
     
     ' supprimer les points en double en remontant
        With Selection.Find
            .TEXT = ".."
            .Replacement.TEXT = "."
            .Forward = True
            .Wrap = wdFindContinue
            .Format = True
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
        End With
        Selection.Find.Execute Replace:=wdReplaceAll
    NB :
    -Il faut que la marque de paragraphe soit juste après le dernier mot.
    -Évidemment les éventuels points de suspension subissent le 2e traitement aussi!
    -Encore à résoudre: supprimez le point des paragraphes vides (en rouge). Comme dans l'exemple ci-dessous ( Titre d'un texte, puis à la ligne, puis première ligne du texte). Un connaisseur peut-il me rajouter un bout de code?

    Un éducateur sportif pour encadrer les jeunes.
    .
    Mardi soir,......

  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
    Citation Envoyé par histoire orale Voir le message
    Bonjour à toutes et tous
    Je pense que vous donnez de la complexité à une solution simple. La macro a écrire (ou à enregistrer bêtement avec l’enregistreur de macro) est la suivante :
    Remplacer ¶ par . ¶
    Remplacer .. par .
    C’est tout.
    On peut ensuite traiter si nécessaire les paragraphes vides que l’on souhaite conserver par :
    Remplacer ¶.¶ par ¶¶
    Et si l’on ne souhaite pas les conserver :
    Remplacer ¶.¶ par ¶
    Bonne journée
    Histoire orale
    Salut Histoire orale,

    En effet, comme ça c'est plus simple mais ça ne traite que les points après un point. Bien que Sanfric ne nous l'ai pas indiqué, tu penses vraiment que si ton traitement ajoute un "." derrière des signes de ponctuation comme la virgule, le point-virgule, ça correspond à un usage réel. L'intérêt de ma méthode c'est que tous les signes de ponctuation sont traité en une seule opération. Certes c'est plus que Sanfric a décrit mais surtout ça correspond à ce qu'il a demandé et ce que ça fait en plus (pour le même code), je suis convaincu que c'est ce qu'il a voulu dire. Donc pour faire que les points et supprimer les ".." ta méthode est bonne mais elle se limite par exemple à la simple expression ".." et "¶.¶" mais si tu as 2 espaces devant le ¶ ou une tabulation, alors qu'avec ce que j'ai proposé c'est aussi pris en compte.

    Maintenant nous on propose. Avec Heureux-Oli on essaie que les gens progressent dans l'usage de l'outil pour mieux se débrouiller seul , voire promouvoir auprès de leurs petits camarades de jeu des solutions/astuces ou à défaut leur conseiller le site de DVP.com . On espère (mais bon on reste réaliste) qu'ils pourront même un jour conseiller d'autres utilisateurs sur Word

    Donc comme souvent il y a plusieurs solutions, tant mieux. Elles sont plus ou moins simples et couvrent plus ou moins de fonctionnels. Donc Sanfric pourra toujours choisir en fonction de son niveau initial, de sa volonté de progresser et son urgence pour résoudre le problème. Et en plus avec un pseudo comme le sien, nos conseils/solutions que les DVPnautes lui proposent sont gratuits, tu penses bien qu'il est content.

    @+

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 59
    Points : 41
    Points
    41
    Par défaut Happy end
    Bonjour,
    Merci pour vos conseils à tous. Mon codage est basique de chez basique et je progresse de façon empirique, résolvant les questions par des conseils glanés à gauche et à droite, sans prétention.
    Ce matin, j'ai rajouté ce bout de code qui résout le problème des points inutiles dans ce modèle de présentation de texte que j'utilise fréquemment.
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     ' Pas de point final pour le Titre et l'interligne
    ' à rajouter au code ci-dessus
     
          Selection.HomeKey Unit:=wdStory
        Selection.Find.ClearFormatting
        Selection.Find.Highlight = False
        Selection.Find.Replacement.ClearFormatting
        Selection.Find.Replacement.Highlight = True
        With Selection.Find
            .TEXT = ".^p"
            .Replacement.TEXT = "^p"
            .Forward = True
            .Wrap = wdFindAsk
            .Format = True
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
        End With
        Selection.Find.Execute
        With Selection
            If .Find.Forward = True Then
                .Collapse Direction:=wdCollapseStart
            Else
                .Collapse Direction:=wdCollapseEnd
            End If
            .Find.Execute Replace:=wdReplaceOne
            If .Find.Forward = True Then
                .Collapse Direction:=wdCollapseEnd
            Else
                .Collapse Direction:=wdCollapseStart
            End If
            .Find.Execute
        End With
        With Selection
            If .Find.Forward = True Then
                .Collapse Direction:=wdCollapseStart
            Else
                .Collapse Direction:=wdCollapseEnd
            End If
            .Find.Execute Replace:=wdReplaceOne
            If .Find.Forward = True Then
                .Collapse Direction:=wdCollapseEnd
            Else
                .Collapse Direction:=wdCollapseStart
            End If
            .Find.Execute
        End With
    L'ensemble est un peu long mais simple et efficace. Je pense l'intégrer dans une macro d'enregistrement via Application.run
    Mais si un lecteur a d'autres suggestions pour un code plus élaboré ou plus élégant, je suis preneur néanmoins.

  10. #10
    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 j'ai donné, il y a 9 lignes.
    Si c'est plus complexe que 46 dans le dernier message
    Possible !
    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 !

  11. #11
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2014
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Janvier 2014
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Ca ne fonctionne pas...
    Citation Envoyé par sanfric Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Set doc = ActiveDocument
    Set rngRange = _
        doc.Range(doc.Paragraphs(1).Start, _
        doc.Paragraphs(1).End - 1)
    rngRange.InsertAfter _
        "."
    Bonjour,

    j'ai essayé pendant 3 heures de faire ce que tu proposes et ça ne fonctionne pas.

    Peux-tu me dire quoi et comment bien faire la Macro dans Word, ainsi que les étapes détaillées ?

    Cela me serait bien utile dans mes documents.

    Merci beaucoup

  12. #12
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Sepia Voir le message
    Le remplacement global à effectuer est le suivant :
    Critère de recherche = ">^p"
    Critère de remplacement = ".^&"
    Option "Utiliser les caractères génériques" cochée

    Mais comme Word ne sait pas traiter les retours chariot avec l'option "Utiliser les caractères génériques" cochée ==> tu dois faire un pré-traitement (et donc un post-traitement )

    HUMHUM
    Lorsque les caractères génériques sont cochés, le code pour les sauts de paragraphe n'est pas le même, c'est : ^013
    tout simplement
    En outre, j'ai testé et cela semble fonctionner.
    Donc, si je résume :
    Rechercher : >^013
    Remplacer par : .^&
    Cocher les caractères génériques
    Et remplacer tout.

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

Discussions similaires

  1. Supprimer un point en fin de QString
    Par Gébix dans le forum Qt
    Réponses: 1
    Dernier message: 25/08/2012, 01h11
  2. [RegEx] Trouver une fin de paragraphe dans un texte
    Par anemone-clown dans le forum Langage
    Réponses: 12
    Dernier message: 09/09/2011, 16h07
  3. [WD-2000] Insérer des balises <p> et </p> en début et fin de paragraphe
    Par Nerva dans le forum VBA Word
    Réponses: 5
    Dernier message: 03/12/2010, 15h29
  4. [CS3] Non respect des saut de ligne en fin de paragraphe dans xml from fmpro
    Par didde3866 dans le forum Dreamweaver
    Réponses: 2
    Dernier message: 23/01/2010, 09h44

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