FAQ LibreOffice et Apache OpenOfficeConsultez toutes les FAQ

Nombre d'auteurs : 10, nombre de questions : 359, dernière mise à jour : 15 juillet 2017  Ajouter une question

 

Bienvenue sur la FAQ, elle a été réalisée pour répondre aux questions concernant les suites bureautiques Apache OpenOffice (AOO) et LibreOffice (LibO).

Si vous souhaitez participer pour l'améliorer, pour proposer vos contributions ou si vous constatez des erreurs dans cette page, n'hésitez-pas !!! Participez.


SommaireProgrammation OBasicOBasic : Traitement de texte (25)
précédent sommaire suivant
 

Cette procédure retrouve un mot spécifique, le colorie en rouge et modifie sa mise en forme afin de mieux le visualiser dans le document.

Code vb : Sélectionner tout
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
Sub retrouverMot 
Dim oSearch As Object , Cible As Object 
Dim Tableau As Variant 
Dim x As long 
  
oSearch = ThisComponent.createSearchDescriptor 
  
With oSearch 
  .SearchString = "essai" 'la chaîne à identifier 
  .SearchWords = True 
End With 
  
Tableau = ThisComponent.FindAll(oSearch) 
MsgBox "Le mot recherché est présent " & Tableau.count & " fois." 
  
For x = 0 To Tableau.Count - 1 
  Cible = Tableau(x) 
  
  Cible.CharWeight = com.sun.star.awt.FontWeight.BOLD 'gras 
  Cible.CharPosture = com.sun.star.awt.FontSlant.ITALIC 'italique 
  Cible.CharFontName = "Arial" 'police 
  Cible.CharUnderline = com.sun.star.awt.FontUnderline.SINGLE 'souligné 
  Cible.CharBackcolor = RGB(255,0,0) 'couleur de fond 
Next 
End Sub

Mis à jour le 26 août 2013 SilkyRoad zoom61

Code vb : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub RemplacerChaine 
  Dim oDoc As Object 
  Dim Remplace As Object 
  Dim Ancien As String , Nouveau As String 
  
  Ancien = "Mme" 
  Nouveau = "Madame" 
  
  oDoc = ThisComponent 
  Remplace = oDoc.createReplaceDescriptor 
  
  Remplace.SearchString = Ancien 
  Remplace.ReplaceString = Nouveau 
  oDoc.replaceAll(Remplace) 
  
End Sub
Si vous souhaitez remplacer plusieurs chaînes en une seule fois, utilisez :
Code vb : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sub RemplacerPlusieursChaines 
  Dim oDoc As Object 
  Dim Remplace As Object 
  Dim Ancien(3) As String , Nouveau(3) As String 
  Dim i As Long 
  
  Ancien() = Array("Mme" , "Mlle" , "Mr") 
  Nouveau() = Array("Madame" , "Mademoiselle" , "Monsieur") 
  
  oDoc = ThisComponent 
  Remplace = oDoc.createReplaceDescriptor 
  
  For i = 0 To 2 
    Remplace.SearchString = Ancien(i) 
    Remplace.ReplaceString = Nouveau(i) 
    oDoc.replaceAll(Remplace) 
  Next i 
  
End Sub

Mis à jour le 26 août 2013 SilkyRoad

Code vb : Sélectionner tout
1
2
3
4
5
6
7
8
9
Sub Insertion_SautDePage 
  Dim oCurseur As Object 
  Dim Cible As Object 
  
  oCurseur = ThisComponent.getCurrentController().getViewCursor() 
  Cible = oCurseur.getText() 
  Cible.insertControlCharacter( oCurseur, com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, False ) 
  oCurseur.BreakType = com.sun.star.style.BreakType.PAGE_BEFORE 
End Sub

Mis à jour le 2 août 2013 SilkyRoad

La procédure suivante ajoute un lien hypertexte à l'emplacement du curseur.

Code vb : Sélectionner tout
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
Sub InsererLien_EmplacementCurseur  
  Dim oCurseur As Object , oTexte As Object  
  
  oCurseur = ThisComponent.CurrentController.getViewCursor()  
  oTexte = oCurseur.getText()  
  oTexte.insertString(oCurseur, "La description", True)  
  
  With oCurseur 
    'Spécifie l'URL du lien hypertexte 
    .HyperLinkURL = "http://www.developpez.com" 
    'Spécifie le nom du lien  
    .HyperLinkName = "Nom lien hypertexte" 
  
    '--- pour créer un lien vers un document odt --- 
    '.HyperLinkURL = ConvertToURL("C:\LeDocument.odt") 
    ' 
    'Pour atteindre un signet lors de l'ouverture du fichier : 
    '.HyperLinkURL = ConvertToURL("C:\LeDocument.odt") & "#LeSignet" 
    '----------------------------------------------- 
  
    '--- Pour créer un lien à l'intérieur du même document --- 
    'Cet exemple permet d'atteindre un signet nommé "NomSignet" 
    '.HyperLinkURL = "#NomSignet" 
    '---------------------------------------------------------     
  End With  
End Sub

Mis à jour le 26 août 2013 SilkyRoad

Par exemple, si vous souhaitez connaître le nombre de pages, de mots, de caractères, d'images, de paragraphes, de tableaux ou de lignes dans un document :

  • lorsque le fichier est ouvert ;
  • utilisez le menu Fichier ;
  • propriétés ;
  • Onglet « Statistiques ».


Pour récupérer ces informations par macro :
Code vb : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sub LireProprietes_Statisques_Writer 
  Dim Resultat As String 
  Dim Curseur As Object 
  
  Curseur = ThisComponent.currentController.getViewCursor 
  Curseur.jumpToLastPage() 
  
  Resultat = "Nombre de caractères: " & ThisComponent.CharacterCount & Chr(10) & _ 
    "Nombre d'images: " & ThisComponent.GraphicObjects.Count & Chr(10) & _ 
    "Nombre de mots: " & ThisComponent.WordCount & Chr(10) & _ 
    "Nombre de paragraphes: " & ThisComponent.ParagraphCount & Chr(10) & _ 
    "Nombre de tableaux: " & ThisComponent.TextTables.Count & Chr(10) & _ 
    "Nombre de pages: " & Curseur.Page & Chr(10) & _ 
    "Nombre de lignes: " & ThisComponent.CurrentController.LineCount 
  
  MsgBox Resultat 
End Sub

Mis à jour le 26 août 2013 SilkyRoad

Code vb : Sélectionner tout
1
2
3
4
5
6
7
8
Sub NomPolice_EmplacementCurseur  
  Dim Curseur As Object 
  
  Curseur = ThisComponent.CurrentController.ViewCursor  
  
  MsgBox "Nom: " & Curseur.CharFontName & Chr(10) & _ 
    "Taille: " & Curseur.CharHeight 
End Sub

Mis à jour le 2 août 2013 SilkyRoad

La procédure extrait le texte contenu entre deux mots identiques « MotCle ».
La procédure fonctionne uniquement si les deux mots servant de balise sont dans le même paragraphe.

Code vb : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Sub ExtractionPlageTexteDelimite 
  Dim Plage As Object 
  Dim Cible As String 
  Dim oCSD As Object 
  
  oCSD = ThisComponent.createSearchDescriptor 
  Cible = "MotCle" & ".*" & "MotCle" 
  
  With oCSD 
    .SearchString = Cible 
    .SearchRegularExpression = True 
  End With 
  
  Plage = ThisComponent.FindFirst( oCSD ) 
  
  If IsNull(Plage) Then 
    Msgbox "Non trouvé" 
    Else 
    Msgbox Plage.String 
  End If 
  
End Sub

Mis à jour le 26 août 2013 SilkyRoad

Sans macro, vous pouvez utiliser le Menu Affichage/Plein écran

La procédure suivante permet d'obtenir le même résultat :
Noubliez pas de créer un bouton pour revenir en mode normal, en cas de besoin.
La macro ne fonctionne pas toujours lorsqu'elle est lancée depuis l'éditeur de macros.

Code vb : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
Sub AffichagePleinEcran 
  Dim oFrame As Object 
  Dim oDispatcher As Object 
  Dim Args(0) As New com.sun.star.beans.PropertyValue 
  
  oFrame = ThisComponent.CurrentController.Frame 
  oDispatcher = createUnoService("com.sun.star.frame.DispatchHelper") 
  
  Args(0).Name = "FullScreen" 
  Args(0).Value = True 
  oDispatcher.executeDispatch( oFrame , ".uno:FullScreen", "", 0, Args() ) 
End Sub


Cette macro peut également être utilisée dans Tableur.

Mis à jour le 26 août 2013 SilkyRoad

L'objectif est d'extraire chaque page du document pour créer de nouveaux fichiers.
La macro boucle sur toutes les pages, sélectionne le contenu de chaque page, copie la sélection, effectue un collage dans un nouveau fichier et l'enregistre.

Une option permet de créer une copie de chaque fichier au format PDF.

Code vb : Sélectionner tout
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
Sub ExtractionPages_Dans_DocumentWriter 
  Dim NbPages As Integer , NumPage As Integer 
  Dim Curseur As Object , oTextCurseur As Object 
  Dim Debut As Variant , Fin As Variant 
  Dim ArgsProprietes(2) As New com.sun.star.beans.PropertyValue  
  Dim Document As Object , Dispatcher As Object     
  Dim Args() 
  Dim oDesktop As Object , oDoc As Object 
  Dim Fichier As String , NomFichier As String 
  Dim Destination As Variant 
  
  
  'Fige l'écran 
  ThisComponent.LockControllers  
  
  'Compte le nombre de pages dans le document   
  Curseur = ThisComponent.currentController.ViewCursor 
  Curseur.GoToEnd(False) 
  NbPages = Curseur.Page 
  
  'On sort s'il n'y a qu'une page 
  If NbPages = 1 Then Exit Sub 
  
  'Positionne le curseur au début du document 
  Curseur.GoToStart( True ) 
  
  
  '--- Spécifie le filtre de conversion --- 
  ArgsProprietes(0).Name = "FilterName"  
  ArgsProprietes(0).Value = "writer_pdf_Export"  
  ArgsProprietes(1).Name = "CompressMode" 
  ArgsProprietes(1).Value = 1
Code vb : Sélectionner tout
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
'Boucle sur toutes les pages 
  For NumPage = 1 To NbPages 
    'Source: 
    'http://www.oooforum.org/forum/viewtopic.phtml?t=20670&sid=1c0970c54c1cdd27e6659496a86851f7 
    'JohnV 
    oTextCurseur = ThisComponent.Text.createTextCursor  
    Curseur.gotoRange( oTextCurseur , False ) 
  
    Do While Curseur.Page <> NumPage  
      If Not oTextCurseur.gotoNextParagraph( False ) Then 
        End  
      End If  
      Curseur.gotoRange( oTextCurseur , False )  
    Loop  
  
    Debut = ThisComponent.Text.createTextCursorByRange(oTextCurseur)  
  
    Do While Curseur.Page <> NumPage + 1  
      If Not oTextCurseur.gotoNextParagraph( False ) Then 
        oTextCurseur.gotoEndOfParagraph( False )  
        GoTo MarkIt  
      End If  
        Curseur.gotoRange( oTextCurseur , False )  
    Loop  
  
    oTextCurseur.gotoPreviousParagraph( False )  
    oTextCurseur.gotoEndOfParagraph( False )  
  
    MarkIt:  
    Fin = ThisComponent.Text.createTextCursorByRange( oTextCurseur )  
    'Sélectionne le contenu de la Xeme page  
    Curseur.gotoRange( Debut , False )  
    Curseur.gotoRange( Fin , True )
Code vb : Sélectionner tout
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
  
    '--- 
    'Copie la Xeme page sélectionnée 
    Document = ThisComponent.CurrentController.Frame 
    Dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") 
    Dispatcher.executeDispatch(Document, ".uno:Copy", "", 0, Array()) 
  
    'Crée un nouveau document Traitement de texte 
    oDesktop = createUnoService("com.sun.star.frame.Desktop") 
    Fichier = "private:factory/swriter" 
    oDoc = oDesktop.LoadComponentFromURL(Fichier, "_blank", 0, Args()) 
  
    'Effectue un collage dans le nouveau document  
    Destination = oDoc.CurrentController.Frame 
    Dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") 
    Dispatcher.executeDispatch(Destination, ".uno:Paste", "", 0, Array()) 
  
    'Sauvegarde le nouveau fichier au format odt 
    NomFichier = ConvertToURL( "C:\Copie Page" & NumPage & ".odt" ) 
    oDoc.storeAsURL(NomFichier, Args()) 
    'Crée une copie au format pdf 
    NomFichier = ConvertToURL( "C:\CopiePDF Page" & NumPage & ".pdf" ) 
    oDoc.storeToUrl( NomFichier , ArgsProprietes()) 
  
    'Ferme le fichier 
    oDoc.Close( False ) 
    '--- 
  
    'Positionne le curseur au début du document 
    Curseur.GoToStart( True ) 
  Next NumPage 
  
  ThisComponent.UnlockControllers 
  MsgBox "Terminé."   
End Sub

Mis à jour le 27 août 2013 SilkyRoad

Ayant un document avec plus de 200 tableaux et j'ai dû modifier la largeur de la 1ère colonne de tous les tableaux (pour passer de 1 cm à 1,3 cm).

Voici donc le code de la macro que j'ai utilisée :

Code vb : Sélectionner tout
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
rem ------------------------------------------------------------------------------- 
rem Procédure pour modifier la largeur de la première colonne d'un tableau à 1,3 cm 
rem ------------------------------------------------------------------------------- 
Sub ModifyTableWidth() 
    Dim largeur as double     
    Dim separateur as variant 
    Dim oVCurs 
  
    ' récupère la vue du curseur  
    oVCurs = ThisComponent.getCurrentController().getViewCursor() 
  
    ' vérifie que le curseur est dans un tableau 
    If IsEmpty(oVCurs.TextTable) Then 
        MsgBox "The cursor is NOT in a table" 
        Exit Sub 
    End If 
  
    ' récupère le tableau 
    oTable = oVCurs.TextTable 
    ' MsgBox "The cursor is in table " & oTable.getName 
  
    ' la largeur de la page en cm (il y a probablement un autre moyen pour la récupérer) 
    width_page = 17 
  
    ' la largeur du tableau 
    width_table = oTable.TableColumnRelativeSum 
  
    ' la largeur désirée en cm 
    needed_width = 1.3 
  
    ' calcule la nouvelle largeur de la colonne 
    width_col = needed_width * width_table / width_page 
  
    ' récupère les séparateurs du tableau 
    separateur = oTable.TableColumnSeparators 
  
    ' modifie la largeur de la colonne 0 
    separateur(0).position = width_col 
  
    ' positionne la nouvelle largeur 
    oTable.TableColumnSeparators = separateur 
end sub

Mis à jour le 27 mai 2015 ram-0000

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2017 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

 
Contacter le responsable de la rubrique OpenOffice & LibreOffice