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 : TableurLes feuilles (55)
précédent sommaire suivant
 

Code vb : Sélectionner tout
1
2
3
4
Dim oDoc As Object 
  
oDoc=ThisComponent 'Spécifie le tableur contenant la macro 
MsgBox oDoc.Sheets.Count

Mis à jour le 2 août 2013 SilkyRoad

Code vb : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
Dim oDoc As Object 
  
oDoc=ThisComponent 
  
'Vérifie si la feuille nommée "Feuille2" existe 
If oDoc.Sheets.hasByName("Feuille2") Then  
	MsgBox "La feuille existe" 
	Else 
	MsgBox "La feuille n'existe pas" 
End If

Mis à jour le 2 août 2013 SilkyRoad

Code vb : Sélectionner tout
1
2
3
4
5
6
7
8
9
Dim oDoc As Object 
Dim i As Integer 
  
oDoc=ThisComponent 
  
For i = 1 to oDoc.Sheets.Count 
	'Remarque: l'index de la 1ere feuille = 0 
	MsgBox oDoc.Sheets(i-1).Name 
Next

Mis à jour le 2 août 2013 SilkyRoad

Code vb : Sélectionner tout
1
2
3
4
5
6
7
8
9
Dim oDoc As Object , Feuille As Object 
  
oDoc=ThisComponent 
  
Feuille = oDoc.getCurrentController().getActiveSheet() 
MsgBox Feuille.getName() 
  
'Une autre solution 
MsgBox oDoc.CurrentController.ActiveSheet.getName

Mis à jour le 2 août 2013 SilkyRoad

Code vb : Sélectionner tout
1
2
3
4
5
6
Dim oDoc As Object 
  
oDoc=ThisComponent 
  
'Supprime la feuille nommée "Feuille3" 
oDoc.GetSheets.RemoveByName("Feuille3")

Mis à jour le 2 août 2013 SilkyRoad

Code vb : Sélectionner tout
1
2
3
4
5
6
Dim oDoc As Object 
  
oDoc=ThisComponent 
  
'Déplace la feuille nommée "Feuille2" à la fin 
oDoc.getSheets.moveByName("Feuille2",oDoc.Sheets.Count)

Mis à jour le 2 août 2013 SilkyRoad

Code vb : Sélectionner tout
1
2
3
4
5
6
Dim oDoc As Object 
  
oDoc=ThisComponent 
  
'Ajoute une feuille, la nomme et place l'onglet en 3eme position 
oDoc.GetSheets.insertNewByName("ma nouvelle feuille",2)

Mis à jour le 2 août 2013 SilkyRoad

Code vb : Sélectionner tout
1
2
3
4
5
6
7
Dim oDoc As Object , Feuille As Object 
  
oDoc=ThisComponent 
  
'Renomme la feuille nommée "Feuille1" 
Feuille = oDoc.getSheets.getByName("Feuille1") 
Feuille.Name = "le nouveau nom"

Mis à jour le 2 août 2013 SilkyRoad

Code vb : Sélectionner tout
1
2
3
4
5
6
7
Dim oDoc As Object 
  
oDoc=ThisComponent 
  
'Duplique la "Feuille2" et la place en première position  
oDoc.getSheets.copyByName("Feuille2", "Copie Feuille2", 0) 
'La syntaxe: copyByName(NomFeuille_A_Dupliquer, NomCopie, IndexPosition)

Mis à jour le 2 août 2013 SilkyRoad

Code vb : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
Dim oDoc As Object , Feuille As Object 
  
oDoc=ThisComponent 
  
'Masque la feuille nommée "Feuille2" 
Feuille = oDoc.getSheets.getByName("Feuille2") 
Feuille.IsVisible = False 
  
'Pour réafficher la feuille 
'Feuille.IsVisible = True

Mis à jour le 2 août 2013 SilkyRoad

Tout d'abord, voici un exemple pour protéger une feuille.
L'équivalent du Menu Outils / Protection / Feuille...

Code vb : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
Sub ProtegerFeuille 
  Dim Feuille As Object 
  
  'Définit la feuille à Protéger 
  Feuille = ThisComponent.Sheets.GetByName("Feuille1") 
  
  'Affecte la protection 
  Feuille.Protect("") 
  
  'Exemple avec mot de passe 
  'Feuille.Protect("MotDePasse")   
End Sub
Vous pouvez ensuite vérifier si la feuille est protégée.
Code vb : Sélectionner tout
1
2
3
4
5
6
7
8
9
Sub VerifierProtectionFeuille 
  Dim Feuille As Object 
  
  'Définit la feuille à Protéger 
  Feuille = ThisComponent.Sheets.GetByName("Feuille1") 
  
  'Renvoie True ou False 
  MsgBox Feuille.IsProtected 
End Sub
Et pour déprotéger la feuille.
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 DeProtegerFeuille 
  Dim Feuille As Object 
  
  'Définit la feuille à Protéger 
  Feuille = ThisComponent.Sheets.GetByName("Feuille1") 
  
  'Déprotection 
  Feuille.UnProtect("") 
  
  'Exemple pour Déprotection par mot de passe 
  'Feuille.UnProtect("MotDePasse") 
  
    'Nota1: 
    'La procédure ne renvoie pas de message d'erreur si le mot 
    'de passe spécifié est erroné. 
  
    'Nota2: 
    '/!\ Les mots de passes sont sensibles à la casse /!\  
End Sub

Mis à jour le 26 août 2013 SilkyRoad

La procédure crée une liaison vers les cellules d'une feuille dans un classeur fermé.
Les données s'affichent dans la première feuille du classeur contenant cette macro.

Code vb : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sub LiensCellules_SourceClasseurFerme 
  Dim objFeuille As Object 
  Dim sURL As String , strFeuille As String 
  Dim Mde As Variant 
  
  'Chemin du classeur fermé 
  sURL = ConvertToURL("C:\Documents and Settings\dossier\NomClasseur.ods")  
  'Nom de la feuille dans le classeur fermé. 
  strFeuille = "NomFeuille"  
  
  Mde = com.sun.star.sheet.SheetLinkMode.NORMAL  
  
  'Spécifie la feuille qui va recevoir les données 
  objFeuille = ThisComponent.Sheets(0) 
  'Création lien 
  objFeuille.link(sURL, strFeuille , "" , "" , Mde)  
End Sub

Mis à jour le 26 août 2013 SilkyRoad

Code vb : Sélectionner tout
1
2
3
4
5
6
7
8
Dim oDoc As Object , Feuille As Object 
  
oDoc = ThisComponent 
Feuille = oDoc.getSheets.getByName("Feuille1") 
  
Feuille.setLinkMode(com.sun.star.sheet.SheetLinkMode.NONE)  
'ou 
'Feuille.LinkMode = com.sun.star.sheet.SheetLinkMode.NONE

Mis à jour le 2 août 2013 SilkyRoad

Code vb : Sélectionner tout
1
2
3
4
Dim i As Integer 
  
i = 5 '0 est l'index de la premiere colonne (A) 
MsgBox ThisComponent.Sheets(0).Columns( i ).getName

Mis à jour le 2 août 2013 SilkyRoad

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
Sub modificationEntete_Et_PiedDePage() 
  Dim leStyle As Object, Entete As Object, piedPage As Object 
  Dim oText As Object, Curseur As Object, leChamp As Object 
  
  'Définit la feuille active 
  Feuille = ThisComponent.CurrentController.getActiveSheet 
  
  leStyle = ThisComponent.StyleFamilies.getByName("PageStyles").getByName(Feuille.PageStyle) 
  
  'Accès à l'entête de page 
    Entete = leStyle.RightPageHeaderContent 
    oText = Entete.LeftText 
    oText.setString ("") 'Efface les données existante dans l'entête de page 
  
    Set Curseur = oText.CreateTextCursor() 
  
    With Curseur 'mise en forme 
      .CharWeight = com.sun.star.awt.FontWeight.BOLD 'Gras 
      .CharPosture = com.sun.star.awt.FontSlant.ITALIC 
      .CharFontName = "Arial" 
      .CharHeight = "12" 'taille caractères 
    End With 
  
   oText.insertString Curseur, "Les données à insérer", False 
  '------------------------------------------------------- 
  
  'pour insérer le Numéro de page en pied de page 
    piedPage = leStyle.RightPageFooterContent 
    oText = piedPage.CenterText 
    oText.setString ("") 'RAZ 
    Set Curseur = oText.CreateTextCursor() 
  
  'Création d'un champ "PageNumber" 
   leChamp = ThisComponent.createInstance("com.sun.star.text.TextField.PageNumber") 
   oText.insertTextContent Curseur , leChamp , False 
  '------------------------------------------------------- 
  
  leStyle.RightPageHeaderContent = Entete 
  leStyle.RightPageFooterContent = piedPage 
End Sub

Pour voir le résultat dans le fichier Open Office :
  • menu Editer ;
  • option « Entête et pied de page ».

Mis à jour le 2 août 2013 SilkyRoad

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
Sub LireContenu_Entete_Et_PiedDePage  
  Dim Feuille As Object , leStyle As Object 
  Dim PiedPage As Object  
  
  'Définit la feuille active 
  Feuille = ThisComponent.CurrentController.getActiveSheet 
  
  leStyle = ThisComponent.StyleFamilies.getByName("PageStyles").getByName(Feuille.PageStyle) 
  
  Entete = leStyle.RightPageHeaderContent 
    MsgBox Entete.LeftText.getString 
    'MsgBox Entete.RightText.getString 
    'MsgBox Entete.CenterText.getString 
  
  PiedPage = leStyle.RightPageFooterContent 
    MsgBox PiedPage.LeftText.getString 
    'MsgBox PiedPage.RightText.getString 
    'MsgBox PiedPage.CenterText.getString   
  
End Sub

Mis à jour le 2 août 2013 SilkyRoad

Code vb : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sub TriOnglets  
  Dim Feuilles As Object 
  Dim i As Integer , j as integer 
  
  Feuilles = ThisComponent.Sheets 
  
  If Feuilles.Count > 1 Then 
    For j = 0 To Feuilles.Count - 2  
       For i = 0 To Feuilles.Count - 2 
  
         If Feuilles.getByIndex( i ).Name > Feuilles.getByIndex( i + 1 ).Name Then _ 
           Feuilles.moveByName( Feuilles.getByIndex( i + 1 ).Name , i )  
  
      Next i 
    Next j 
  End If  
End Sub
Cet autre exemple trie les feuilles à partir du 4eme onglet :
La position des trois premiers onglets reste inchangé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
Sub Test 
  'Trie les feuilles à partir du 4eme onglet 
  '(L'index 3 correspond à 4eme feuille du classeur) 
  TriFeuilles( 3 ) 
End Sub 
  
  
Sub TriFeuilles( NumFeuille As Integer ) 
  Dim Feuilles As Object 
  Dim i As Integer  
  Dim Cible As Boolean  
  
  Feuilles = ThisComponent.Sheets  
  
  If Feuilles.Count > 1 Then 
    Do  
  
    Cible = False  
    For i = NumFeuille To Feuilles.Count - 2  
      If Feuilles.getByIndex( i ).Name > Feuilles.getByIndex( i + 1 ).Name Then  
        Feuilles.moveByName( Feuilles.getByIndex( i + 1 ).Name , i )  
        Cible = True  
      End If       
    Next 
  
    Loop Until Cible = False  
  End If  
  
End Sub

Mis à jour le 26 août 2013 SilkyRoad

Cette macro permet d'afficher le 3eme onglet du classeur.

Code vb : Sélectionner tout
1
2
3
4
Dim Feuille As Object 
'spécifie la 3eme feuille  
Feuille = ThisComponent.Sheets(2) 
ThisComponent.CurrentController.ActiveSheet = Feuille
Vous pouvez aussi sélectionner une ou plusieurs cellules lors de l'activation de la feuille:
Code vb : Sélectionner tout
1
2
3
4
5
Dim Feuille As Object 
'Spécifie la 2eme feuille  
Feuille = ThisComponent.Sheets(1) 
'Active la feuille et sélectionne la cellule A10 
ThisComponent.CurrentController.Select( Feuille.getCellRangeByName("A10") )

Mis à jour le 26 août 2013 SilkyRoad

Cet exemple permet de récupérer la liste de toutes les feuilles sélectionnées dans le classeur :

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 NomFeuillesMultiplesSelectionnees() 
  Dim OngletsSelectionnes As String 
  Dim TableauOnglets() As String 
  Dim i As Integer 
  Dim Cible As Object 
  Dim Collect As New Collection 
  Dim NomFeuille As String 
  
  Cible = ThisComponent.CurrentController 
  
  If Cible.Selection.supportsService("com.sun.star.sheet.SheetCellRanges")  Then 
    'S'il y a plusieurs feuilles de sélectionnées. 
    OngletsSelectionnes  = ThisComponent.CurrentSelection.RangeAddressesAsString 
    TableauOnglets() = Split( OngletsSelectionnes , ";" ) 
  
    On Error Resume Next 
    For i = 0 To UBound (TableauOnglets()) 
       NomFeuille = Left( TableauOnglets( i ) , Instr( 1 , TableauOnglets( i ) , "." ) - 1 ) 
       'Récupère le nom des feuilles sans doublon 
       Collect.Add NomFeuille , Cstr(NomFeuille) 
    Next i 
    On Error GoTo 0 
  
    For i = 1 To Collect.Count 
      MsgBox Collect(i) 
    Next 
  
  Else 
    'S'il y a une seule feuille de sélectionnée. 
    MsgBox Cible.ActiveSheet.getName 
  End If 
End Sub

Mis à jour le 26 août 2013 SilkyRoad

Cette macro identifie le basculement entre les différents onglets du classeur.
Lancez uniquement la macro lancement_GestionEvenement_SheetChange.

Code vb : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Global oListener As Object  
Global oClasseur As Object  
  
Sub lancement_GestionEvenement_SheetChange  
  oClasseur = ThisComponent 
  
  oListener = createUnoListener( "Classeur_" , "com.sun.star.beans.XPropertyChangeListener" )  
  oClasseur.CurrentController.addPropertyChangeListener( "ActiveSheet" , oListener )  
End Sub  
  
Sub Classeur_PropertyChange(oEvent)  
   MsgBox oEvent.Source.ActiveSheet.Name 
End Sub 
  
Sub Arret_GestionEvenement_SheetChange  
  oClasseur.CurrentController.removePropertyChangeListener( "ActiveSheet" , oListener )  
End Sub

Mis à jour le 26 août 2013 SilkyRoad

Code vb : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sub CopieFeuilleActive_NouveauClasseur  
  Dim oFrame As Object  
  Dim oDisp As Object  
  Dim Args(2) As New com.sun.star.beans.PropertyValue  
  
  oFrame = ThisComponent.CurrentController.Frame  
  oDisp = createUnoService("com.sun.star.frame.DispatchHelper")  
  
  Args(0).Name = "DocName"  
  Args(0).Value = ""  
  Args(1).Name = "Index"  
  Args(1).Value = 65535  
  Args(2).Name = "Copy"  
  Args(2).Value = True  
  
  oDisp.ExecuteDispatch(oFrame, ".uno:Move", "", 0, Args())  
End Sub

Mis à jour le 3 août 2013 SilkyRoad

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.

 
Responsable bénévole de la rubrique OpenOffice & LibreOffice : zoom61 -