Bonjour à tous & à toutes,Je suis nouveau sur ce site & grand débutant en basic.J’ai sous la main LibreOffice Writer version 6.0.7.3, aussi je viens d’écrire une petite macro qui devrait me permettre de sélectionner un cadre (TextFrame) par son index, d’en modifier des paramètres de le copier & le coller où se trouve le curseur (à mon avis, c’est ici que ce trouve le problème), pour enfin de rendre au cadre premier ses paramètres d’origines.
La voici :
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 sub Cadre dim document as object dim dispatcher as object dim oFrame as object document = ThisComponent.CurrentController.Frame dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") Rem Définir la fonction d'appel du cadre par son index. oFrame = ThisComponent.textFrames.getbyIndex(0) Rem Appeler le cadre par son index & le modifier. With oFrame Rem Le rendre imprimable. .setPropertyValue("Print", True) Rem Retirer la protection du contenu. .Text.ContentProtected = False Rem Changer le nom du cadre. .Name = "Nouveau nom" Rem Changer le texte contenu dans le cadre. .setString( "Nouveau texte" ) Rem Protéger le contenu. .Text.ContentProtected = True Rem Terminer les modifications End With Rem Sélectionner le cadre. ThisComponent.CurrentController.select(oFrame) Rem Copier le cadre. dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array()) Rem Coller le cadre, ça ne fonctionne pas du tout !!! dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array()) Rem Sélectionner le cadre d'origine & lui rendre ses paramètres. oFrame = ThisComponent.textFrames.getbyIndex(0) With oFrame .setPropertyValue("Print", False) .Text.ContentProtected = False .Name = "" .setString( "Vide" ) .Text.ContentProtected = True End With End subAyant fini de m’arracher les cheveux, faute de combattants, sur un simple copier-coller, je viens à vous humble & glabre.Et c’est en remerciant par avance tous ceux qui auront la bonté de se pencher sur ce problème, dont le ridicule assassine mon amour propre, que je vous salut.
Édit :
Je viens de progresser un peu, donc je vous en fais part, le copier-coller est résolu mais je n'arrive pas sélectionner le cadre copié...Voici la nouvelle macro :
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 sub Cadre dim doc as object, oDisp as object, oDoc as object, oCont as object, oCurs as object, oSelect as object dim oFrame as object oDoc = ThisComponent oCont = oDoc.CurrentController doc = oCont.Frame oDisp = createUnoService("com.sun.star.frame.DispatchHelper") oCurs = oDoc.currentSelection()'Enregistrer la position du curseur. oFrame = oDoc.textFrames.getbyIndex(0)'Choisir un cadre de texte par son index. oCont.select(oFrame)'Sélectionner un cadre de texte par son index. oDisp.executeDispatch(doc, ".uno:Copy", "", 0, Array())'Le Copier. oDisp.executeDispatch(doc, ".uno:Escape", "", 0, Array())'Échapper à un grand malheur ou autre chose mais quoi ? oCont.select(oCurs)'Revenir à la position initiale du curseur. oDisp.executeDispatch(doc, ".uno:Paste", "", 0, Array())'Coller le cadre copier. oSelect = oCont.getCurrentSelection()'Cela devrait permettre de garder la sélection courante, 'à savoir le cadre, mais non... With oSelect .setPropertyValue("Print", True) .Text.ContentProtected = False .Name = "Nouveau nom." .setString("Nouveau texte.") .Text.ContentProtected = True End With oCont.select(oCurs)'Désélectionne le cadre... End subFred.
Partager