[Résolu][Calc] Collage spécial -fin de tableau autre feuille

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] Collage spécial -fin de tableau autre feuille

Messagepar NUMIS88 » 15 Sep 2020 18:16

Bonjour à tous,

Je me permet de solliciter à nouveau la communauté, suite à la problématique déjà formulées dans le post suivant : https://forum.openoffice.org/fr/forum/viewtopic.php?f=8&t=62846#p342474

En effet, je souhaitais effectuer une copie et un collage spécial d'une plage de cellules d'une feuille, vers une autre feuille, en fin de tableau et à la première ligne non remplie.

Un code fonctionnel m'a été proposé par Dude, seulement je n'avais pas fait attention, il ne prend pas en compte le collage spécial.

Code : Tout sélectionner   AgrandirRéduire
    Sub CopierCollerEntreFeuilles()
       nLigne = RENVOI_LIGNE_VIDE("Cumul.A1:A1000")
       oDoc = ThisComponent
       oCopieFeuille= oDoc.Sheets.getByName("feuille_initiale") ' Nom de la feuille à copier
       oColleFeuille = oDoc.Sheets.getByName("Cumul") ' Nom de la feuille où coller
       oPlage = oCopieFeuille.getCellRangeByName("A2:D16") ' La plage à copier   
       oColleCellule = oColleFeuille.getCellByPosition(0, nLigne)  ' Cellule où démarre le collage
       oColleFeuille.copyRange(oColleCellule.CellAddress, oPlage.RangeAddress)   
    End Sub

    Function RENVOI_LIGNE_VIDE(sPlage)
       aPlage = split(sPlage,".")
       oFeuil = ThisComponent.Sheets.getByName(aPlage(0))
       oZone = oFeuil.getCellRangeByName(aPlage(1))
       oPlage = oZone.queryEmptyCells.RangeAddresses
       RENVOI_LIGNE_VIDE = oPlage(0).StartRow
    End Function


Je joins un modèle résumant la problématique et les macros dont je disposais, mais en deux parties, que je ne parvenais pas à cumuler.

En vous remerciant par avance, pour l'aide que vous pourrez m'apporter.

Cordialement,
Pièces jointes
collage_special_en_fin_tableau_autre_feuille.ods
(24.95 Kio) Téléchargé 46 fois
Dernière édition par NUMIS88 le 17 Sep 2020 16:41, édité 1 fois.
Libreoffice Version: 6.2.8.2.M1 (x64) Obligation de version.
Windows 10 version 1909
NUMIS88
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 19
Inscrit le : 09 Sep 2020 09:29

Re: [Calc] Collage spécial en fin de tableau autre feuille

Messagepar Dude » 16 Sep 2020 07:22

Salut,

NUMIS88 a écrit:effectuer une copie et un collage spécial d'une plage de cellules d'une feuille, vers une autre feuille

Dans ce cas, passe plutôt par la propriété DataArray.
Plus souple et plus adapté à ce cas.
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 22247
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

Re: [Calc] Collage spécial en fin de tableau autre feuille

Messagepar NUMIS88 » 16 Sep 2020 08:32

Salut Dude,

Effectivement, je l'avais déjà regardé, à travers les lignes suivantes, mais je ne suis pas parvenu à les intégrer dans la macro que tu m'as proposée.


Code : Tout sélectionner   AgrandirRéduire
Dest.DataArray = Source.DataArray


et

Code : Tout sélectionner   AgrandirRéduire
  Dest.DataArray = Source.DataArray


Tu pourrais m'y aider?

Merci par avance,
Libreoffice Version: 6.2.8.2.M1 (x64) Obligation de version.
Windows 10 version 1909
NUMIS88
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 19
Inscrit le : 09 Sep 2020 09:29

Re: [Calc] Collage spécial en fin de tableau autre feuille

Messagepar Dude » 17 Sep 2020 07:59

Salut,

Voici un simple exemple d'utilisation :
Code : Tout sélectionner   AgrandirRéduire
Sub DupliquePlage   
   'Les plages source et destination doivent avoir la même taille
   sSrc = "A2:D16"
   sDst = "F2:I16"
   
   oDoc = thisComponent
   oFeuille = oDoc.currentController.ActiveSheet
   oSrc = oFeuille.getCellRangeByName(sSrc)
   oDst = oFeuille.getCellRangeByName(sDst)
   oDst.DataArray = oSrc.DataArray
End Sub

Je te laisse le soin d'adapter la plage destination et le paramétrage des feuilles concernées.
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 22247
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

Re: [Calc] Collage spécial en fin de tableau autre feuille

Messagepar NUMIS88 » 17 Sep 2020 10:52

Merci encore,

Mais je ne parviens toujours pas à associer le tout, sur une autre page, comme dans mon exemple...

Cordialmeent,
Libreoffice Version: 6.2.8.2.M1 (x64) Obligation de version.
Windows 10 version 1909
NUMIS88
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 19
Inscrit le : 09 Sep 2020 09:29

Re: [Calc] Collage spécial en fin de tableau autre feuille

Messagepar Dude » 17 Sep 2020 13:09

NUMIS88 a écrit:oCopieFeuille= oDoc.Sheets.getByName("feuille_initiale") ' Nom de la feuille à copier

Je ne vois pas l'intérêt d'un collage spécial pour les données de cette feuille qui ne comprend aucune formule.
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 22247
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

Re: [Calc] Collage spécial en fin de tableau autre feuille

Messagepar NUMIS88 » 17 Sep 2020 13:18

Re Salut,

Cet un exemple que j'ai fait pour le forum.

Dans le fichier réel, j'ai besoin de coller les résultats des cellules, pas leurs formules.

Cela se passe comme dans l'exemple, sur une autre feuille.

Cordialement,
Libreoffice Version: 6.2.8.2.M1 (x64) Obligation de version.
Windows 10 version 1909
NUMIS88
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 19
Inscrit le : 09 Sep 2020 09:29

Re: [Calc] Collage spécial en fin de tableau autre feuille

Messagepar Dude » 17 Sep 2020 15:12

Où se trouve la difficulté ? :roll:
Code : Tout sélectionner   AgrandirRéduire
Sub CopierCollerEntreFeuilles()
   nLigne = RENVOI_LIGNE_VIDE("Cumul.A1:A1000")
   sSrc = "A2:D16"
   sDst = "A" & (nLigne + 1) & ":D" & (nLigne + 15)
   
   oDoc = ThisComponent
   oCopieFeuille= oDoc.Sheets.getByName("feuille_initiale") ' Nom de la feuille à copier
   oColleFeuille = oDoc.Sheets.getByName("Cumul") ' Nom de la feuille où coller
   oPlage = oCopieFeuille.getCellRangeByName(sSrc) ' La plage à copier   
   oSrc = oCopieFeuille.getCellRangeByName(sSrc)
   oDst = oColleFeuille.getCellRangeByName(sDst)
   oDst.DataArray = oSrc.DataArray   
End Sub
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 22247
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

Re: [Calc] Collage spécial en fin de tableau autre feuille

Messagepar NUMIS88 » 17 Sep 2020 15:45

Re,

honnêtement, je n'aurais jamais trouvé tout seul, j'ai l'impression que ça marche.

Je remettrai en ligne le fichier.

Cela pourrait être mis en suprême de codes, car c'est vraiment le genre de macro très utile.

Rien qu'à mon taf, on est déjà deux à avoir la même demande!

Cordialement, et merci beaucoup,
Libreoffice Version: 6.2.8.2.M1 (x64) Obligation de version.
Windows 10 version 1909
NUMIS88
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 19
Inscrit le : 09 Sep 2020 09:29

Re: [Calc] Collage spécial en fin de tableau autre feuille

Messagepar Dude » 17 Sep 2020 16:06

NUMIS88 a écrit:Cela pourrait être mis en suprême de codes, car c'est vraiment le genre de macro très utile.

C'est déjà le cas.
Poser une question, c'est bien. Répondre aux autres, c'est encore mieux.
Améliorez AOO et votez pour les issues
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 22247
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

Re: [Calc] Collage spécial en fin de tableau autre feuille

Messagepar NUMIS88 » 17 Sep 2020 16:10

Re,

Comme promis, le fichier définitif, avec la macro complète qui fonctionne à merveille.

Comme je te le disais, cette macro mérite vraiment d'être ajouté en suprême, elle pourra rendre service à bon nombre d’utilisateurs, j'en suis persuadé.

Merci infiniment pour ton aide, je te laisse le soin de clôturer le post, si tu souhaites y répondre.

Cordialement
Pièces jointes
collage_special_en_fin_tableau_autre_feuille.ods
Macro définitive - collage spécial sur une autre feuille, en fin de plage
(22.51 Kio) Téléchargé 42 fois
Libreoffice Version: 6.2.8.2.M1 (x64) Obligation de version.
Windows 10 version 1909
NUMIS88
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 19
Inscrit le : 09 Sep 2020 09:29

Re: [Calc] Collage spécial en fin de tableau autre feuille

Messagepar Dude » 17 Sep 2020 16:27

NUMIS88 a écrit:cette macro mérite vraiment d'être ajouté en suprême

Comme je viens de l'écrire juste au dessus, c'est déjà le cas. Il suffit de prendre la peine de faire une recherche.

NUMIS88 a écrit: je te laisse le soin de clôturer le post

C'est à toi de le faire en balisant [Résolu]
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 22247
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

Re: [Calc] Collage spécial en fin de tableau autre feuille

Messagepar NUMIS88 » 17 Sep 2020 16:31

Merci pour tout :D
Libreoffice Version: 6.2.8.2.M1 (x64) Obligation de version.
Windows 10 version 1909
NUMIS88
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 19
Inscrit le : 09 Sep 2020 09:29



Retour vers Macros et API

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Google [Bot] et 8 invité(s)