Optimisation d'une macro basic pour OOo Calc
Neutthsch
Messages postés
3
Statut
Membre
-
Cedric -
Cedric -
Ami du soir bonsoir,
Alors voilà mon problème:
- J'ai créé une macro en basic qui a pour but de supprimer toute les cellules vides, hormis celle se trouvant entre 2 cellules pleines (En gros je ne supprime que les blocs de cellules vides de plus de 1 cellule).
Alors le truc c'est que ça marche, mais c'est super long. du coup je me demandai si quelqu'un arriverait à optimiser mon code;
Alors voilà mon problème:
- J'ai créé une macro en basic qui a pour but de supprimer toute les cellules vides, hormis celle se trouvant entre 2 cellules pleines (En gros je ne supprime que les blocs de cellules vides de plus de 1 cellule).
Alors le truc c'est que ça marche, mais c'est super long. du coup je me demandai si quelqu'un arriverait à optimiser mon code;
Code :
' --------------------clean-------------------------------------------------- '
sub clean
' --------------------clean-------------------------------------------------- '
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
dim c as long
dim args1(0) as new com.sun.star.beans.PropertyValue
dim args2(1) as new com.sun.star.beans.PropertyValue
dim args3(1) as new com.sun.star.beans.PropertyValue
dim args4(1) as new com.sun.star.beans.PropertyValue
dim args5(1) as new com.sun.star.beans.PropertyValue
dim args6(0) as new com.sun.star.beans.PropertyValue
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
args1(0).Name = "ToPoint"
args1(0).Value = "$A$2"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
for c= 1 to 9000
If Thiscomponent.CurrentSelection.string = "" Then
args2(0).Name = "By"
args2(0).Value = 1
args2(1).Name = "Sel"
args2(1).Value = false
dispatcher.executeDispatch(document, ".uno:GoDown", "", 0, args2())
Else
goto fin
End if
If Thiscomponent.CurrentSelection.string = "" Then
args3(0).Name = "By"
args3(0).Value = 1
args3(1).Name = "Sel"
args3(1).Value = false
dispatcher.executeDispatch(document, ".uno:GoUp", "", 0, args3())
args6(0).Name = "Flags"
args6(0).Value = "U"
dispatcher.executeDispatch(document, ".uno:DeleteCell", "", 0, args6())
goto fin2
Else
args5(0).Name = "By"
args5(0).Value = 2
args5(1).Name = "Sel"
args5(1).Value = false
dispatcher.executeDispatch(document, ".uno:GoUp", "", 0, args5())
End if
If Thiscomponent.CurrentSelection.string = "" Then
dispatcher.executeDispatch(document, ".uno:GoDown", "", 0, args2())
dispatcher.executeDispatch(document, ".uno:DeleteCell", "", 0, args6())
Else
dispatcher.executeDispatch(document, ".uno:GoDown", "", 0, args2())
End if
fin:
dispatcher.executeDispatch(document, ".uno:GoDown", "", 0, args2())
fin2:
next c
End Sub
A voir également:
- Optimisation d'une macro basic pour OOo Calc
- Optimisation pc - Accueil - Utilitaires
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Microsoft 365 basic - Accueil - Microsoft Office
- Optimisation découpe panneau gratuit - Télécharger - Outils professionnels
- Visual basic - Télécharger - Langages
3 réponses
Bonjour,
Pour OpenOffice je ne sais pas (encore), mais sur Excel, une bonne façon d'optimiser les macros est de désactiver les "événements". En début de macro "Application.EnableEvents = False" et en fin "Application.EnableEvents = True". Attention, si les événements sont désactivés, Excel semble figé, donc si la macro plante au milieu, tant pis, il faudra redémarrer Excel.
Pour OpenOffice je ne sais pas (encore), mais sur Excel, une bonne façon d'optimiser les macros est de désactiver les "événements". En début de macro "Application.EnableEvents = False" et en fin "Application.EnableEvents = True". Attention, si les événements sont désactivés, Excel semble figé, donc si la macro plante au milieu, tant pis, il faudra redémarrer Excel.