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.