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

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 !

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

Messagepar natorp » 23 Oct 2019 08:30


La modération 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
Pièces jointes
Test Tableau de contrôle.ods
(65.77 Kio) Téléchargé 8 fois
Dernière édition par natorp le 27 Nov 2019 10:02, édité 2 fois.
OOo 4.1.0 sous Win XP (imposé par notre administration)
natorp
Membre hOOnoraire
Membre hOOnoraire
 
Message(s) : 103
Inscrit le : 24 Nov 2009 19:31

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

Messagepar Dude » 23 Oct 2019 17:01

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   AgrandirRéduire
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.
Pièces jointes
Dude20191023.ods
(10.06 Kio) Téléchargé 6 fois
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 21118
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

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

Messagepar natorp » 24 Oct 2019 06:11

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
OOo 4.1.0 sous Win XP (imposé par notre administration)
natorp
Membre hOOnoraire
Membre hOOnoraire
 
Message(s) : 103
Inscrit le : 24 Nov 2009 19:31

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

Messagepar Dude » 24 Oct 2019 11:12

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 ?
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 21118
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

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

Messagepar natorp » 24 Oct 2019 13:28

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   AgrandirRéduire
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   AgrandirRéduire
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
OOo 4.1.0 sous Win XP (imposé par notre administration)
natorp
Membre hOOnoraire
Membre hOOnoraire
 
Message(s) : 103
Inscrit le : 24 Nov 2009 19:31

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

Messagepar Dude » 24 Oct 2019 13:32

Est-ce que mon document fonctionne chez toi ?
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 21118
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

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

Messagepar natorp » 24 Oct 2019 13:39

Oui oui, avec la fonction en A1, pas de problème
OOo 4.1.0 sous Win XP (imposé par notre administration)
natorp
Membre hOOnoraire
Membre hOOnoraire
 
Message(s) : 103
Inscrit le : 24 Nov 2009 19:31

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

Messagepar Dude » 24 Oct 2019 15:13

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.
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 21118
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

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

Messagepar natorp » 24 Oct 2019 15:36

Merci, je vais essayer XRay

par contre, Est-ce que ce bout de code est bien écrit pour toi ?
Code : Tout sélectionner   AgrandirRéduire
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
OOo 4.1.0 sous Win XP (imposé par notre administration)
natorp
Membre hOOnoraire
Membre hOOnoraire
 
Message(s) : 103
Inscrit le : 24 Nov 2009 19:31

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

Messagepar Dude » 24 Oct 2019 22:04

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:
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 21118
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1


Retour vers Macros et API

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 3 invité(s)