Bonsoir Pierre-Yves, > -----Message d'origine----- > De : pierre-yves samyn [mailto:pierre-yves.sa...@laposte.net] > Envoyé : dimanche 5 juillet 2015 12:54 > À : users@fr.libreoffice.org > Objet : [fr-users] Re: Calc - styles chargés par macro erronés > > Bonjour Michel > > > Michel Rudelle wrote > > Je copie des styles de cellule dun classeur vers un autre grâce à la > > procédure suivante : > > ... > > si certains styles sont corrects, dautres ont perdu leur définition en > > route ! > > ... > > Jai cherché mais nai pas trouvé de bug correspondant. > > Ben... c'est parce que ce n'est pas un bug me semble-t-il. > > Tu récupères les styles mais les styles utilisent des formats qui en > l'occurrence sont personnalisés, donc, propres au classeur source. > La solution est de récupérer aussi ces formats. > > Ci-dessous un code à tester (il y a peut-être plus performant mais > là tout de suite j'ai fait avec ce que je savais sans rechercher plus > avant > dans l'Api). > > Explications : > > J'utilise loadStylesFromDocument puisque tu récupères les styles de > thiscomponent. Pas besoin de passer par un chargement "url". > > Quand les styles sont chargés... > Pour chaque style de cellule de la source (thiscomponent)... > À partir de la clé on récupère son format... > Si c'est un format "utilisateur"... > On recherche ce format dans la cible (formats de syntheseSF)... > Si on ne trouve pas ce format on l'ajoute ce qui donne une nouvelle clé... > Que l'on attribue au style de même nom dans la cible (syntheseSF) > > PS: je fais l'hypothèse que la locale était la même entre les classeurs... > > J'espère que c'est (relativement) clair... :) >
Euréka, ça marche du tonnerre ! J'ai ramé un peu, j'ai suivi l'idée et je me suis aidé de la bible et de Xray. Mais il reste un mystère: Pourquoi la clé du même format de nombre est-elle différente dans les deux documents ??? Encore merci, Michel PS: Voici le petit bout de Procédure que j'ai fait pour ça: Sub copieFormatNombre(docOrigine As Object, docCible As Object, nomDuStyle As String) ' docOrigine et docCible sont deux documents ouverts ' nomDuStyle est le nom du style dans les deux documents 'retour avec le style mis correctement à jour dans le document cible Dim maLangue As New com.sun.star.lang.Locale Dim cleDoc1 As Long, cleDoc2 As Long, x As Long Dim unFormat As Object, nomDuFormat As String '1/ dans le document d'origine, recherche du format de nombre personnalisé utilisé dans le style copié 'récupérer le NumberFormat correspondant (la clé) cleDoc1 = docOrigine.StyleFamilies.getByName("CellStyles").getByName(nomDuStyle).Numbe rFormat 'récupérer l'objet format correspondant à ce NumberFormat pour en obtenir le nom (en fait ce que l'on voit dans "Description du Format") unFormat = docOrigine.NumberFormats.getByKey(cleDoc1) nomDuFormat = unFormat.FormatString '2/ recherche de l'existence de ce format dans le document cible et ajout dans le style s'il n'existe pas maLangue.Language = "fr" maLangue.Country = "FR" x = docCible.NumberFormats.queryKey(nomDuFormat, maLangue, False) 'renvoie le NumberFormat si le format est présent, sinon négatif If x < 0 Then cleDoc2 = docCible.NumberFormats.addNew(nomDuFormat, maLangue) docCible.StyleFamilies.getByName("CellStyles").getByName(nomDuStyle).NumberF ormat = cleDoc2 End If End Sub -- Envoyez un mail à users+unsubscr...@fr.libreoffice.org pour savoir comment vous désinscrire Les archives de la liste sont disponibles à http://listarchives.libreoffice.org/fr/users/ Tous les messages envoyés sur cette liste seront archivés publiquement et ne pourront pas être supprimés