Macro "Masquer les lignes vides" ne fonctionne pas!

Bonjour,

J’utilise Libreoffice 24.2.0.3 sous windows 10

J’ai créé une macro pour masquer les lignes vides quand la cellule en colonne C est vide dans une plage allant de C4 à G903.
Mais malheureusement, elle ne fonctionne pas !
Qu’ai-je oublié, ou mal fait ?
Pouvez-vous m’éclairer ?
En vous remerciant
Bien cordialement

REM  *****  BASIC  *****

Sub MasquerLignesVides

	Dim oSheet As Object
	Dim oCellRange As Object
	Dim i As Integer
	
	oSheet = ThisComponent.Sheets("CAISSE")
	
	oCellRange = oSheet.getCellRangeByName("c4:g903")
	For i = 0 To oCellRange.Rows.Count - 1
		If oCellRange.getCellByPosition(0,i).String = "" Then
		oCellRange.Rows(i).IsVisible = False
		End If
	Next i
		
End sub

Mon équipe fonctionne bien. Assurez-vous que les cellules sont vides.

Si vous utilisez seulement la colonne C comme comparaison, utilisez seulement cette colonne.

oCellRange = oSheet.getCellRangeByName("C4:C903")

Mieux utiliser la méthode queryEmptyCells

	sheet = ThisComponent.Sheets.getByName("CAISSE")
	rango = sheet.getCellRangeByName("C4:C903")
	ranges = rango.queryEmptyCells()
	
	For Each r In ranges
		r.Rows.isVisible = False
	Next 

Bonjour Elmau,

Merci pour votre réactivité, surtout à cette heure-ci !
j’ai utilisé votre méthode queryEmptyCells mais il me met un message d’erreur

Erreur d’exécution BASIC.
‘1’
Une exception s’est produite :
Type: com.sun.star.uno.RuntimeException
Message: Invalid Argument at C:/cygwin64/home/buildslave/source/libo-core/sc/source/ui/vba/vbarange.cxx:2771.

Dois-je garder les Dim avant le queryEmptyCells ?
Mes cellules sont vides mais contiennent une formule, est-ce que ça pourrait bloquer la macro ?
Merci

Re bonjour Elmau,

Je viens de m’apercevoir que la macro fonctionne mais pas sur la feuille “CAISSE” pourtant je pensais l’avoir bien spécifié !!
Qu’est-ce que j’ai loupé ?
Merci

Bonjour,

oSheet = ThisComponent.Sheets(“CAISSE”)

On peut accéder aux feuilles d’un classeur avec les index (0, 1, 2, etc.) ou par des noms. L’objet Sheets fournit la méthode getByName, qui prend en argument le nom de la feuille souhaitée et renvoie l’objet correspondant.

Alors if faut utiliser:

oSheet = ThisComponent.Sheets.getByName(“CAISSE”)

Je pense que ThisComponent.Sheets("CAISSE") est interprété comme ThisComponent.Sheets(0).

Cf. Spreadsheets

Bonjour à tous,

Je vous remercie très très fort !
Tout fonctionne à merveille maintenant !
Et j’ai fait les corrections en comprenant le “pourquoi” de mes erreurs.
Bien cordialement