Page 1 sur 1

[Résolu][Calc] Dernière cellule d'une ligne

Publié : 23 oct. 2019 07:30
par natorp

La modération vous a écrit: On vous l'a encore dit hier. Pour la bonne tenue de ce forum, veillez à respecter la syntaxe des balises (première lettre en majuscule puis le reste en minuscules, le tout entre crochets). À corriger, donc.

Bonjour

J'aimerais votre aide car je cherche à récupérer la valeur de la dernière cellule d'une ligne donnée et la copier dans une autre feuille

Merci pour votre attention et votre aide, Gérard

Re: [Calc] Dernière cellule d'une ligne

Publié : 23 oct. 2019 16:01
par Dude
Salut,

Pourquoi ne pas fournir un document exhaustif limité à la seule problématique que tu décris ?
natorp a écrit :récupérer la valeur de la dernière cellule d'une ligne donnée
Capture.png

Code : Tout sélectionner

Function DERNIERE_VALEUR_LIGNE(nLigne)
	oFeuil = ThisComponent.CurrentController.ActiveSheet
	nLigne = nLigne -1
	oZone = oFeuil.getCellRangeByPosition(0, nLigne, 1023, nLigne)
	oPlage = oZone.queryEmptyCells.RangeAddresses
	nCol = oPlage(0).StartColumn -1
	oCell = oFeuil.getCellByPosition(nCol, nLigne)
	DERNIERE_VALEUR_LIGNE = oCell.Value
End Function
natorp a écrit :et la copier dans une autre feuille
Où ça dans l'autre feuille ? Tu ne précises pas les coordonnées de la cellule destination.
Je te laisse le soin de compléter la fonction.

Re: [Calc] Dernière cellule d'une ligne

Publié : 24 oct. 2019 05:11
par natorp
Merci Dude

Comme je l'explique dans le fichier joint, en cliquant sur le bouton 'Insérer', cela va ajouter une ligne dans la feuille "tableau récapitulatif" (comme indiqué dans la feuille)
Comment puis-je adapter ton code à ma situation ?

Merci pour votre aide, cordialement, Gérard

Re: [Calc] Dernière cellule d'une ligne

Publié : 24 oct. 2019 10:12
par Dude
Ma foi, je t'ai fait un document avec la fonction qui fait ce que tu demandes.
As-tu au moins essayé de l'appeler dans ton script ?

Re: [Calc] Dernière cellule d'une ligne

Publié : 24 oct. 2019 12:28
par natorp
J'ai bien essayé quelque chose, mais ça plante, pas sûr de savoir faire :(

Voilà comment j'ai intégré ton code (merci) au mien :

Code : Tout sélectionner

Option Explicit

Function DERNIERE_VALEUR_LIGNE(nLigne)
	Dim nLigne as double	
	Dim oZone as Object
	Dim oPlage as Object
	Dim nCol as double
	Dim oCell as Object
	Dim monDoc as Object
	Dim MaFeuille As Object
	
	monDoc = ThisComponent	
	MaFeuille = monDoc.CurrentController.GetActiveSheet()
	
   nLigne = nLigne -1
   oZone = MaFeuille.getCellRangeByPosition(0, nLigne, 1023, nLigne)
   oPlage = oZone.queryEmptyCells.RangeAddresses
   nCol = oPlage(0).StartColumn -1
   oCell = MaFeuille.getCellByPosition(nCol, nLigne)
   DERNIERE_VALEUR_LIGNE = oCell.Value
End Function

Sub CopierContenu()


	Dim oFeuille As Object  '	la feuille de synthèse
	Dim monDoc as Object
	Dim MaFeuille As Object '   la feuille active
	Dim ZoneSource1 As Object
	Dim ZoneSource2 As Object
	Dim PremiereColonne As Variant
	Dim LignesVides() As Variant
	Dim premiereLigneVide As Variant
	Dim celluleDestination As Object
	Dim maCellule As Object
	Dim colonneType As Object
	Dim format1 As String
	Dim format2 As String
	Dim x As Long
	

	Dim oCursor As Object, nLig As Long
	dim i as double



	monDoc = ThisComponent	
	MaFeuille = monDoc.CurrentController.GetActiveSheet()
	ZoneSource1 = MaFeuille.GetCellRangeByName("B9")
	ZoneSource2 = MaFeuille.GetCellRangeByName("B11")
	oFeuille =   monDoc.sheets.getByName("Tableau récapitulatif")


 
'**********************************
'Déplacement du flux 	
'----------------------------------	
PremiereColonne = oFeuille.getCellRangeByName("A10:A4000")
LignesVides() = PremiereColonne.queryEmptyCells.RangeAddresses 'Recheche de cellule vide dans la feuille cible
premiereLigneVide = LignesVides(0).StartRow ' Numéro première ligne vide pour y copier le flux
celluleDestination = oFeuille.getCellByPosition(1, premiereLigneVide,)
oFeuille.copyRange(celluleDestination.CellAddress, ZoneSource1.RangeAddress)
celluleDestination = oFeuille.getCellByPosition(2, premiereLigneVide,)
oFeuille.copyRange(celluleDestination.CellAddress, ZoneSource2.RangeAddress)
celluleDestination = oFeuille.getCellByPosition(0, premiereLigneVide,)
oFeuille.copyRange(celluleDestination.CellAddress, DERNIERE_VALEUR_LIGNE(6))
Thiscomponent.Store

End Sub
Et où ça plante :

Code : Tout sélectionner

 oZone = MaFeuille.getCellRangeByPosition(0, nLigne, 1023, nLigne)
Une exception s'est produite :
Type : com.sun.star.lang.IndexOutOfBoundsException
Message : .

Merci pour ton aide, cordialement, Gérard

Re: [Calc] Dernière cellule d'une ligne

Publié : 24 oct. 2019 12:32
par Dude
Est-ce que mon document fonctionne chez toi ?

Re: [Calc] Dernière cellule d'une ligne

Publié : 24 oct. 2019 12:39
par natorp
Oui oui, avec la fonction en A1, pas de problème

Re: [Calc] Dernière cellule d'une ligne

Publié : 24 oct. 2019 14:13
par Dude
L'erreur que tu donnes signifie que tu dépasses la limite de la feuille (1.024 colonnes) ou que le n° de ligne que tu passes est hors plage.

Mais, je vais (encore) me répéter, l'usage de XRay sur l'objet MaFeuille te permettrait sans doute de déboguer par toi-même.

Re: [Calc] Dernière cellule d'une ligne

Publié : 24 oct. 2019 14:36
par natorp
Merci, je vais essayer XRay

par contre, Est-ce que ce bout de code est bien écrit pour toi ?

Code : Tout sélectionner

celluleDestination = oFeuille.getCellByPosition(0, premiereLigneVide,)
oFeuille.copyRange(celluleDestination.CellAddress, DERNIERE_VALEUR_LIGNE(11))
je souhaite tester la dernière valeur de la ligne 11 de la feuille active (là où il y a le bouton "Insérer")

Cordialement, Gérard

Re: [Calc] Dernière cellule d'une ligne

Publié : 24 oct. 2019 21:04
par Dude
Est-ce que tu comprends ce que tu fais ou tu codes au petit bonheur la chance ?
La méthode copyRange attend des adresses de plages de cellules.
Et tu lui passes le contenu d'une cellule. :shock: