CALC Problème de MACRO

Bonjour à tous,

J’ai un problème avec une macro pour CALC. L’objectif de la macro c’est de retirer la protection de la feuille > supprimer une plage de cellule > remettre la protection de la feuille (le fichier sera transmis à des tiers qui n’auront pas accès au MdP).
Quand je lance la macro avec le “Pas à Pas entrant” cela fonctionne parfaitement, par contre quand j’exécute ou lance le “Pas à Pas sortant”, il m’indique “action impossible cellules protégées”.
Le pire c’est que la macro d’insertion de plage sur le même modèle fonctionne …

La macro :


sub SuppAutoProtection

Dim oDoc as Object
Dim oSheet as Object
Dim oSheets as object
Dim oPlage as Object

oDoc = ThisComponent.CurrentController

oSheets = ThisComponent.getSheets()

REM***désigne la feuille "xxx"*** 
oSheet = ThisComponent.Sheets.getByName("2_Routier tkm")

REM***lève la protection de la feuille*** 
oSheet.unprotect("AResp2024")

REM***désigne le tableau "xxx"*** 
Set oPlage = oSheet.getCellRangeByName ("Tableau_prestations")

rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$C$21"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ToPoint"
args2(0).Value = "$C$21:$M$21"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2())

rem ----------------------------------------------------------------------
rem dispatcher.executeDispatch(document, ".uno:DeleteCell", "", 0, Array())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:DeleteCell", "", 0, Array())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Save", "", 0, Array())

Msgbox "on referme"

REM***lève la protection de la feuille*** 
oSheet.protect("AResp2024")

end sub
type or paste code here

Blockquote

(j’ai une version où j’ajoute l’étape modifiant le format de la cellule en retirant la protection de la cellule avant la suppression, mais cela ne change pas le problème).

Merci d’avance pour le coup de main

probablement un delai d’exécution.
→ ajouter Instruction Wait

sinon, essayer par l’API plutot que par des commndes dispatch → par ex. Macro to unprotect a range

Merci beaucoup pour la commande.

Ca me sera probablement utile.

Pour info, en cherchant autre chose sur le wiki macro, j’ai trouvé par hasard ma solution :

Dim doc As Object
Dim sheet As Object
Dim group As Object

doc = ThisComponent
    sheet = doc.CurrentController.ActiveSheet
    
    range1 = sheet.getCellRangeByName ("Tableau_prestations")
    range2 = sheet.getCellRangeByName ("C21:M21")
    
	REM***lève la protection de la feuille*** 

	Sheet.unprotect("AResp2024")
    
    REM***delete la plage****
   sheet.removeRange(range2.RangeAddress, com.sun.star.sheet.CellDeleteMode.UP)
    
    REM***active la protection de la feuille*** 
	Sheet.protect("AResp2024")