Macro pour masquer du texte, fiche de correction

Bonjour,
Je suis enseignant et j’ai fréquemment besoin de faire des polycopiés pour mes élèves ainsi que la correction associée. C’est important d’avoir un seul document pour maitriser les modifications.
J’ai vu que l’on peut créer un style (CORRECTION par exemple), et puis au moment d’imprimer le sujet élève, éditer le style de paragraphe CORRECTION, dans l’onglet effet de caractères, choisir de masquer le texte.
Cela ne fonctionne pas bien (si le style CORRECTION a un arrière plan coloré et/ou des bordures).
De plus j’ai parfois des paragraphes que je veux dans le sujet mais pas dans la correction (par exemple un schéma à compléter, pour lequel je ne veux que le schéma corrigé dans la correciton).
Mon idée serait d’avoir 4 styles :

  • CORRECTION
  • CORRECTION_CACHÉ
  • SUJET
  • SUJET_CACHÉ

Et 2 macros qui basculent les styles pour afficher le sujet ou la correction :

  • Une qui s’appelerait AFFICHE_SUJET qui passe le contenu ayant le style CORRECTION vers le style CORRECTION_CACHÉ (qui est définit pour être masqué), et qui passe le style SUJET_CACHÉ vers le style SUJET.
  • Une autre qui ferait l’inverse.

Est-ce possible ? Je ne trouve pas vraiment de doc de référence sur les macros LO, y en a-t-il une ?

Merci d’avance pour vos idées,

Pierre

Bonsoir,

la meilleure macro est celle dont n’a pas besoin :slight_smile:

Regardez du côté des paragraphes masqués et des sections masquées selon une condition que vous basez sur une variable interne.

C’est bien vrai, mais ici j’ai un peu du mal à m’en passer.
J’ai essayé les paragraphes masqués, mais il ne masque pas la bordure du paragraphe.
J’ai essayé les sections masqués. Là ça fonctionne, mais c’est un peu fastidieux. Pour chaque élément de correction, je dois insérer une nouvelle section, préciser qu’elle doit être masquée, et redonner la condition de masquage.
Merci Jfn, si je ne trouve rien d’autre je resterai probablement sur cette solution.

et quelle serait la différence entre les 2 ? :thinking:

LibreOffice: Style Service Reference :innocent:


blague à part, la meilleure option devrait être : Insertion, édition et enchaînement de cadres


sinon AltSearch doit pouvoir faire ça : AltSearch » Libreoffice Extensions

CORRECTION : écrit en vert, encadré, arrière plan coloré
CORRECTION_CACHÉ : texte masqué, aucune bordure, aucun arrière plan.

Ça me semblait plus simple d’itérer les paragraphes et de les changer de styles plutôt que modifier le style point par point.

Merci, je ne savais donc pas chercher.

Néanmoins je n’arrive pas à trouver la propriété « bordure de paragraphe ». Toutes les propriétés sont-elles accessibles par une macro ? EDIT : LibreOffice: ParagraphProperties Service Reference

Je pense que la solution de masquer à l’impression ne me conviendra pas car j’ai besoin d’optimiser la mise en page sans la correction pour que cela rentre dans une page par exemple.

Je met en PJ un exemple de document avec correction.
exemple.odt (244.0 KB)

Bon finalement je propose une solution. Merci à fpy qui m’a mis sur la piste avec le manuel de référence.
Voici un script qui parcourt les paragraphes.
Si il y a des paragraphes avec le style CORRECTION alors il les passe avec le style CORRECTION_INVISBLE, sinon il fait le contraire.
Un appel à la macro active/désactive la correction.
En la mettant sur un raccourci clavier c’est très pratique.
Voici un fichier exemple :
exemple.odt (247.1 KB)

Et le script :

Sub BasculerStyleCorrection
    Dim oDoc As Object
    Dim oText As Object
    Dim oEnum As Object
    Dim oPar As Object
    Dim correctionTrouve As Boolean

    oText = oDoc.Text
    oEnum = oText.CreateEnumeration
    correctionTrouve = False

    Do While oEnum.HasMoreElements
        oPar = oEnum.NextElement
        If oPar.SupportsService("com.sun.star.text.Paragraph") Then
            If oPar.ParaStyleName = "CORRECTION" Then
                correctionTrouve = True
                Exit Do
            End If
        End If
    Loop

    oEnum = oText.CreateEnumeration
    Do While oEnum.HasMoreElements
        oPar = oEnum.NextElement
        If oPar.SupportsService("com.sun.star.text.Paragraph") Then
            If correctionTrouve And oPar.ParaStyleName = "CORRECTION" Then
                oPar.ParaStyleName = "CORRECTION_INVISIBLE"
            ElseIf Not correctionTrouve And oPar.ParaStyleName = "CORRECTION_INVISIBLE" Then
                oPar.ParaStyleName = "CORRECTION"
            End If
        End If
    Loop
End Sub