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.