Bonjour,
Je voudrais copier-coller le texte contenu dans une cellule avec son formatage. Par exemple, lettres en italique ou en gras
Ni .string, ni .formula ne permettent d'obtenir ce contenu. "abcd" devient "abcd".
Comment procéder ?
Merci.
Bonjour,
Je voudrais copier-coller le texte contenu dans une cellule avec son formatage. Par exemple, lettres en italique ou en gras
Ni .string, ni .formula ne permettent d'obtenir ce contenu. "abcd" devient "abcd".
Comment procéder ?
Merci.
hello,
j'ai retrouvé dans le forum un code où je montrais un exemple de copier coller spécial d'une plage :
Dans cet exemple j'ai eu la bonne idée de mettre un commentaire sur les arguments :
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 Sub CopierCollerSpecial ' J.P Janvier 2015 oDoc1 = thisComponent oDispatcher = createUnoService("com.sun.star.frame.DispatchHelper") oFrame1 = oDoc1.CurrentController.Frame ' On sélectionne la plage de cellule à copier oSheet = oDoc1.Sheets(0) rng = oSheet.getCellRangeByName("A1:A10") oDoc1.CurrentController.Select(rng) ' On utilise un Dispatch pour copier la plage oDispatcher.executeDispatch(oFrame1, ".uno:Copy", "", 0, Array()) ' On sélectionne la première cellule de l'endroit où coller rng = oDoc1.Sheets(0).getCellRangeByName("B1") oDoc1.CurrentController.Select(rng) ' on renseigne les arguments pour le coller spécial dim args1(5) as new com.sun.star.beans.PropertyValue ' Flags : A=Tout VSD=Valeurs T=Formats F=Formules VSDT=Valeurs&Formats args1(0).Name = "Flags" args1(0).Value = "A" 'FormulaCommand : 0=aucune 1=addition 2=soustraction 3=multiplication 4=Division args1(1).Name = "FormulaCommand" '1 : on additionne les valeurs de la plage de départ à celle d'arrivée args1(1).Value = 1 args1(2).Name = "SkipEmptyCells" args1(2).Value = false args1(3).Name = "Transpose" args1(3).Value = false args1(4).Name = "AsLink" args1(4).Value = false args1(5).Name = "MoveMode" args1(5).Value = 4 oDispatcher.executeDispatch(oFrame1, ".uno:InsertContents", "", 0, args1()) end sub
donc avec l'argument Flags à A tu devrais tout coller.Flags : A=Tout VSD=Valeurs T=Formats F=Formules VSDT=Valeurs&Formats
Ami calmant, J.P
Waouh !!!
Haut niveau pour moi !
Il se trouve que je fais des copiages cellule par cellule (repérées par leur position). Pourrais-tu convertir (simplifier ?) ton code pour l'adapter à cette situation ?
Merci d'avance.
JD
hello,
il faudrait que tu nous montres ton code pour voir comment l'adapter.
Ami calmant, J.P
Bonjour,
Il s'agit d'une macro toute simple destinée à "recaler" des cellules sur la gauche, en supprimant les cellules vides.
La partie critique est ici :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 iSheet=ThisComponent.Sheets.getByName("Feuille1") oSheet=ThisComponent.Sheets.getByName("Feuille2") for l%=0 to 30 co%=0 for c%=0 to 15 dat=trim(iSheet.getCellByPosition(c%,l%).string) if dat<>"" then oSheet.getCellByPosition(co%,l%).string=dat co%=co%+1 end if next next end sub
Merci d'avance.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 dat=trim(iSheet.getCellByPosition(c%,l%).string) if dat<>"" then oSheet.getCellByPosition(co%,l%).string=dat
JD
hello,
tu peux faire comme cela par exemple (pour les propriétés gras,italique,souligné) :
tu pourrais aussi passer par des styles de cellules nommés.
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 Sub test_copieformat() iSheet=ThisComponent.Sheets.getByName("Feuille1") oSheet=ThisComponent.Sheets.getByName("Feuille2") for l%=0 to 30 co%=0 for c%=0 to 15 dat=trim(iSheet.getCellByPosition(c%,l%).string) if dat<>"" then oSheet.getCellByPosition(co%,l%).string=dat oSheet.getCellByPosition(co%,l%).CharWeight = iSheet.getCellByPosition(c%,l%).CharWeight oSheet.getCellByPosition(co%,l%).CharPosture = iSheet.getCellByPosition(c%,l%).CharPosture oSheet.getCellByPosition(co%,l%).CharUnderline = iSheet.getCellByPosition(c%,l%).CharUnderline co%=co%+1 end if next next end sub
Le code à l'air lent à s'exécuter, il faudrait utiliser des plages ( par exemple une seule copie par ligne ou colonne) .
Ami calmant, J.P
Partager