[Résolu][Calc]Déplacer ligne dans une zone selon date

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 dans une zone selon date

Message par Nikky-974 »

Bonjour
Me revoilà mais cette fois avec une question plus complexe.
Dans mon tableau ci joint je souhaiterais déplacer dans la feuille "dossiers transmis" certaines lignes des 6 premières feuilles (ce via la boite de dialogue 2 elle même lancée par le bouton transmettre de la boite de dialogue 1).
la feuille "dossiers transmis" est composée de plages de cellules pour chaque mois de l'année.
Ma boite de dialogue 2 comporte un champs date qui datera la sortie du dossier et qui devra alors se ranger dans la zone du mois concerné.
Naturellement chaque ligne déplacée devrait se ranger à la dernière ligne vide de chaque mois.
Seules les 5 premières cellules des lignes sont à déplacer puisque la dernière cellule correspondant à la colonne Observation n'apparait plus dans le tableau de ma dernière feuille,
Cependant 3 nouvelles cellules doivent être renseignées par des commandes des boites de dialogue 1 et 2 à savoir "DateSortie" , "Décision" dans dilogue1 et "Attribution" dans dilogue2.

Voila je ne sais pas comment structurer le code surtout le rangement relatif à la date de sortie.

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 08 sept. 2016 07:48, modifié 1 fois.
Nikky974
Windows 7 entreprise (2009) LibreOffice Version: Version: 5.0.6.3.0+
Avatar de l’utilisateur
micmac
RespOOnsable forum
RespOOnsable forum
Messages : 9255
Inscription : 28 août 2010 08:45

Re: [Calc]Déplacer ligne dans une zone définie selon une dat

Message par micmac »

Bonjour,
votre signature a écrit : LibreOffice Version: 4.2.6.3
Votre signature indique que vous disposez d'une version de OpenOffice qui n'est plus maintenue.
Est-ce une erreur, un choix, un oubli, une obligation ?
Dans ce dernier cas, mentionnez-le dans votre signature par "Obligation de version".

Pour connaître la version que vous possédez : https://forum.openoffice.org/fr/forum/v ... 582#p11582

Nous vous invitons à vous mettre à jour de la dernière version : https://forum.openoffice.org/fr/forum/v ... m.php?f=38.

Accès direct à votre signature pour la corriger.

Cordialement.
Touche Ctrl de Windows = touche cmd⌘ sur Mac
Outils > Options sur Windows = OpenOffice > Préférences sur Mac
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 18:07
Localisation : Guyane

Re: [Calc]Déplacer ligne dans une zone définie selon une dat

Message par Piaf »

Bonsoir
Dans un premier temps, applique les consignes de la modération en précisant dans ta signature le pourquoi de la version de LibO utilisée.
Ensuite, pour le fun

Code : Tout sélectionner

Sub Transmettre
Dim oDoc as Object, oFeuille as Object, ZoneDepart as Object, maFeuille as Object, maZone as Object
Dim maDate as Object, mois as String, Recherche as Object, trouve as Variant, maZoneMois as Object
Dim ZoneArrivee as Object, zonesVides as Variant, maLigne as Long
	oDoc = thisComponent
	oFeuille = thisComponent.CurrentController.ActiveSheet
	ZoneDepart = oFeuille.getCellRangeByPosition(0,ligne,4,Ligne)
	maFeuille = oDoc.Sheets.getByName("Dossiers transmis")
	maZone = maFeuille.getCellRangeByName("A3:A277")
	maDate = oDialog2.getControl("DateSortie").Date
	Select Case maDate.Month
		Case 1
			mois = "JANVIER" & " " & maDate.Year
		Case 2
			mois = "FEVRIER" & " " & maDate.Year
		Case 3
			mois = "MARS" & " " & maDate.Year
		Case 4
			mois = "AVRIL" & " " & maDate.Year
		Case 5
			mois = "MAI" & " " & maDate.Year
		Case 6
			mois = "JUIN" & " " & maDate.Year
		Case 7
			mois = "JUILLET" & " " & maDate.Year
		Case 8
			mois = "AOÛT" & " " & maDate.Year
		Case 9
			mois = "SEPTEMBLE" & " " & maDate.Year
		Case 10
			mois = "OCTOBRE" & " " & maDate.Year
		Case 11
			mois = "NOVEMBRE" & " " & maDate.Year
		Case 12
			mois = "DECEMBRE" & " " & maDate.Year
	End Select
	Recherche = maZone.createSearchDescriptor
	With Recherche
		.SearchString = mois
		.SearchWords = True
	End With
	trouve = maZone.findFirst(Recherche)
	maZoneMois = maFeuille.getCellRangeByPosition(0,trouve.cellAddress.Row + 2,0,trouve.cellAddress.Row + 21)
	zonesVides = maZoneMois.queryEmptyCells.RangeAddresses
	maLigne = zonesVides(0).StartRow
	ZoneArrivee = maFeuille.getCellRangeByPosition(0,maLigne,4,maLigne)
	ZoneArrivee.DataArray = ZoneDepart.DataArray
	maFeuille.getCellByposition(5,maLigne).Value = DateValue(oDialog2.getControl("DateSortie").Text)
	maFeuille.getCellByposition(6,maLigne).String = oDialog2.getControl("Decision").SelectedItem
	maFeuille.getCellByposition(7,maLigne).String = oDialog1.getControl("Attribution").SelectedItem
	oDialog1.EndExecute
	oDialog2.EndExecute
	oDoc.CurrentController.select(maFeuille.getCellRangeByPosition(0,maLigne,7,maLigne))
End Sub
Il n'y a aucun contrôle, il faudrait au moins vérifier qu'une entrée soit saisie dans la liste Attribution du dialog1, qu'une date de sortie et une entrée de la liste Décisions soient saisies dans le dialog2.
Les données transférées ne sont pas effacées mais ça tu sais faire.
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 dans une zone définie selon une dat

Message par Nikky-974 »

Merci Piaf je testerais lundi matin. Concernant la version de libre office c est malheureusement la seule installée au boulot. Pas eu de mise à jour depuis. Nous sommes des utilisateurs des pc. Le profil administrateur est bloqué donc aucun moyen de telechager une nouvelle version. Donc oui il s agit bien d une obligation de version. Je modifie ma signature. Encore merci piaf
Nikky974
Windows 7 entreprise (2009) LibreOffice Version: Version: 5.0.6.3.0+
Nikky-974
Membre OOrganisé
Membre OOrganisé
Messages : 76
Inscription : 03 nov. 2015 18:01

Re: [Calc]Déplacer ligne dans une zone définie selon une dat

Message par Nikky-974 »

Merci Piaf ça fonctionne nickel
Juste un petit Hic.
en effaçant la ligne transmise je conserve la dernière cellule.
A juste titre puisqu'elle n'est pas incluse dans ma "ZoneDépart".

J'ai du bidouiller pour la zone liste attribution puisque comme celle ci n'est pas reportée dans ma boucle elle ne conserve pas sa valeur.
J'ai donc modifié le déplacement de la ligne en mettant à la place le nom de la feuille active. Ca marche aussi du coup.

Reste cette case Observation qui ne s'efface pas. La réponse est surement devant mon nez mais je craint de tout planter.
Merci
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
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 dans une zone définie selon une dat

Message par Piaf »

Bonjour

Code : Tout sélectionner

Sub Transmettre
Dim oDoc as Object, oFeuille as Object, ZoneDepart as Object, maFeuille as Object, maZone as Object
Dim maDate as Object, mois as String, Recherche as Object, trouve as Variant, maZoneMois as Object
Dim gomme as Long 
Dim ZoneArrivee as Object, zonesVides as Variant, maLigne as Long
	oDoc = thisComponent
	oFeuille = thisComponent.CurrentController.ActiveSheet
	ZoneDepart = oFeuille.getCellRangeByPosition(0,ligne,4,Ligne)
	maFeuille = oDoc.Sheets.getByName("Dossiers transmis")
	maZone = maFeuille.getCellRangeByName("A3:A277")
	maDate = oDialog2.getControl("DateSortie").Date   
	If oDialog2.getControl("DateSortie").Text = "" Then
		MsgBox "Vous devez renseigner le champ date de sortie du dossier"
		Exit Sub
	End If                          
	Select Case maDate.Month
		Case 1
			mois = "JANVIER" & " " & maDate.Year
		Case 2
			mois = "FEVRIER" & " " & maDate.Year
		Case 3
			mois = "MARS" & " " & maDate.Year
		Case 4
			mois = "AVRIL" & " " & maDate.Year
		Case 5
			mois = "MAI" & " " & maDate.Year
		Case 6
			mois = "JUIN" & " " & maDate.Year
		Case 7
			mois = "JUILLET" & " " & maDate.Year
		Case 8
			mois = "AOÛT" & " " & maDate.Year
		Case 9
			mois = "SEPTEMBRE" & " " & maDate.Year
		Case 10
			mois = "OCTOBRE" & " " & maDate.Year
		Case 11
			mois = "NOVEMBRE" & " " & maDate.Year
		Case 12
			mois = "DECEMBRE" & " " & maDate.Year
	End Select
	Recherche = maZone.createSearchDescriptor
	With Recherche
		.SearchString = mois
		.SearchWords = True
	End With
	trouve = maZone.findFirst(Recherche)
	maZoneMois = maFeuille.getCellRangeByPosition(0,trouve.cellAddress.Row + 2,0,trouve.cellAddress.Row + 21)
	zonesVides = maZoneMois.queryEmptyCells.RangeAddresses
	maLigne = zonesVides(0).StartRow
	ZoneArrivee = maFeuille.getCellRangeByPosition(0,maLigne,4,maLigne)
	ZoneArrivee.DataArray = ZoneDepart.DataArray
	maFeuille.getCellByposition(5,maLigne).Value = DateValue(oDialog2.getControl("DateSortie").Text)
	maFeuille.getCellByposition(6,maLigne).String = oDialog2.getControl("Decision").SelectedItem
	maFeuille.getCellByposition(7,maLigne).String = oFeuille.Name
	gomme = com.sun.star.sheet.CellFlags.DATETIME + com.sun.star.sheet.CellFlags.STRING + com.sun.star.sheet.CellFlags.VALUE
	oFeuille.getCellRangeByPosition(0,ligne,5,Ligne).clearContents(gomme)      
	oDialog1.EndExecute
	oDialog2.EndExecute
	oDoc.CurrentController.select(maFeuille.getCellRangeByPosition(0,maLigne,7,maLigne))
End Sub
Devrait le faire.
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: [Résolu][Calc]Déplacer ligne dans une zone selon date

Message par Nikky-974 »

Parfait ça fonctionne MERCI Beaucoup
Nikky974
Windows 7 entreprise (2009) LibreOffice Version: Version: 5.0.6.3.0+