[Issue][Calc] couper coller ne fonctionnent pas avec bouton

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 !
freed
Membre lOOyal
Membre lOOyal
Messages : 25
Inscription : 21 mars 2010 15:03

[Issue][Calc] couper coller ne fonctionnent pas avec bouton

Message par freed »

Bonsoir,
Les actions couper et coller de mes macros ne fonctionnent pas quand j'utilise un bouton.
La macro ultra simple créée pour l'exemple Cf. PJ fonctionne de A à Z en passant par Outils > Macro > Exécuter le macro,
mais quand je l'affecte à un bouton les fonctions cut et paste ne fonctionnent plus.
Dans l'exemple quand j'utilise le bouton, 1234 reste en A1 et C6 est colorée.
Bilan : 1234 a bien été écrit, le couper et le coller n'ont pas fonctionné et la case c6 s'est correctement colorée.
Bug 70883
La modération vous a écrit: Image[Issue]
Cela signifie que le problème a été référencé dans la base BugZilla du projet officiel.
En clair, l'équipe de développement de OpenOffice ou LibreOffice est au courant et il faut patienter (ou voter) pour que cela soit résolu.
Pour plus d'informations sur le principe des issues, reportez-vous sur cette explication.

Merci à vous.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par toucan le 29 mai 2018 16:15, modifié 2 fois.
Raison : Balise [Issue] à la place de la balise [Résolu]
LibreOffice Version: 6.0.4.2 (x64) sous Windows 10
joel275
InconditiOOnnel
InconditiOOnnel
Messages : 839
Inscription : 10 janv. 2009 08:05

Re: [Calc] couper coller ne fonctionnent pas avec bouton

Message par joel275 »

Bonsoir,

avec AOo, la macro déclenchée directement ou avec le bouton fonctionne de la même manière.

A plus.
A jour de LibreOffice et de Ubuntu
Avatar de l’utilisateur
martinbrait
InconditiOOnnel
InconditiOOnnel
Messages : 753
Inscription : 09 avr. 2013 07:15
Localisation : T'as pas dit bonjour, merci et à bientot !

Re: [Calc] couper coller ne fonctionnent pas avec bouton

Message par martinbrait »

Bonjour Freed,
coupercollercouleur.PNG
Tu peux tester cette version, sans dispatcher, peut être plus lisible (?)
Change la couleur de fond de cellule, par une recherche de palette RGB !
*ttp://www.rapidtables.com/web/color/RGB_Color.html
*ttp://htmlcolorcodes.com/fr/
*ttp://www.w3schools.com/colors/colors_picker.asp

Code : Tout sélectionner

'intervenir sur le  contenu et la mise en page de cellules
'martinbrait

sub coupercoller
EcrireZone("Feuille1","A1","1234")
CopierZone("Feuille1","Feuille1","A1","C4")
ColorerZone("Feuille1","C6","50,60,70")
end sub


Sub EcrireZone(strNomFeuille As String,AddrCell As String,strValue As String)
 Dim monDocument As Object
 'Pour désigner les feuilles
 Dim mesFeuilles As Object
 'Pour désigner la feuille source
 Dim feuilleSource As Object
 'Pour désigner la feuille destination
 Dim MaFeuille As Object

 
 monDocument = thisComponent

 mesFeuilles = monDocument.Sheets
 'Feuille source qui contient les connées à copier
MaFeuille = mesFeuilles.getByName(strNomFeuille)
 'Zone des cellules à écrire
 'MaFeuille.getCellRangeByName(AddrCell).Value =  strValue 'pour un nombre
MaFeuille.getCellRangeByName(AddrCell).String =  strValue
 

End Sub



Sub CopierZone(strNomFeuilleSource As String,strNomFeuilleCible As String,AddrCellSource As String,AddrCellCible As String)
 Dim monDocument As Object
 'Pour désigner les feuilles
 Dim mesFeuilles As Object
 'Pour désigner la feuille source
 Dim feuilleSource As Object
 'Pour désigner la feuille destination
 Dim feuilleDestination As Object
 'Pour désigner les cellules sources
 Dim celluleSource As Object
 'Pour désigner la cellule destination
 Dim zoneDestination As Object
 'Pour désigner la feuille active
 Dim FeuilleActive As Object
 
 monDocument = thisComponent

 mesFeuilles = monDocument.Sheets
 'Feuille source qui contient les connées à copier
 feuilleSource = mesFeuilles.getByName(strNomFeuilleSource)
 'Zone des cellules à copier
 celluleSource = feuilleSource.getCellRangeByName(AddrCellSource)
 
 'Désignation de la feuille destination si on veut la désigner
 feuilleDestination = mesFeuilles.getByName(strNomFeuilleCible)
 'CHOISIR CI DESSUS OU CI DESSOUS EN FONCTION
 'Ou bien je désigne la feuille active à l'écran comme étant la feuille destination
 feuilleDestination = monDocument.getCurrentController().getActiveSheet() 'Je récupére le nom de la feuille active
 
 'Je désigne la cellule où la copie va commencer
 zoneDestination = feuilleDestination.getCellRangeByName(AddrCellCible)
 'Là je procéde à la copie
 feuilleDestination.copyRange(zoneDestination.CellAddress, celluleSource.RangeAddress)
End Sub




function ColorerZone(strNomFeuille As String,strAddrCell As String,strRGBcolor As  variant)
 Dim monDocument As Object
 'Pour désigner les feuilles
 Dim mesFeuilles As Object

 'Pour désigner la feuille
 Dim MaFeuille As Object

 'Pour désigner la cellule destination
 Dim MaZone As Object

 
 monDocument = thisComponent
 mesFeuilles = monDocument.Sheets

  

'MaFeuille = monDocument.Sheets(0)
 'Désignation de la feuille  si on veut la désigner
MaFeuille = mesFeuilles.getByName(strNomFeuille)

MaZone = MaFeuille.getCellRangeByName(strAddrCell)
MaZone.CellBackColor = RGB(split(strRGBcolor,",")(0),split(strRGBcolor,",")(1),split(strRGBcolor,",")(2))

'bgcolor=Cell.CellBackColor
end function
@+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice version 5.4.7.2.M6 (x64)
Windows 10
+
LibreOffice version 5.4.7.2.M6 (x64)
Windows 7

#HSQL Database Engine 1.8.0
version=1.8.0

Locale : fr-FR (fr_FR)

Obligation de version


Bonjour, merci et à bientôt !
freed
Membre lOOyal
Membre lOOyal
Messages : 25
Inscription : 21 mars 2010 15:03

Re: [Calc] couper coller ne fonctionnent pas avec bouton

Message par freed »

Merci à vous :
- pour la confirmation de fonctionnement identique sur ton pc joel275 (je vais tester sur un autre pc parce que la je ne comprends pas ce qui se passe) ;
- pour la macro de test réécrite martinbrait : mais la c'est beaucoup trop compliqué pour moi. Autant en vba je me débrouillais un peu autant avec le basic de libreoffice je suis largué. C'est pour cela que j'utilise l'enregistreur. En tous cas si cette macro contient un copier coller il fonctionne avec le bouton.
Je souhaiterais cependant trouver d'où vient mon problème...
LibreOffice Version: 6.0.4.2 (x64) sous Windows 10
Avatar de l’utilisateur
martinbrait
InconditiOOnnel
InconditiOOnnel
Messages : 753
Inscription : 09 avr. 2013 07:15
Localisation : T'as pas dit bonjour, merci et à bientot !

Re: [Calc] couper coller ne fonctionnent pas avec bouton

Message par martinbrait »

Le comportement que tu décris sera identique sur tous les postes de travail.

Le problème provient de ce que ThisComponent fait tantôt référence à l'IDE,
tantôt référence au contrôle bouton, que tu as placé sur ta feuille.

Code : Tout sélectionner

document   = ThisComponent.CurrentController.Frame 'fait référence à l'IDE BASIC et/ou au bouton de contrôle sur ta feuill1
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

Ton problème est : accès et utilisation du dispatcher, lancé depuis un contrôle
Piaf saura t'expliquer et réparer ton code.

@+
LibreOffice version 5.4.7.2.M6 (x64)
Windows 10
+
LibreOffice version 5.4.7.2.M6 (x64)
Windows 7

#HSQL Database Engine 1.8.0
version=1.8.0

Locale : fr-FR (fr_FR)

Obligation de version


Bonjour, merci et à bientôt !
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 18:07
Localisation : Guyane

Re: [Calc] couper coller ne fonctionnent pas avec bouton

Message par Piaf »

Bonjour
Voir https://bugs.documentfoundation.org/sho ... i?id=70883
Contournement éventuel

Code : Tout sélectionner

sub coupercoller
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
ThisComponent.CurrentController.Frame.ContainerWindow.setFocus
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$1"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "StringName"
args2(0).Value = "1234"

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args2())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:JumpToNextCell", "", 0, Array())

rem ----------------------------------------------------------------------
dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "ToPoint"
args4(0).Value = "$A$1"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args4())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Cut", "", 0, Array())

rem ----------------------------------------------------------------------
dim args6(0) as new com.sun.star.beans.PropertyValue
args6(0).Name = "ToPoint"
args6(0).Value = "$C$4"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args6())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())

rem ----------------------------------------------------------------------
dim args8(0) as new com.sun.star.beans.PropertyValue
args8(0).Name = "ToPoint"
args8(0).Value = "$C$6"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args8())

rem ----------------------------------------------------------------------
dim args9(0) as new com.sun.star.beans.PropertyValue
args9(0).Name = "BackgroundColor"
args9(0).Value = 16737792

dispatcher.executeDispatch(document, ".uno:BackgroundColor", "", 0, args9())


end sub
A+
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Avatar de l’utilisateur
martinbrait
InconditiOOnnel
InconditiOOnnel
Messages : 753
Inscription : 09 avr. 2013 07:15
Localisation : T'as pas dit bonjour, merci et à bientot !

Re: [Calc] couper coller ne fonctionnent pas avec bouton

Message par martinbrait »

Formidable Piaf !

'ce n'était pas un problème de référence à l'objet LibreOffice via ThisComponent :oops:
'au début du lancement de la macro, le focus du bouton capte le focus par notre clic gauche
'Le copier coller du dispatcher nécessite de redéfinir le focus sur le Frame.ContainerWindow courant.
'à déclarer en première ligne de la macro enregistrée !

Code : Tout sélectionner

rem ----------------------------------------------------------------------
rem get access to the document
ThisComponent.CurrentController.Frame.ContainerWindow.setFocus
...
...
Je l'aurai un jour.... je l'aurai !!! :lol: :roll: :lol:
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par martinbrait le 29 mai 2018 19:54, modifié 3 fois.
LibreOffice version 5.4.7.2.M6 (x64)
Windows 10
+
LibreOffice version 5.4.7.2.M6 (x64)
Windows 7

#HSQL Database Engine 1.8.0
version=1.8.0

Locale : fr-FR (fr_FR)

Obligation de version


Bonjour, merci et à bientôt !
freed
Membre lOOyal
Membre lOOyal
Messages : 25
Inscription : 21 mars 2010 15:03

Re: [Résolu][Calc] couper coller ne fonctionnent pas avec bo

Message par freed »

Merci à vous tous !
Problème de bouton résolu.
Vous êtes trop forts et les macros c'est vraiment trop difficile pour qui n'en a besoin qu'une fois tous les trois ans.
Je ne suis pas sorti de l'auberge avec ma macro de reprise sous calc de données dans des tableaux au format pdf dans le but de traiter les données (tris, comparaisons, stats etc) !
:bravo:
LibreOffice Version: 6.0.4.2 (x64) sous Windows 10
Avatar de l’utilisateur
martinbrait
InconditiOOnnel
InconditiOOnnel
Messages : 753
Inscription : 09 avr. 2013 07:15
Localisation : T'as pas dit bonjour, merci et à bientot !

Re: [Issue][Calc] couper coller ne fonctionnent pas avec bou

Message par martinbrait »

Sais-tu vraiment extraire le texte d'un pdf ? 1_2 _3_4_
Dernière modification par micmac le 29 mai 2018 21:01, modifié 1 fois.
Raison : url externes neutralisés
LibreOffice version 5.4.7.2.M6 (x64)
Windows 10
+
LibreOffice version 5.4.7.2.M6 (x64)
Windows 7

#HSQL Database Engine 1.8.0
version=1.8.0

Locale : fr-FR (fr_FR)

Obligation de version


Bonjour, merci et à bientôt !
freed
Membre lOOyal
Membre lOOyal
Messages : 25
Inscription : 21 mars 2010 15:03

Re: [Issue][Calc] couper coller ne fonctionnent pas avec bou

Message par freed »

Merci martinbrait pour cette proposition.

Je connais ces types de convertisseurs. Ils sont relativement efficaces sur les tableaux que j'ai à traiter (j'ai fait un test).
Cependant je ne peux utiliser des services en ligne pour des raisons de confidentialité des données traitées.

J'ai bien essayé des logiciels gratuits du style PDF2WordConverter pour tenter ensuite de passer en rtf mais en vain.
Les données ne sont pas reprises dans un tableau unique mais dans autant de tableaux autonomes qu'il y a de données, ce qui les rend inexploitables.

Je procède donc par un Ctrl A puis Ctrl C sur mon pdf puis colle et traite par macros le résultat dans mon calc (une seule colonne au départ).
Heureusement les tableaux sont strictement identiques sur toutes le pages.

Il m'a fallu trois macros via l'enregistreur pour enfin obtenir le résultat escompté : 20 secondes pour reformater les données c'est mieux que 12 minutes par copier coller manuel des colonnes de chaque page !
Mes trois boutons fonctionnent parfaitement, encore merci. D'autres pourront facilement utiliser ce classeur. Le reste du traitement n'est que fonctions, tris, comparaisons, extractions sans besoin de macros. Ouf !
LibreOffice Version: 6.0.4.2 (x64) sous Windows 10