3 messages in org.openoffice.fr.progRe: [prog] Fw: [users-fr] Gestion des...
FromSent OnAttachments
Alpha BETAAug 5, 2004 11:58 pm 
Laurent GodardAug 6, 2004 12:09 am 
Alpha BETAAug 6, 2004 2:09 am 
Actions with this message:
Paste this link in email or IM:
Paste this link in email or IM:
Atom feed for this thread
Paste this URL into your reader:
Subject:Re: [prog] Fw: [users-fr] Gestion des messages d'Alerte Comment faire pour les désactiver? La solution en partie! Actions...
From:Alpha BETA (bet@free.fr)
Date:Aug 6, 2004 2:09:20 am
List:org.openoffice.fr.prog

Grâce à Alain Nowak comme à Laurent Godard, j'ai pu résoudre mon problème.
Merci à eux! J'en représente ici l'historique car je crois que ça devrait aider du monde.

----------------------------------------------------------------------------------------------------------------------------------------------------------------- Mon souci : A la création d'un classseur sxc , récupérant les résultats d'une application
que je gère et dont les données doivent être retravaillées, j'ai besoin de
retirer deux des feuilles du classeur ( par défaut, il est créé 3 feuilles). J'avais trouvé péniblement une méthode qui me permettait de réaliser cette tâche
mais qui réclamait une confirmation de suppression des feuilles 2 et 3 :

Sub NouvSxcSupp2F

' Suite à la création d'un nouveau classeur supprime les pages 2 et 3 ' variables nécessaires Dim document as object Dim dispatcher as object ' Document = ThisComponent.CurrentController.Frame Dispatcher = CreateUnoService("com.sun.star.frame.DispatchHelper") ' permet d'identifier le type de fichier en cours s'arrête si non calc If right(Thiscomponent.DocumentInfo.MimeType,4)<>"calc" then msgbox ("Cette fonction est spécifique à l'usage de classeur sxc." & _ string(2,13) & " Or vous n'avez pas à faire à un classeur sxc!",48, _ string(23,32) & _ "INTERRUPTION FORCEE DE L'EXECUTION DE LA MACRO NouvSxcSupp2F") Exit Sub End If ' selectionne toutes les feuilles du classeur sauf la première Dim args4(0) as new com.sun.star.beans.PropertyValue args4(0).Name = "Tables" args4(0).Value = Array(1,2) Dispatcher.ExecuteDispatch(Document, ".uno:SelectTables", "", 0, args4()) ' supprime les feuilles sélectionnées Dispatcher.ExecuteDispatch(Document, ".uno:Remove", "", 0, Array()) End Sub

------------------------------------------------------------------------------------------------------------------------------------------------------------------ A ma question , "Alain Nowak" <ano@starxpert.fr> m'a répondu que : Avec la méthode utilisant ExecuteDispatch, tu auras toujours le même
comportement que quand l'utilisateur fait la manip à la main. Mais il y a un
autre façon de faire, en manipulant directement les éléments avec l'API UNO.
Dans ton cas, ça donnerait quelque chose du genre (attention, code non testé) :

oSheets = ThisComponent.Sheets nbFeuilles = oSheets.count 'Supprime toutes les feuilles sauf la première for cpt=1 to nbFeuilles-1 oSheets.removeByIndex(cpt) ' voir à la fin
de ce mail mon observation Next

Note : il vaut mieux poser ce type de question sur la liste dédié au
développement prog-fr.

-------------------------------------------------------------------------------------------------------------------------------------------------------------------

J'ai donc testé cette méthode et dans le même coup j'ai contacté la liste
développement

Alpha BETA a écrit :

Bonjour à tous,

Sous Microsoft, j'avais l'habitude en manipulant des classeurs excel de
supprimer les messages d'alertes, plutôt que de devoir cliquer sur OK après la
grande question "Etes-vous sûr?". Sous OO , je n'y arrive pas du tout. Avec Xray et le guide du programmeur, j'ai mis en évidence quelque chose du
genre : .SetPropertyValue("ErrorAlertStyle",
com.sun.star.sheet.validationAlertStyle.stop) Mais cela ne marche pas du moins j'ai pas trouvé le truc Quelqu'un aurait-il la solution?

------------------------------------------------------------------------------------------------------------------------------------------------------------------- Pour réponse, "Laurent Godard" <list@wanadoo.fr> m'a écrit :

Bonjour, Comme Alain te l'a dit sur la liste Users@fr, l'utilisation du dispatch
(qui grossomodo ne reproduit que les evenement issus de l'interface de OOo)
entrainera systematiquement l'apparition des messages, comme si tu faisais la
manipulation en direct à la souris . Alain t'a fourni la macro equivalente pour
la suppression des feuilles sur la liste users. Bon courage laurent

------------------------------------------------------------------------------------------------------------------------------------------------------------------

Ce qui fait que pour l'instant je ne sais toujours pas comment désactiver ces
foutus messages de confirmation, à moins d'envoyer via VBS une entrée dans OO,
mais ce n'est pas évident.

Toutefois la méthode d'Alain n'est pas une mauvaise idée, bien qu'en l'état elle
NE FONCTIONNE PAS!!! (j'ai testé). En fait .removeByIndex() n'est pas géré par OO pour les feuilles de classeur
(grâce à Xray 3.0 je suis affirmatif) . Par contre et grâce à Alain j'ai pu le
trouver .removeByname() qui lui fonctionne et ce sans aucune confirmation de
suppression. (Ouf!)

Ensuite c'était tout simple à faire , voici la solution, en attendant qui sait
peut-être mieux....

sub NouvSxcSupp2F ' macro faite le 4/08/04 par Christophe JOYAU T.S.I douanes ' Suite à la création d'un nouveau classeur supprime les pages 2 et 3 ' Définie: ' Exécute: ' Modifie: ' Profite: ' Spécial: ' Utilise: '****************************************************************************** ' variables nécessaires Dim document as object Dim dispatcher as object Dim args1(0) as new com.sun.star.beans.PropertyValue Dim K as integer ' attributions Document = ThisComponent.CurrentController.Frame Dispatcher = CreateUnoService("com.sun.star.frame.DispatchHelper") ' permet d'identifier le type de fichier en cours s'arrête si non calc If right(Thiscomponent.DocumentInfo.MimeType,4)<>"calc" then msgbox ("Cette fonction est spécifique à l'usage de classeur sxc." & _ string(2,13) & " Or vous n'avez pas à faire à un classeur sxc!",48, _ string(23,32) & _ "INTERRUPTION FORCEE DE L'EXECUTION DE LA MACRO NouvSxcSupp2F") Exit Sub End If ' selectionne toutes les feuilles du classeur sauf la première ' première méthode réclamant une confirmation systématique ' que je n'arrive pas à compenser ni par une envoi de touche de type sendkey... ' ni par l'interruption des alertes 'args1(0).Name = "Tables" 'args1(0).Value = Array(1,2) 'Dispatcher.ExecuteDispatch(Document, ".uno:SelectTables", "", 0, args1()) ' supprime les feuilles sélectionnées 'Dispatcher.ExecuteDispatch(Document, ".uno:Remove", "", 0, Array()) ' renomme la feuille 'args1(0).Name = "Name" 'args1(0).Value = "Travail" 'Dispatcher.ExecuteDispatch(Document, ".uno:RenameTable", "", 0, args1()) ' prépare le futur recepteur '----------------------------------------------------------------------------------------------------------------- ' Voici désormais la solution pour éviter d'avoir à confimer des suppressions
de feuilles oSheets = ThisComponent.Sheets SheetNames = oSheets.getElementNames() For K=LBound(SheetNames) To UBound(SheetNames)-1 osheets.removeByname(SheetNames(K+1)) Next K '------------------------------------------------------------------------------------------------------------------ ' renomme la feuille 'args1(0).Name = "Name" 'args1(0).Value = "Travail" 'Dispatcher.ExecuteDispatch(Document, ".uno:RenameTable", "", 0, args1()) End Sub