Page 1 sur 1

[Résolu] [Calc] collage spécial relatif dans un classeur

Publié : 14 mars 2010 18:15
par nulenmacro
"
[Calc]
Bonjour,
Pour certains, ma question va être enfantine mais cela fait une journée que je me creuse pour trouver comment coller une plage de données
- depuis une feuille de classeur openoffice (exemple C4:Z4 dans la feuille "reference")
- sur une autre feuille QUELCONQUE (il s'agit d'un classeur annuel avec les douze mois, donc soit sur 01, 02 , 03 etc jusqu'à 12)
- et à partir de la cellule sélectionnée(active) dans la feuille sélectionnée (active)
Je désire donc que ma macro, que je me place sur la feuille 02 ou 10 ou 12, dans une cellule quelconque, qu'elle me recopie la plage C4:Z4 de la feuille "reference"
+ et le tout avec un collage spécial (en ignorant les cellules vides)
+ sans avoir à valider la boite de dialogue correspondante
+ et en n'ayant pas à répondre à un écrasement éventuel de données (car il y a des formats dans la feuille cible; donc la recopie met le message d'alerte par défaut)
UN GRAND MERCI à ceux qui peuvent m'aider"

Re: [Calc] collage spécial relatif dans un classeur

Publié : 15 mars 2010 08:07
par Dude

Re: [Calc] collage spécial relatif dans un classeur

Publié : 15 mars 2010 08:48
par nulenmacro
Merci, j'avais vu cette proposition mais je ne désire pas changer de classeur. ça ce n'est pas grave et cela pouvait s'adapter =>Mais je ne veux pas à avoir à nommer ma destination dans la macro : je voudrais qu'elle s'applique à la feuille active au moment du déclenchement de cette macro sans compter qu'il me faudrait après
+ pouvoir faire le ok de la boite de dialogue du collage spécial et enfin
+ passer outre le message d'écrasement...
je sais, suis exigeant mais c'est pour le boulot...
Voici, à l'aide d'un classeur en pièce jointe ce que je souhaiterais (expliqué à la première feuille nommée "reference")
Par avance, Merci (et désolé pour le message, à l'attention du modérateur)

Re: [Calc] collage spécial relatif dans un classeur

Publié : 15 mars 2010 13:26
par Dude
nulenmacro a écrit :Mais je ne veux pas à avoir à nommer ma destination dans la macro : je voudrais qu'elle s'applique à la feuille active au moment du déclenchement de cette macro
Autres pistes trouvées avec "copie* +colle* +plage*" :
http://user.services.openoffice.org/fr/ ... A+plage%2A
http://user.services.openoffice.org/fr/ ... A+plage%2A
http://user.services.openoffice.org/fr/ ... A+plage%2A

Re: [Calc] collage spécial relatif dans un classeur

Publié : 15 mars 2010 16:59
par nulenmacro
Je n'y arrive pas, désolé
Tant pis si cela ne fonctionne pas sur n'importe quelle feuille, je la renommerai (mais je ne peux pas la déplacer dans le classeur)
Dans le cas de feuilles que je renomme tous les mois, voici ce que j'avais sous excel (le code est affiché en page exemple dans le fichier joint et répété ici)

Code : Tout sélectionner

Sub copir()
' copir Macro
' Macro enregistrée le 15/03/2010 par nulenmacro
    Sheets("MODELE").Select
    Range("B12:H12").Select
    Selection.Copy
    Sheets("mois").Select
    ActiveCell.Select
    Selection.PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks:=True _
        , Transpose:=False
End Sub
MERCI beaucoup pour votre aide car je m'arrache le reste de cheveux qu'il me reste ! Je n'arrive pas à appeler et sélectionner les feuilles :(

Re: [Calc] collage spécial relatif dans un classeur

Publié : 18 mars 2010 09:36
par pic-epeiche
Bonjour,

Je ne suis pas non plus une pro des macro et ce que je fais n'est pas forcement trés élégant, mais ça fonctionne !!
si j'ai bien compris, ce qui te manque c'est juste le positionnement sur la feuille active :
ça tu peux le récupérer comme ça :
FeuilleDest = Doc.CurrentController.ActiveSheet
Ensuite, après avoir fait le "copy" sur ta feuille d'origine, tu te replaces en inversant la formule :
Doc.CurrentController.ActiveSheet = FeuilleDest

Sinon, si tu as des cochonneries dans les cellules, avant de faire le coller, tu peux tout virer pour être tranquille .
Après avoir sélectionner la plage de cellules :
args1(0).Name = "Flags"
args1(0).Value = "A"
dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args1())

Après ça, le "paste" devrait se faire sans message.

bon courage

[Resolu] [Calc] collage spécial relatif dans un classeur

Publié : 20 mars 2010 19:42
par nulenmacro
RESOLU Merci à ceux qui m'ont apporté leur contribution, cela a été laborieux ; certainement enfantins pour les pros mais j'offre ma solution à ceux à qui cela pourrait servir

Code : Tout sélectionner

REM  *****  BASIC  *****

Sub lessai
dim Classeur as Object, Fdep as Object, PlageDep as Object, Farr as Object, Cellarr as Object,PlageDep2 as Object, Cellarr2 as Object
dim NumL as integer, NumC as integer, NumC2 as integer
Classeur = thisComponent
'identifier la page active comme page d'arrivée
Farr=Classeur.CurrentController.ActiveSheet
'identifier la page de depart ainsi que les plages à copier
Fdep=Classeur.Sheets.getByName("modele")
PlageDep = Fdep.getCellRangeByName("C3:F3")
'Farr=Classeur.Sheets.getByName("mois")
Classeur.CurrentController.ActiveSheet = Farr
Cellarr = Classeur.CurrentSelection
'Obtenir le numéro de la ligne
NumL = Cellarr.RangeAddress.StartRow
'Obtenir les numéros des colonne à copier
NumC = Cellarr.RangeAddress.StartColumn
'identifier la colonne de la deuxième plage copiée
NumC2 = NumC + 5
'copie de la ppremière plage
Farr.copyrange(Cellarr.cellAddress, PlageDep.rangeAddress)
'selection de la deuxième plage
Fdep=Classeur.Sheets.getByName("modele")
PlageDep2 = Fdep.getCellRangeByName("H3:K3")
'copie de la deuxième plage en retournant sur la page active du départ
Classeur.CurrentController.ActiveSheet = Farr
Cellarr2 = Farr.getCellByPosition (NumC2, NumL)
Farr.copyrange(Cellarr2.cellAddress, PlageDep2.rangeAddress)
end sub
:D