[Résolu][Calc]Copier plage de cellules entre 2 feuilles

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 !
Whiteneck
Membre hOOnoraire
Membre hOOnoraire
Messages : 159
Inscription : 20 janv. 2013 11:19

[Résolu][Calc]Copier plage de cellules entre 2 feuilles

Message par Whiteneck »

Bonjour, :)

J'ai besoin d'aide pour étendre cette macro à une plage de cellule (dans ce cas particulier je bloque).
Le but est qu'un ensemble de contenus texte de la feuille 1 soit reporté dans la feuille 2.
J'y parviens pour une cellule mais je voudrais le faire pour une plage assez grande sans avoir besoin d'indiquer les cellules une à une.

Dans mon cas je cherche à ce que toute la plage jaune soit copiée de la feuille 1 vers la feuille 2 dès que l'une des cellule de la plage est modifiée.
Pour le moment cela n'est possible que dans la première.

Et encore bonne année à tous.

Code : Tout sélectionner

Global Doc as Object, F1 as Object, F2 as Object, col1 as Integer, lig1 as Integer, col2 as Integer, lig2 as Integer
Global Cell as Object, Feuille as object, Moi as Object, Plage as Object, result as object, Range as Long

Sub Clone_Feuilles(Evt)
'Copie le contenu texte d'une cellule d'une feuille vers une autre cellule d'une autre feuille.
	
	Doc = thisComponent
	F1 = Doc.Sheets.getByName("Feuille1")		       'feuille d'origine
	col1 = 2											' colonne de la cellule d'origine
	lig1 = 5											' ligne de le cellule d'origine
	
	F2 = Doc.Sheets.getByName("Feuille2")					' feuille de destination
	col2 = 7											' colonne de la cellule de destination
	lig2 = 6											' ligne de le cellule de destination
	
	Cell = Evt
	Feuille = Doc.currentController.activeSheet
	Moi = Feuille.getCellByPosition(col1,lig1)
	Plage = Feuille.getCellByPosition(col1,lig1)
	Result = Moi.queryIntersection(Plage.RangeAddress)
	
	If Result.RangeAddressesAsString <> "" Then 
			F2.getCellByPosition(col2,lig2).string = F1.getCellByPosition(col1,lig1).string
	end If
End Sub
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Whiteneck le 17 janv. 2018 11:45, modifié 3 fois.
LibreOffice Version : 6.3.6.2 (x64) / Windows 8.1
Avatar de l’utilisateur
Bidouille
RespOOnsable forum
RespOOnsable forum
Messages : 12230
Inscription : 08 nov. 2005 16:23
Localisation : Caen, France

Re: [Calc]Copier plage de cellules entre 2 feuilles

Message par Bidouille »

Pour être aidé efficacement par les bénévoles et surtout leur faire gagner du temps, veuillez fournir les éléments suivants :
  1. insérer dans le corps du message le code de la macro exposant le problème
  2. joindre un document explicatif intégrant cette macro avec les données de départ (feuille1) et le résultat à obtenir (feuille2)
  3. fournir un mode pas-à-pas permettant de reproduire ce qui a été fait ou ce que vous cherchez à faire pour arriver au problème
  4. ajouter des copies écran (situation avant / après) si cela permet de mieux comprendre
Merci de publier ces informations à la suite.
Whiteneck
Membre hOOnoraire
Membre hOOnoraire
Messages : 159
Inscription : 20 janv. 2013 11:19

Re: [Calc]Copier plage de cellules entre 2 feuilles

Message par Whiteneck »

Merci Bidouille, j'avais oublié la pièce jointe. :oops: J'ai repris mon message pour mieux détailler ce que je veux obtenir concrètement.
LibreOffice Version : 6.3.6.2 (x64) / Windows 8.1
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 07:26

Re: [Calc]Copier plage de cellules entre 2 feuilles

Message par Hubert Lambert »

Bonjour,

Un premier exemple (qui ne copie que les valeurs) :

Code : Tout sélectionner

sub clone_plage(cellule)
    ' est-ce que la saisie se trouve dans la plage jaune ?
    plage_jaune = cellule.Spreadsheet.getCellRangeByName("C6:C36")
    intersect = cellule.queryIntersection(plage_jaune.RangeAddress)
    if intersect.Count = 0 then
        exit sub
    end if
    
    ' la saisie se trouve dans la plage jaune -> on copie
    f2 = thiscomponent.Sheets.getByName("Feuille2")
    destination = f2.getCellRangeByName("H7:H37")
    destination.setDataArray(plage_jaune.DataArray)    
end sub
Cordialement.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Whiteneck
Membre hOOnoraire
Membre hOOnoraire
Messages : 159
Inscription : 20 janv. 2013 11:19

Re: [Résolu][Calc]Copier plage de cellules entre 2 feuilles

Message par Whiteneck »

Merci Hubert ! :D
Cela convient parfaitement.
(qui ne copie que les valeurs) :
Je ne comprend pas pourquoi précise cela ?
En quoi ça pourrait me gêner ?
LibreOffice Version : 6.3.6.2 (x64) / Windows 8.1
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 07:26

Re: [Résolu][Calc]Copier plage de cellules entre 2 feuilles

Message par Hubert Lambert »

Tu aurais pu vouloir également copier la mise en forme, ce qui aurait nécessité un tout autre code...
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Whiteneck
Membre hOOnoraire
Membre hOOnoraire
Messages : 159
Inscription : 20 janv. 2013 11:19

Re: [Résolu][Calc]Copier plage de cellules entre 2 feuilles

Message par Whiteneck »

copier la mise en forme
Je crois que je vais y être confronté. :(
J'ouvrirai un nouveau sujet.
LibreOffice Version : 6.3.6.2 (x64) / Windows 8.1