[Résolu][Calc] Déplacer ligne selon zone de liste

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 !
Nikky-974
Membre OOrganisé
Membre OOrganisé
Messages : 76
Inscription : 03 nov. 2015 18:01

[Résolu][Calc] Déplacer ligne selon zone de liste

Message par Nikky-974 »

Bonjour
Je souhaiterais pouvoir déplacer une ligne sur une autre feuille en fonction d'une combobox.
Je m'explique plus précisément dans le fichier joint j'ai renseigné une ligne sur chaque feuille. ces lignes représentent des dossiers attribués à des personnes.
Un dossier peut changer d'attribution. J'ai une feuille par personne. je voudrais déplacer la ligne si le dossier change d'attribution mais que celle ci se colle à la ligne vide suivante de la feuille de destination.
J'ai trouvé quelques recherches sur internet mais je n'ai trouvé aucun code pouvant correspondre à ma requête.
Merci de votre aide.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Nikky-974 le 26 août 2016 16:48, modifié 2 fois.
Nikky974
Windows 7 entreprise (2009) LibreOffice Version: Version: 5.0.6.3.0+
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 18:07
Localisation : Guyane

Re: [Calc] Déplacer ligne sur une autre feuille selon combob

Message par Piaf »

Bonjour
Un exemple en remplaçant la boite combinée par une zone de liste.

Code : Tout sélectionner

Sub Deplacer(oEv as Object)
Dim I as Integer, oNom as Object, maZone as Object, zonesVides as Variant
	If oDialog1.getControl("Attribution").SelectedItemPos >= 0 Then
		oFeuille = thisComponent.Sheets(oDialog1.getControl("Attribution").SelectedItemPos)
		maZone = oFeuille.getCellRangeByName("A4:A100")
		zonesVides = maZone.queryEmptyCells.RangeAddresses
		ligne = zonesVides(0).StartRow
		For I = 0 to UBound(Var)
			oNom = oDialog1.GetControl(Var(I))
			If oNom.supportsService("com.sun.star.awt.UnoControlListBox") Then
				oFeuille.getCellByPosition(I, Ligne).String = oNom.SelectedItem
			ElseIf oNom.Model.Name = "DateField1" Then
				If onom.Text <> "" Then oFeuille.getCellByPosition(I , Ligne).Value = DateValue(oNom.Text)
			Else
				oFeuille.getCellByPosition(I , Ligne).String = oNom.Text
			End If
		Next
	Else
		MsgBox("Sélectionnez une entrée dans la liste Attribution")
		Exit sub
	End If		
	oDialog1.EndExecute
End Sub 
Il faudrait peut-être prévoir la suppression de l'enregistrement déplacé.
Une autre façon de faire.

Code : Tout sélectionner

Sub Deplacer2(oEv as Object)
Dim ZoneDepart as oBject, oFeuilleA as Object, maZone as Object, zonesVides as Variant, ZoneArrivee as Object
Dim gomme as Long
	If oDialog1.getControl("Attribution").SelectedItemPos >= 0 Then
		oFeuille = thisComponent.CurrentController.ActiveSheet
		ZoneDepart = oFeuille.getCellRangeByPosition(0,ligne,5,Ligne)
		oFeuilleA = thisComponent.Sheets(oDialog1.getControl("Attribution").SelectedItemPos)
		maZone = oFeuilleA.getCellRangeByName("A4:A100")
		zonesVides = maZone.queryEmptyCells.RangeAddresses
		ligne = zonesVides(0).StartRow
		ZoneArrivee = oFeuilleA.getCellRangeByPosition(0,ligne,5,Ligne)
		ZoneArrivee.DataArray = ZoneDepart.DataArray
		gomme = com.sun.star.sheet.CellFlags.DATETIME + com.sun.star.sheet.CellFlags.STRING + com.sun.star.sheet.CellFlags.VALUE
		ZoneDepart.clearContents(gomme)		
	Else
		MsgBox("Sélectionnez une entrée dans la liste Attribution")
		Exit sub
	End If		
	oDialog1.EndExecute
End Sub
A+
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Nikky-974
Membre OOrganisé
Membre OOrganisé
Messages : 76
Inscription : 03 nov. 2015 18:01

Re: [Calc] Déplacer ligne sur une autre feuille selon combob

Message par Nikky-974 »

Super la méthode 2 est impeccable Merci beaucoup
Nikky974
Windows 7 entreprise (2009) LibreOffice Version: Version: 5.0.6.3.0+