[Résolu][Calc] Couper/Collage spécial d'une colonne

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 !
Drake
Membre cOOnfirmé
Membre cOOnfirmé
Messages : 299
Inscription : 02 févr. 2012 00:51

[Résolu][Calc] Couper/Collage spécial d'une colonne

Message par Drake »

Bonjour,

N'ayant pas respecté le balisage, mon précédent message a été verrouillé.
Je le reproduis donc en respectant les règles cette fois-ci.

Pouvez-vous m'aider à écrire une macro qui déplace une colonne de 2 col vers la gauche en utilisant le "Couper/Collage Spécial" + le paramètre "Additionner".

Merci
Dernière modification par Drake le 20 janv. 2015 17:49, modifié 2 fois.
LibreOffice 6.2.7.1 (x64), Java (64b), Windows 10 (64b)
Drake
Membre cOOnfirmé
Membre cOOnfirmé
Messages : 299
Inscription : 02 févr. 2012 00:51

Re: [Calc] Couper/Collage spécial d'une colonne

Message par Drake »

Bonjour,

J'ai eu la réponse sur un autre site (Merci à son auteur jurassic pork)
.
La voici pour ceux que ça intéresse.

Code : Tout sélectionner

Sub CopierCollerSpecial
' J.P Janvier 2015
dim oDoc as object, oSheet as object, oFrame1 as object, oDispatcher as object, rng as object
oDoc = thisComponent
oDispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
oFrame1 = oDoc.CurrentController.Frame
' On sélectionne la plage de cellule à copier
oSheet = oDoc.Sheets(0)
rng = oSheet.getCellRangeByName("F1:F6103")
oDoc.CurrentController.Select(rng)
' On utilise un Dispatch pour copier la plage
oDispatcher.executeDispatch(oFrame1, ".uno:Cut", "", 0, Array())
' On sélectionne la première cellule de l'endroit où copier
rng = oDoc.Sheets(0).getCellRangeByName("D1")
oDoc.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
a+
LibreOffice 6.2.7.1 (x64), Java (64b), Windows 10 (64b)
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25181
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Couper/Collage spécial d'une colonne

Message par Dude »

Drake a écrit :Pouvez-vous m'aider à écrire une macro
Dans les règles, il y a mentionné :
_erreur.png
Tu aurais eu sensiblement le même code.

Tu sais aussi qu'il faut ajouter [Résolu] au début du titre de ton 1er message sans oublier de cocher la case de l'icône de sujet (le V vert).
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Drake
Membre cOOnfirmé
Membre cOOnfirmé
Messages : 299
Inscription : 02 févr. 2012 00:51

Re: [Calc] Couper/Collage spécial d'une colonne

Message par Drake »

re,

Tu aurais eu sensiblement le même code.
J'ai effectivement essayé de passer par l'enregistreur de macro mais dans le code généré il manquait la sélection de la colonne à déplacer ainsi que l'adresse de la destination.

Code : Tout sélectionner

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

rem ----------------------------------------------------------------------
dim args2(5) as new com.sun.star.beans.PropertyValue
args2(0).Name = "Flags"
args2(0).Value = "A"
args2(1).Name = "FormulaCommand"
args2(1).Value = 1
args2(2).Name = "SkipEmptyCells"
args2(2).Value = false
args2(3).Name = "Transpose"
args2(3).Value = false
args2(4).Name = "AsLink"
args2(4).Value = false
args2(5).Name = "MoveMode"
args2(5).Value = 4

dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args2())
LibreOffice 6.2.7.1 (x64), Java (64b), Windows 10 (64b)
MatthieuD77
NOOuvel adepte
NOOuvel adepte
Messages : 22
Inscription : 18 mai 2017 14:03

Re: [Résolu][Calc] Couper/Collage spécial d'une colonne

Message par MatthieuD77 »

Si je peux aporté de l'aide a ceux qui consulte le sujet:

voici un code qui copie et qui colle en collage spécial des case suivant les coordonnées:

Celui-ci pour un copie entre plusieurs feuille:

Code : Tout sélectionner

Sub Copiecolleentrefeuille 'copie ligne

dim FeuilleDI as object
dim PysSource as object
dim PysDest as object
dim FeuilleTableau as object

FeuilleDI = thiscomponent.sheets.getByName("DI") 'Prend la référence de la feuille 1 ou l'on copie les case
PysSource = FeuilleDI.getCellRangeByName("A10:N10") 'dans la feuille référencé feuille 1 prend la position de la case a copié
FeuilleTableau =  thiscomponent.sheets.getByName("tableau") 'Prend la référence de la feuille 2 ou l'on colle les case
PysDest = FeuilleTableau.getCellRangeByName("A1:N1") ' dans la feuille référencé feuille 2 prend la position d'ou on copie la case

PysDest.FormulaArray = PysSource.FormulaArray  'attribue la valeur de la case sources à la case dest:formulaArray permet de faire collage spécial

End Sub
Celui-ci pour une copie sur la même feuille :

Code : Tout sélectionner

Sub copiecollememefeuille1 'copie case collage spécial

dim PysFeuille as object
dim PysSource as object
dim PysDest as object

PysFeuille = thiscomponent.sheets.getByName("DI") 'Prend la référence de la feuille
PysSource = PysFeuille.getCellRangeByName("A1") 'dans la feuille référencer prend la position de la case a copié
PysDest = PysFeuille.getCellRangeByName("A10") ' dans la feuille référencé prend la position d'ou on copie la case

PysDest.FormulaArray = PysSource.FormulaArray 'attribue la valeur de la case souces à la case dest formulaArray permet de faire collage spécial

End Sub
et voici un fichier pour que ce soit plus claire :
copie case.ods
En espérant que sa puissent aidée.
Cordialement Matthieu
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Libre office Version: 5.3.2.2 Windows 7
Avatar de l’utilisateur
Oukcha
RespOOnsable modération
RespOOnsable modération
Messages : 3952
Inscription : 06 oct. 2008 08:03

Re: [Résolu][Calc] Couper/Collage spécial d'une colonne

Message par Oukcha »

Bonjour,

Plutôt que d’exhumer un sujet datant de plus de 2 ans, un nouveau fil (éventuellement marqué Image[Résolu]) aurait été bienvenue.

D’autre part, merci de citer vos sources, par exemple le fil d’origine d’où vous avez recopié le code.

Cordialement
                                        
Pour tout savoir sur le fonctionnement de ce forum :arrow: À lire avant tout ! Image