[Résolu][Calc] Copie de lignes visibles déjà filtrées vers un autre classeur via collage spécial

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 !
Tobomas
Fraîchement OOthentifié
Messages : 1
Inscription : 14 mars 2024 14:00

[Résolu][Calc] Copie de lignes visibles déjà filtrées vers un autre classeur via collage spécial

Message par Tobomas »

Bonjour à tous :D
je balbutie à peine en Basic pour les macros...
J’ai pu récupéré deux macros qui remplissent leur rôle mais ne permettent pas de remplir mon besoin spécifique. Pourriez-vous m’aider s’il vous plaît ?

Le contexte (voir 2 PJ):
Le classeur 1 permet d’inscrire et de traiter en masse des informations avec filtrage automatique.
Le classeur 2 à le rôle de support d’analyse et de data pour publipostage via des données extraites sur critères depuis le classeur numéro 1.
L’existence de deux classeurs distincts est indispensable (travail en équipe, le classeur 1 est enrichi en permanence, etc...)


Mon besoin, comportant deux volets:

Besoin A)
Dans le classeur 1 : Copier une information présente dans une cellule fournisseur d’information (Feuille10:K:1), et coller cette information (date) dans toutes les cellules visibles vides de la colonne I dont les lignes peuvent être préalablement filtrées manuellement. Enjeu : ne pas coller dans toutes les cellules, car il existe déjà des inscriptions à ne pas écraser.

Une fois que la colonne I est renseignée (cellules vides remplies depuis K1), les lignes visibles constituent les ligne à copier (voir besoin B ci-dessous)

Besoin B)
Classeur 1 : Copier les valeurs des cellules présentes sur les lignes visibles non vides (sauf la première ligne), et coller ces valeurs (pas les formules ni le formatage) depuis une autre cellule définie (A1) appartenant au classeur 2 (Feuille02).


Les macros que j’ai pu récupérer (j’ai cherché tellement d’endroits que je ne sais plus d’où elles viennent. Merci à la personne qui les a créées:) et qui servent partiellement mes besoin :

« CopierCollageSpe » permettant de copier une zone définie puis la coller (collage spéciale, que les valeurs) depuis une cellule définie sur une autre feuille du même classeur. Problème : copie toute la zone et pas uniquement les lignes visibles de la zone définie (les lignes sont préalablement filtrées par critère manuel de filtre automatique) et ne permet pas de coller dans un autre classeur.

Code : Tout sélectionner

option explicit

sub CopierCollageSpe

dim document   as object
dim dispatcher as object

document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

dim args(0) as new com.sun.star.beans.PropertyValue

args(0).Name = "ToPoint"
args(0).Value = "$Feuille10.$A$1:$I$7"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args())
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

args(0).Name = "ToPoint"
args(0).Value = "$Feuille11.$A$1"

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

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

dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args5())


end sub

« CopierZonesurFichierDistant » permet de copier une zone définie d’une feuille d’un classeur déjà ouvert puis la coller vers un autre classeur\feuille\cellule précise. Problème : j’aimerai pouvoir récupérer seulement les données texte, valeurs, sans le formatage, et sans les formules. Aussi la macro copie-colle toutes les informations de la zone, or j’ai besoin que ne soient pris en compte que les lignes visibles (filtre opéré en amont manuellement).
[/i]

Code : Tout sélectionner

Rem Attribute VBA ModuleTYpe=VBAModule
Option VBASupport 1

Sub CopierZonesurFichierDistant()

    Dim oDocOri As Object, FeuilleOrig As Object, MaZoneOrig As Object, MaCopie As Object
    Dim DestURL As String, oDocDest As Object, MaFeuilleDest As Object, MaCelluleCible As Object

    ' Définir le document source, la feuille source et la plage à copier
    oDocOri = ThisComponent
    FeuilleOrig = oDocOri.Sheets.GetByName("Feuille10")
    MaZoneOrig = FeuilleOrig.GetCellRangeByName("A2:I7")

    ' Sélectionner et copier la plage dans le document source
    oDocOri.CurrentController.Select(MaZoneOrig)
    MaCopie = oDocOri.CurrentController.GetTransferable()

    ' Définir l'URL du document destinataire
    DestURL = ConvertToUrl("C:\Users\...\Desktop\...\classeur 2.ods")

    ' Vérifier si le document existe
    If Not FileExists(DestURL) Then
        MsgBox("Le document n'existe pas")
    Else
        ' Ouvrir le document destinataire
        Dim Args(0) As New com.sun.star.beans.PropertyValue
        oDocDest = StarDesktop.loadComponentFromURL(DestURL, "_blank", 0, Args)

        ' Copier sur la feuille "Feuille1"
        MaFeuilleDest = oDocDest.Sheets.GetByName("Feuille20")
        MaCelluleCible = MaFeuilleDest.getCellRangeByName("A1")
        oDocDest.CurrentController.Select(MaCelluleCible)

        ' Coller la plage copiée dans la cellule A1 du document destinataire
        oDocDest.CurrentController.InsertTransferable(MaCopie)

        ' Enregistrer les modifications dans les deux documents
        oDocOri.store(True)
        oDocDest.store(True)

        ' Fermer le document destinataire
        'oDocDest.close(True) ' Commenté pour que le document reste ouvert
    End If

End Sub


La version de LibreOffice Calc que j’utilise est imposée par mon employeur :
Version: 7.2.7.2.M7 (x64) / LibreOffice Community

Un grand merci par avance pour l’aide que vous m’apporterez !! Cela bénéficiera aussi à mes collègues pour qui j’essaye d’élaborer ce tableau outils. :super:
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Oukcha le 15 mars 2024 20:22, modifié 1 fois.
LibreOffice 7.2.7.2.M7 sous Windows 10 Professionnel version 22H2 64bits
Avatar de l’utilisateur
micmac
RespOOnsable forum
RespOOnsable forum
Messages : 9580
Inscription : 28 août 2010 08:45

Re: [Calc] Copier-coller les lignes visibles déjà filtrées vers un autre classeur via un collage spécial

Message par micmac »

Bonjour et bienvenue,

Cette section a des règles très précises que vous devez obligatoirement suivre pour obtenir de l'aide. C'est indiqué dans le cadre rouge en haut de la page.

Il est demandé aux auteurs de faire précéder le titre de leur question d'une balise adéquate. Ce balisage est extrêmement important car il permet d'avoir une base de connaissance optimum en cas de recherche.

Lisez ce fil pour savoir quelle balise utiliser : sutra27295.html#27295

Nous l'avons fait pour vous cette fois-ci mais lors de votre prochaine question, nous vous remercions de le faire vous-même au risque de voir votre sujet verrouillé.
.
Tobomas a écrit : 14 mars 2024 15:10La version de LibreOffice Calc que j’utilise est imposée par mon employeur
Accès direct à votre signature pour y mentionner Obligation de version

Merci de votre collaboration.
Touche Ctrl de Windows = touche cmd⌘ sur Mac
Outils > Options sur Windows = OpenOffice > Préférences sur macOS
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25602
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Copier-coller les lignes visibles déjà filtrées vers un autre classeur via un collage spécial

Message par Dude »

Salut,

Merci de suivre les recommandations du modo quant à ta signature.
Tobomas a écrit : 14 mars 2024 15:10 je balbutie à peine en Basic pour les macros...
Avec zBasic, tu fais un export d'une feuille dans un classeur en deux lignes :

Code : Tout sélectionner

Sub Main
  GlobalScope.BasicLibraries.loadLibrary ("zBasic")
  zFeuille.Exporte("c:\Temp\resultat.ods", "Feuille10")	
End Sub