[Résolu] [Calc] Dernière cellule non vide d'une colonne

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 non vide d'une colonne

Messagepar Grilladou » 13 Avr 2021 19:44

Bonjour à tous
Le titre complet du post est "Comment connaitre la dernière cellule non vide d'une colonne et non d'une plage de cellule". Je m'explique : j'ai une colonne A avec n cellules remplies, une colonne B avec x cellules remplies et ainsi de suite pour plusieurs colonnes. Je sais déterminer la dernière cellule non vide d'une plage avec un curseur :
Code : Tout sélectionner   AgrandirRéduire
Function DerniereLigne (Feuille As String)
Dim oFeuille As Object, oCurseur As Object

oFeuille = oThisDoc.getSheets.getByName(Feuille)
oCurseur = oFeuille.createCursor 
oCurseur.gotoEndOfUsedArea( False )

DerniereLigne = oCurseur.RangeAddress.EndRow
'MsgBox "Derniere Col : " & oCurseur.RangeAddress.EndColumn & " Dernière Ligne : " & oCurseur.RangeAddress.EndRow
End Function

Ensuite, je pourrai "remonter" la colonne voulue pour déterminer la dernière cellule non vide avec un test sur "com.sun.star.table.CellContentType"
Code : Tout sélectionner   AgrandirRéduire
Select Case oFeuilleSource.getCellByPosition(i, j).Type
  Case com.sun.star.table.CellContentType.VALUE
  Case com.sun.star.table.CellContentType.FORMULA
  Case com.sun.star.table.CellContentType.TEXT
  Case com.sun.star.table.CellContentType.EMPTY
    Case Else
End Select

Techniquement, ça fonctionne (le temps de traitement est négligeable), mais je ne trouve pas ce code très "propre". Je préfèrerai pourvoir limiter la création du curseur à une colonne à non à la feuille entière. J'ai beaucoup cherché sur le net, et je suis revenu bredouille :fou: . J'ai essayé de comprendre si la méthode "expandToEntireColumns" pouvait être la solution (http://www.openoffice.org/api/docs/common/ref/com/sun/star/sheet/XSheetCellCursor.html#expandToEntireColumns) mais je n'arrive à rien de probant.
Auriez vous une idée de génie qui puisse résoudre mon interrogation ? Mille mercis par avance
Dernière édition par micmac le 14 Avr 2021 00:00, édité 3 fois.
Raison: [Résolu] remplace [RESOLU] + ajout de la coche verte + [Calc] remplace [CALC]
Grilladou
Fraîchement OOthentifié
 
Message(s) : 9
Inscrit le : 07 Mars 2021 20:47

[RESOLU] [CALC] Dernière cellule non vide d'une colonne

Messagepar Grilladou » 13 Avr 2021 20:57

Je vais me répondre puisque j'ai trouvé la solution ici https://www.openoffice.org/api/docs/common/ref/com/sun/star/table/XCellCursor.html
Le code donne ceci (faut le peaufiner pour passer la lettre de la colonne, ou son n° en paramètre de la fonction) :
Code : Tout sélectionner   AgrandirRéduire
Function DerniereLigne (Feuille As String)
Dim oFeuille As Object, oCol As Object, oCurseur As Object

oFeuille = oThisDoc.getSheets.getByName(Feuille)
oCol = oFeuille.getCellRangeByName("B:B")
oCurseur =oFeuille.createCursorByRange(oCol)
oCurseur.gotoEnd()

MsgBox " Dernière Ligne : " & oCurseur.RangeAddress.EndRow
End Function
LibreOffice 6.4 - Windows 10 x64
Grilladou
Fraîchement OOthentifié
 
Message(s) : 9
Inscrit le : 07 Mars 2021 20:47

Re: [Résolu] [Calc] Dernière cellule non vide d'une colonne

Messagepar Dude » 14 Avr 2021 07:14

Salut,

La méthode queryEmptyCells est ton amie :
Code : Tout sélectionner   AgrandirRéduire
Sub LigneVideSurColonne(Feuille, LettreColonne)
   sPlage = LettreColonne & "1:" & LettreColonne & "1048576"
   oDoc = ThisComponent()
   oFeuil = oDoc.Sheets.getByName(Feuille)   
   oPlage = oFeuil.getCellrangeByName(sPlage)
   oLibre = oPlage.queryEmptyCells()
   msgbox oLibre.RowDescriptions(0) & " est vide"
End Sub
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 22520
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

Re: [Résolu] [Calc] Dernière cellule non vide d'une colonne

Messagepar Grilladou » 14 Avr 2021 19:43

Un grand grand Merci Dude. Je ne connaissais pas du tout cette méthode. Une nouvelle corde à mon arc, et surtout un code qui sera plus propre. Merci pour le code :bravo:
LibreOffice 6.4 - Windows 10 x64
Grilladou
Fraîchement OOthentifié
 
Message(s) : 9
Inscrit le : 07 Mars 2021 20:47


Retour vers Macros et API

Qui est en ligne ?

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