[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 !
Grilladou
Membre lOOyal
Membre lOOyal
Messages : 33
Inscription : 07 mars 2021 19:47

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

Message par Grilladou »

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

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

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/comm ... ireColumns) 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 modification par micmac le 13 avr. 2021 23:00, modifié 3 fois.
Raison : [Résolu] remplace [RESOLU] + ajout de la coche verte + [Calc] remplace [CALC]
Grilladou
Membre lOOyal
Membre lOOyal
Messages : 33
Inscription : 07 mars 2021 19:47

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

Message par Grilladou »

Je vais me répondre puisque j'ai trouvé la solution ici https://www.openoffice.org/api/docs/com ... ursor.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

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 (obsolète, mais obligé) - Windows 10 x64
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25181
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

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

Message par Dude »

Salut,

La méthode queryEmptyCells est ton amie :

Code : Tout sélectionner

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
Grilladou
Membre lOOyal
Membre lOOyal
Messages : 33
Inscription : 07 mars 2021 19:47

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

Message par Grilladou »

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 (obsolète, mais obligé) - Windows 10 x64