Bonjour,

Dans mon classeur qui me sert à gérer un cross, j'ai des soucis de temps 
d'exécution. Avec une exécution pas à pas, j'ai identifié 3 points de 
freeze...

il s'agit de :
        oCellule.Value = dTempsCoureur
        oCellule.NumberFormat = nFormatId
        oCelluleHeure.Value = dHeureArrivee

Le code pour formater la cellule peut être enlevé mais ça ne résoud pas mon 
problème complètement...

Je ne comprend pas cette lenteur car il me semble qu'avec OOo version 2.2 et 
antérieure, je n'avais pas ce soucis. J'ai testé sous Linux Debian, Ubuntu et 
Windows avec OOo version 2.4 et le comportement est similaire.

D'où ce problème peut-il venir et est-ce possible de le contourner ?

Ci-dessous, la macro déclenchée par un bouton.


Sub ArriveeCoureur()

        Dim oDocument As Object, oControleur As Object, oFeuille As Object
        Dim oCellule As Object, oCelluleFocus As Object, oCelluleHeure As Object
        Dim dHeureArrivee As Date, dHeureDepart As Date, dTempsCoureur As Date

        oDocument = ThisComponent
        oControleur = oDocument.CurrentController
        oFeuille = oControleur.activeSheet

        ' Enregistrement de l'heure d'arrivée du coureur
        dHeureArrivee = Time()
        dHeureDepart = oFeuille.getCellRangeByName("H4").Value
        dTempsCoureur = dHeureArrivee - dHeureDepart

        ' Vérification de bon lancement du chronomètre... Coloration de la 
cellule du 
chrono
        ' si l'heure d'arrivée est inférieure à l'heure de départ.
        If dHeureArrivee < dHeureDepart Then
                oFeuille.getCellRangeByName("H4").CellBackColor = RGB(255,0,0)
        End If
         

        ' Recherche de la prochaine cellule vide
        Dim x As Integer, y As Integer
        x = 2
        y = 6
        
        While oFeuille.getCellByPosition(x,y).String <> ""
                y = y + 1
        Wend
        
        ' On note le temps du coureur dans la cellule libre     
        oCellule = oFeuille.getCellByPosition(x,y)
        oCellule.Value = dTempsCoureur


        ' Cette cellule sera au format MM'SS
        Dim oLocale As New com.sun.star.lang.Locale
        Dim nTemps As Integer, nFormatId As Integer
        
        oLocale.Language="fr"
        oLocale.Country="FR"
        nFormatId = oDocument.NumberFormats.queryKey("MM'SS''", oLocale, True)

        ' Si le format MM'SS'' n'existe pas, on l'ajoute à la liste des format
        ' personalisés
        If nFormatId = -1 then
          nFormatId = oDocument.NumberFormats.AddNew("MM'SS''", oLocale)
        End     If
        
                ' ATTENTION : prend beaucoup de temps avec OOo > 2.3 !
'       oCellule.NumberFormat = nFormatId
        
        'On note l'heure par sécurité dans une autre colonne
        oCelluleHeure = oFeuille.getCellByPosition(12,y)

' freeze avec OOo > 2.3

        oCelluleHeure.Value = dHeureArrivee
        
        ' Formatage identique de cette cellule
        ' ATTENTION : prend beaucoup de temps avec OOo > 2.3 !
'       oCelluleHeure.NumberFormat = nFormatId
        
        'Ancien code (utilisation des formats standards)
        '==============================================
        'Dim oFormats As Object, nTemps As Integer
        'oFormats = ThisComponent.getNumberFormats()
        'nTemps = oFormats.getStandardFormat( 
com.sun.star.util.NumberFormat.TIME, 
oLocale )
        'oCellule.NumberFormat = nTemps

        ' On déplace la vue du classeur afin de visualiser la ligne du coureur 
qui 
arrive
        oControleur.FirstVisibleRow = y - 5
        
        ' On place le focus sur la cellule du temps
        oCelluleFocus = oFeuille.GetCellByPosition(0, y + 1)
        oControleur.Select(oCelluleFocus)

End Sub
-- 
Michel Grentzinger
        OpenPGP key ID : B2BAFAFA
                Available on http://www.keyserver.net

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Répondre à