[Résolu][Calc] récupérer contenu presse papier dans variable

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur: Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !

[Résolu][Calc] récupérer contenu presse papier dans variable

Messagepar papa_georges » 06 Nov 2012 09:30

bonjour
j'ai pas mal cherché, mais pas trouvé, dans ce forum comment faire pour récupérer le contenu du presse papier dans une variable (on trouve surtout l'inverse)
mon but est le suivant :
1) sélectionner un ensemble de cellule
2) les copier dans le presse papier
3) mettre le contenu du presse papier dans une variable (la variable texte de mon script) pour l'intégere dans le texte d'un message qu'il me restera à envoyer manuellement
voici la macro qui fonctionne mais qui m'oblige à coller manuellement le presse papier dans le message quand la fenêtre du message est ouvert
cordialement

Code : Tout sélectionner   AgrandirRéduire
' courriel avec les infos d'inscription d'un musicien
Sub Mail_Infos_Un_Musicien
   Dim oShell As Object, CelluleActive As Object, Titre as object, Cellule as object
   dim i as integer
   dim Texte as string, Texte1 as string, Texte2 as string, Colonne as string, dest as string, Sujet as string, Signature as string
   CelluleActive = ThisComponent.getCurrentSelection
   Feuille = ThisComponent.getCurrentController().getActiveSheet()
   Cette_Ligne = CelluleActive.CellAddress.Row + 1
   Ligne = Cette_Ligne ' je récupère la ligne du tableur sur laquelle je suis
   ' ligne 3 : les titres des colonnes   
   oShell = createUnoService("com.sun.star.system.SystemShellExecute")
   Cellule = Feuille.getCellRangeByName("F" & Ligne)
   Dest = Cellule.getString
   Sujet =  "Les informations de votre inscription à l'Empb29"
   ' appel macro pour copier les lignes (ligne de titre 3 + celle du musicien sélectionnée) dans le presse papier
   call CopierCollerInfosMusicien Ligne
   Texte = "Bonjour" & "%0D%0A" & "%0D%0A" & "Veuillez trouver ci-joint les informations vous concernant." & "%0D%0A" & "%0D%0A" &  "Merci de nous signaler par réponse à ce courriel une erreur ou un oubli." & "%0D%0A"
'   Signature = Inputbox ("Votre signature de message" ,"Courriel aux musiciens")
   Signature = "Le secrétariat de l'école de musique"
   '%0D%0A permet d'insérer un saut de ligne dans le corps du message. exemple "Bonjour,%0D%0AJe vous confirme"
   oShell.Execute("mailto:" & Dest & "?subject=" & Sujet & "&Body=" & Texte & "%0D%0A" & Signature & "%0D%0A" , "", 0)
End Sub


' copier coller la ligne 3 puis celle du musicien sélectionné (Ligne) et coller dans onglet Divers à la ligne 17 puis sélectionner le tout pour l'avoir dans le presse papier
sub CopierCollerInfosMusicien (Ligne)
   rem ------------
   rem define variables
   dim document   as object
   dim dispatcher as object
   rem ------------
   rem get access to the document
   document   = ThisComponent.CurrentController.Frame
   dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

   rem --------------------------- copier coller la ligne 3 des titres de colonne
   dim args1(0) as new com.sun.star.beans.PropertyValue
   args1(0).Name = "ToPoint"
   args1(0).Value = "$A$3:$AM$3"
   dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
   rem ------------
   dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
   rem ------------
   dim args3(0) as new com.sun.star.beans.PropertyValue
   args3(0).Name = "Nr"
   args3(0).Value = 7
   dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args3())
   rem ------------
   dim args4(0) as new com.sun.star.beans.PropertyValue
   args4(0).Name = "ToPoint"
   args4(0).Value = "$A$17"
   dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args4())
   rem ------------
   dim args5(5) as new com.sun.star.beans.PropertyValue
   args5(0).Name = "Flags"
   args5(0).Value = "SVDFN"
   args5(1).Name = "FormulaCommand"
   args5(1).Value = 0
   args5(2).Name = "SkipEmptyCells"
   args5(2).Value = false
   args5(3).Name = "Transpose"
   args5(3).Value = true
   args5(4).Name = "AsLink"
   args5(4).Value = false
   args5(5).Name = "MoveMode"
   args5(5).Value = 4
   dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args5())
   
   rem  --------------------------- copier coller la ligne sélectionnée
   dim args6(0) as new com.sun.star.beans.PropertyValue
   args6(0).Name = "Nr"
   args6(0).Value = 2
   dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args6())
   rem ------------
   dim args7(0) as new com.sun.star.beans.PropertyValue
   args7(0).Name = "ToPoint"
   args7(0).Value = "$A$" & Ligne
   dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args7())
   rem -------------
   dim args8(0) as new com.sun.star.beans.PropertyValue
   args8(0).Name = "ToPoint"
   args8(0).Value = "$A$" & Ligne & ":$AM$" & Ligne
   dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args8())
   rem ------------
   dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
   rem -----------
   dim args10(0) as new com.sun.star.beans.PropertyValue
   args10(0).Name = "Nr"
   args10(0).Value = 7
   dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args10())
   rem ------------
   dim args11(0) as new com.sun.star.beans.PropertyValue
   args11(0).Name = "ToPoint"
   args11(0).Value = "$B$17"
   dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args11())
   rem -----------
   dim args12(5) as new com.sun.star.beans.PropertyValue
   args12(0).Name = "Flags"
   args12(0).Value = "A"
   args12(1).Name = "FormulaCommand"
   args12(1).Value = 0
   args12(2).Name = "SkipEmptyCells"
   args12(2).Value = false
   args12(3).Name = "Transpose"
   args12(3).Value = true
   args12(4).Name = "AsLink"
   args12(4).Value = false
   args12(5).Name = "MoveMode"
   args12(5).Value = 4
   dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args12())
   
   rem -------------------------------- copier le tout dans presse papiers
   dim args13(0) as new com.sun.star.beans.PropertyValue
   args13(0).Name = "ToPoint"
   args13(0).Value = "$A$17:$B$55"
   dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args13())
   rem ------------
   dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
   
   rem ------------------------ retour feuille musiciens
   args3(0).Name = "Nr"
   args3(0).Value = 2
   dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args3())

end sub
OpenOffice 3.4.1 sous Windows 7
papa_georges
Membre OOrganisé
Membre OOrganisé
 
Message(s) : 54
Inscrit le : 28 Juin 2009 03:24

Re: [Calc] récupérer contenu presse papier dans variable

Messagepar Dude » 06 Nov 2012 11:41

Salut,

Je ne vois pas l'intérêt de passer par le presse-purée pour ce genre d'opération.

Il suffit de récupérer le contenu de la cellule et de la mettre dans ta variable.

L'exemple donnée est un parmi tant d'autres.
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 16273
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

Re: [Calc] récupérer contenu presse papier dans variable

Messagepar papa_georges » 06 Nov 2012 12:00

bonjour Dude
merci pour ce conseil mais comme la sélection que je passe au presse-purée, comme tu dis, est composée de plusieurs cellules, je pensais que cela n'était pas possible ; mais maintenant je me dis qu'une cellule ou une rangée de cellules , cela doit être pareil !
par contre, une variable string ne va peut-être pas convenir pour récupérer le contenu de la sélection : ok pour 1 cellule, mais peut-être pas pour une plage de cellules
bon, faut que je cogite la-dessus
cordialement
OpenOffice 3.4.1 sous Windows 7
papa_georges
Membre OOrganisé
Membre OOrganisé
 
Message(s) : 54
Inscrit le : 28 Juin 2009 03:24

Re: [Calc] récupérer contenu presse papier dans variable

Messagepar Piaf » 06 Nov 2012 12:03

Bonjour
Une approche différente pour recopier une zone de cellules d'une feuille à une autre et récupérer le texte affiché dans les cellules de la zone.
A+
Pièces jointes
CopieZone.ods
(29.28 Kio) Téléchargé 29 fois
LibreOffice Version: 4.1.5.3 et Apache OpenOffice 4.0.1 Sur Xubuntu 13.10
Piaf
HédOOniste
HédOOniste
 
Message(s) : 2331
Inscrit le : 25 Nov 2011 19:07
Localisation : Guyane

Re: [Calc] récupérer contenu presse papier dans variable

Messagepar papa_georges » 06 Nov 2012 13:52

Piaf a écrit:Bonjour
Une approche différente pour recopier une zone de cellules d'une feuille à une autre et récupérer le texte affiché dans les cellules de la zone.
A+

bonjour
certes intéressant et efficace mais le résultat est une suite contiguë des contenus de toutes les cellules (une chaine de caractères) alors que le copier-coller a l'avantage de garder le découpage en cellules
merci quand même
OpenOffice 3.4.1 sous Windows 7
papa_georges
Membre OOrganisé
Membre OOrganisé
 
Message(s) : 54
Inscrit le : 28 Juin 2009 03:24

Re: [Calc] récupérer contenu presse papier dans variable

Messagepar Piaf » 06 Nov 2012 14:40

Bonjour
Tu peux régler la mise en forme de txtmsg par exemple :
Code : Tout sélectionner   AgrandirRéduire
Function LireContenuCellule(maFeuille as Object, maZone as Object)
Dim controleur As Object
Dim listeCell As Object, selectionCell As Object
Dim uneCellule As Object, enumCellules As Object
Dim txtmsg as String, intx as Integer
   controleur = ThisComponent.CurrentController
   selectionCell = maZone.queryContentCells(com.sun.star.sheet.CellFlags.STRING)
   enumCellules = selectionCell.Cells
   listeCell = enumCellules.createEnumeration
   intx = 1
   Do While listeCell.hasMoreElements
      uneCellule = listeCell.nextElement
      If intx mod 2 = 0 then
         txtmsg = txtmsg & uneCellule.String & chr(13)
      Else
         txtmsg = txtmsg & uneCellule.String  & " : " 
      End If
      intx = intx + 1
   Loop
   LireContenuCellule = txtmsg
End Function
txtmsg.png
txtmsg.png (11.25 Kio) Consulté 1022 fois
A+
LibreOffice Version: 4.1.5.3 et Apache OpenOffice 4.0.1 Sur Xubuntu 13.10
Piaf
HédOOniste
HédOOniste
 
Message(s) : 2331
Inscrit le : 25 Nov 2011 19:07
Localisation : Guyane

Re: [Calc] récupérer contenu presse papier dans variable

Messagepar Churay » 06 Nov 2012 15:22

Bonjour

Bien que le code de Piaf soit nickel, pour la copie d'un bloc de cellules, je vous fais part d'une autre approche Pys_Inside que j'ai retrouvée en relisant mes classiques ;)
Code : Tout sélectionner   AgrandirRéduire
Sub CopierZone2()
Dim o, oSheet As Object, oRange As Object, oDoc As Object
   ' Pys_Inside
   oDoc = thisComponent
   
   oRange = oDoc.Sheets(0).getCellRangeByName("A2:C6")
   oDoc.CurrentController.select(oRange)
   o = oDoc.CurrentController.getTransferable()
   
   oRange = oDoc.Sheets(1).getCellRangeByName("F1")
   oDoc.CurrentController.select(oRange)
   oDoc.CurrentController.insertTransferable(o)
End Sub
cOOordialement
---
AOO 4.0.1 & LO divers 3.4.x.x à 3.7.x.x XP-SP3 / Debian 7.1 & Ubuntu 12.10
---
F1 : ça aide...
XRay + SDK :super:
---
Quand le NOT CONFIRMED sera corrigé (OOo et LO) , je serai heureux...
Avatar de l’utilisateur
Churay
HédOOniste
HédOOniste
 
Message(s) : 2145
Inscrit le : 30 Avr 2009 05:54
Localisation : PACA

Re: [Calc] récupérer contenu presse papier dans variable

Messagepar Dude » 07 Nov 2012 17:34

papa_georges a écrit:alors que le copier-coller a l'avantage de garder le découpage en cellules

Là encore, y-a t-il un intérêt puisqu'au final c'est un courriel que tu envoies.
Tu ne sais pas avec quel logiciel il sera reçu et lu.
Un tableau est uniquement supporté avec le format HTML.
Or, le destinataire peut très bien refuser ce format pour s'éviter des virus.

On boucle donc sur le même problème de ta procédure d'envoi avec mailto.
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 16273
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

Re: [Calc] récupérer contenu presse papier dans variable

Messagepar papa_georges » 11 Nov 2012 08:15

bonjour

merci à chacun pour ces pistes ou solutions ; je vais prendre le temps de réfléchir pour revoir totalement ce problème et sans doute m'orienter vers une solution radicalement différente (lecture des cellules les unes après les autres et construction du contenu du message au fur et à mesure, certainement sans mise en forme html)

cordialement
OpenOffice 3.4.1 sous Windows 7
papa_georges
Membre OOrganisé
Membre OOrganisé
 
Message(s) : 54
Inscrit le : 28 Juin 2009 03:24


Retour vers Macros et API

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 5 invité(s)