Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 31/08/2008, à 12:48

Grojo

lenteur dans OO Calc

J'ai une macro Calc utilisant des conversions d'heures en décimal et des calculs avec des tableaux (dates, heures, etc...).
Avec deux boutons, par exemple, de conversion horaire--> décimal et décimal--> horaire.
Le problème? Plus je clique sur les boutons, plus l'exécution des macros est longue (ça passe de 1 seconde au début à 10 secondes au bout de 4 ou 5 fois pour la même commande).
Pour info: C'est une macro de carnet de vol
Exemple:

REM
REM Le format décimal est récupéré dans la cellule Q2
REM	Le format horaire est récupéré dans la cellule R2
REM Il faut donc ces cellules dans toutes les feuilles!!!
REM

Option Explicit 'on doit déclarer toutes les variables!

'Variables communes au module
'Private 

'------------------------------------------------------------------
Sub HoraireVersDecimal
'convertit les colonnes d'heures en format décimal	

'déclarations
dim monDoc as object, laFeuilleActive as object, maCellule as object
dim i as long, NumFormatDec as long, NumFormatHor as long, DerEnr as long

'initialisations

monDoc=ThisComponent
laFeuilleActive=mondoc.currentController.activesheet

monDoc.lockControllers 'gèle l'affichage

NumFormatDec=LaFeuilleActive.getCellRangeByName("R2").NumberFormat
NumFormatHor=LaFeuilleActive.getCellRangeByName("Q2").NumberFormat

Select Case LaFeuilleActive.name 'selon la feuille active
case "Avion"
	maCellule=LaFeuilleActive.getCellRangeByName("J2")
	if maCellule.NumberFormat=NumFormatDec then goto laSuite 'on sort si déjà en décimal
	DerEnr=DernierEnregistrement(LaFeuilleActive)
		'on convertit les colonnes concernées
		ConvColonneDec(LaFeuilleActive,9,DerEnr)
		ConvColonneDec(LaFeuilleActive,10,DerEnr)
		ConvColonneDec(LaFeuilleActive,12,DerEnr)
case "Planeur"
	maCellule=LaFeuilleActive.getCellRangeByName("I2")
	if maCellule.NumberFormat=NumFormatDec then goto laSuite 'on sort si déjà en décimal
	DerEnr=DernierEnregistrement(LaFeuilleActive)
		'on convertit les colonnes concernées
		ConvColonneDec(LaFeuilleActive,8,DerEnr)
case "Simu"
	maCellule=LaFeuilleActive.getCellRangeByName("E2")
	if maCellule.NumberFormat=NumFormatDec then goto laSuite 'on sort si déjà en décimal
	DerEnr=DernierEnregistrement(LaFeuilleActive)
		'on convertit les colonnes concernées
		ConvColonneDec(LaFeuilleActive,4,DerEnr)
case "Helico"
	maCellule=LaFeuilleActive.getCellRangeByName("H2")
	if maCellule.NumberFormat=NumFormatDec then goto laSuite 'on sort si déjà en décimal
	DerEnr=DernierEnregistrement(LaFeuilleActive)
		'on convertit les colonnes concernées
		ConvColonneDec(LaFeuilleActive,7,DerEnr)
		ConvColonneDec(LaFeuilleActive,8,DerEnr)
		ConvColonneDec(LaFeuilleActive,10,DerEnr)
case "Para"
	maCellule=LaFeuilleActive.getCellRangeByName("H2")
	if maCellule.NumberFormat=NumFormatDec then goto laSuite 'on sort si déjà en décimal
	DerEnr=DernierEnregistrement(LaFeuilleActive)
		'on convertit les colonnes concernées
		ConvColonneDec(LaFeuilleActive,7,DerEnr)
		ConvColonneDec(LaFeuilleActive,8,DerEnr)
end select

laSuite:
monDoc.unlockControllers 'dégèle l'affichage

End Sub

'------------------------------------------------------------------
Sub DecimalVersHoraire
'convertit les colonnes d'heures en format horaire	

'déclarations
dim monDoc as object, laFeuilleActive as object, maCellule as object
dim i as long, NumFormatDec as long, NumFormatHor as long, DerEnr as long
'initialisations

monDoc=ThisComponent
laFeuilleActive=mondoc.currentController.activesheet

monDoc.lockControllers 'gèle l'affichage

NumFormatDec=LaFeuilleActive.getCellRangeByName("R2").NumberFormat
NumFormatHor=LaFeuilleActive.getCellRangeByName("Q2").NumberFormat

Select Case LaFeuilleActive.name 'selon la feuille active
case "Avion"
	maCellule=LaFeuilleActive.getCellRangeByName("J2")
	if maCellule.NumberFormat=NumFormatHor then goto laSuite 'on sort si déjà en horaire
	DerEnr=DernierEnregistrement(LaFeuilleActive)
		'on convertit les colonnes concernées
		ConvColonneHor(LaFeuilleActive,9,DerEnr)
		ConvColonneHor(LaFeuilleActive,10,DerEnr)
		ConvColonneHor(LaFeuilleActive,12,DerEnr)
case "Planeur"
	maCellule=LaFeuilleActive.getCellRangeByName("I2")
	if maCellule.NumberFormat=NumFormatHor then goto laSuite 'on sort si déjà en décimal
	DerEnr=DernierEnregistrement(LaFeuilleActive)
		'on convertit les colonnes concernées
		ConvColonneHor(LaFeuilleActive,8,DerEnr)
case "Simu"
	maCellule=LaFeuilleActive.getCellRangeByName("E2")
	if maCellule.NumberFormat=NumFormatHor then goto laSuite 'on sort si déjà en décimal
	DerEnr=DernierEnregistrement(LaFeuilleActive)
		'on convertit les colonnes concernées
		ConvColonneHor(LaFeuilleActive,4,DerEnr)
case "Helico"
	maCellule=LaFeuilleActive.getCellRangeByName("H2")
	if maCellule.NumberFormat=NumFormatHor then goto laSuite 'on sort si déjà en décimal
	DerEnr=DernierEnregistrement(LaFeuilleActive)
		'on convertit les colonnes concernées
		ConvColonneHor(LaFeuilleActive,7,DerEnr)
		ConvColonneHor(LaFeuilleActive,8,DerEnr)
		ConvColonneHor(LaFeuilleActive,10,DerEnr)
case "Para"
	maCellule=LaFeuilleActive.getCellRangeByName("H2")
	if maCellule.NumberFormat=NumFormatHor then goto laSuite 'on sort si déjà en décimal
	DerEnr=DernierEnregistrement(LaFeuilleActive)
		'on convertit les colonnes concernées
		ConvColonneHor(LaFeuilleActive,7,DerEnr)
		ConvColonneHor(LaFeuilleActive,8,DerEnr)
end select

laSuite:
monDoc.unlockControllers 'dégèle l'affichage

End Sub

'------------------------------------------------------------------
Sub DecimalToHoraire(laFeuille as object, DerEnr as long)
'convertit les colonnes d'heures en format horaire	de la feuille "laFeuille"

'déclarations
dim monDoc as object, maCellule as object
dim i as long, NumFormatDec as long, NumFormatHor as long
'initialisations

monDoc=ThisComponent

'monDoc.lockControllers 'gèle l'affichage

NumFormatDec=laFeuille.getCellRangeByName("R2").NumberFormat
NumFormatHor=laFeuille.getCellRangeByName("Q2").NumberFormat

Select Case laFeuille.name 'selon la feuille active
case "Avion"
	maCellule=laFeuille.getCellRangeByName("J2")
	if maCellule.NumberFormat=NumFormatHor then goto laSuite 'on sort si déjà en horaire
'	DerEnr=DernierEnregistrement(LaFeuilleActive)
		'on convertit les colonnes concernées
		ConvColonneHor(laFeuille,9,DerEnr)
		ConvColonneHor(laFeuille,10,DerEnr)
		ConvColonneHor(laFeuille,12,DerEnr)
case "Planeur"
	maCellule=laFeuille.getCellRangeByName("I2")
	if maCellule.NumberFormat=NumFormatHor then goto laSuite 'on sort si déjà en décimal
'	DerEnr=DernierEnregistrement(LaFeuilleActive)
		'on convertit les colonnes concernées
		ConvColonneHor(laFeuille,8,DerEnr)
case "Simu"
	maCellule=laFeuille.getCellRangeByName("E2")
	if maCellule.NumberFormat=NumFormatHor then goto laSuite 'on sort si déjà en décimal
'	DerEnr=DernierEnregistrement(LaFeuilleActive)
		'on convertit les colonnes concernées
		ConvColonneHor(laFeuille,4,DerEnr)
case "Helico"
	maCellule=laFeuille.getCellRangeByName("H2")
	if maCellule.NumberFormat=NumFormatHor then goto laSuite 'on sort si déjà en décimal
'	DerEnr=DernierEnregistrement(LaFeuilleActive)
		'on convertit les colonnes concernées
		ConvColonneHor(laFeuille,7,DerEnr)
		ConvColonneHor(laFeuille,8,DerEnr)
		ConvColonneHor(laFeuille,10,DerEnr)
case "Para"
	maCellule=laFeuille.getCellRangeByName("H2")
	if maCellule.NumberFormat=NumFormatHor then goto laSuite 'on sort si déjà en décimal
'	DerEnr=DernierEnregistrement(LaFeuilleActive)
		'on convertit les colonnes concernées
		ConvColonneHor(laFeuille,7,DerEnr)
		ConvColonneHor(laFeuille,8,DerEnr)
end select

laSuite:
'monDoc.unlockControllers 'dégèle l'affichage

End Sub

'------------------------------------------------------------------
Function DernierEnregistrement(LaFeuilleActive as Object) as long
'donne le rang du dernier enregistrement où il y a une date

dim n as long
dim OnContinue as Boolean
dim maCellule as object

'initialisations
n=1
OnContinue=True

While OnContinue 'tant que la cellule des dates n'est pas vide
	macellule=LaFeuilleActive.getCellByPosition(0,n)
	if macellule.type=com.sun.star.table.CellContentType.EMPTY then OnContinue=false
	n=n+1
Wend
DernierEnregistrement=n-2

end Function

'------------------------------------------------------------------
Sub ConvColonneDec(LaFeuilleActive as object, NumColonne as Long, DerEnr as long)
'convertit la colonne NumColonne en format décimal

dim maCellule as object, maZone as Object
dim i as long, NumFormat as long

NumFormat=LaFeuilleActive.getCellRangeByName("R2").NumberFormat

maZone=LaFeuilleActive.getCellRangeByPosition(NumColonne,1,NumColonne,DerEnr)
maZone.NumberFormat=NumFormat

For i=1 to DerEnr
	maCellule=LaFeuilleActive.getCellByPosition(NumColonne,i)
	maCellule.value=maCellule.value*24	
next i

'Ecrit la valeur de l'index format Decimal
LaFeuilleActive.getCellRangeByName("R3").value=NumFormat

End Sub

'------------------------------------------------------------------
Sub ConvColonneHor(LaFeuilleActive as object, NumColonne as Long, DerEnr as long)
'convertit la colonne NumColonne en format horaire

dim maCellule as object, maZone as Object
dim i as long, NumFormat as long

NumFormat=LaFeuilleActive.getCellRangeByName("Q2").NumberFormat

maZone=LaFeuilleActive.getCellRangeByPosition(NumColonne,1,NumColonne,DerEnr)
maZone.NumberFormat=NumFormat

For i=1 to DerEnr
	maCellule=LaFeuilleActive.getCellByPosition(NumColonne,i)
	maCellule.value=maCellule.value/24	
next i

'Ecrit la valeur de l'index format Horaire
LaFeuilleActive.getCellRangeByName("Q3").value=NumFormat

End Sub

'------------------------------------------------------------------

les valeurs des colonnes corrspondes à des heures de vols...

Hors ligne

#2 Le 31/08/2008, à 14:16

picolavela

Re : lenteur dans OO Calc

Bonjour,
Ayant installé ubuntu 8.04 Hardy Heron et disposant d'un clavier Belge 105 touches marque Trust, je n'arrive pas à faire fonctionner la touche Euro dans le clavier numérique.
Bien à vous et merci d'une réponse.

Hors ligne

#3 Le 01/09/2008, à 20:18

Grojo

Re : lenteur dans OO Calc

Je ne vois pas bien la logique de la réponse précédente par rapport au sujet...

Hors ligne

#4 Le 01/09/2008, à 23:50

thx_84

Re : lenteur dans OO Calc

t'inquiète il est complètement hors sujet...


ben, comme on fait pour signer sur l'ordi??? mince, je viens de ficher en l'air l'écran avec mon stylo...

Hors ligne