IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenOffice & LibreOffice Discussion :

Application.ScreenUpdating est sans effet


Sujet :

OpenOffice & LibreOffice

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2016
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2016
    Messages : 51
    Points : 33
    Points
    33
    Par défaut Application.ScreenUpdating est sans effet
    Bonjour,
    Je dispose d'un classeur Excel qui doit pouvoir être également exploité sous OO calc.

    Un macro exécute des opérations sur différentes feuilles et dans Excel la cde vba Application.ScreenUpdating =False évite l'affichage successif de ces feuilles.

    Cette macro exécutée sur OOcalc ouvre successivement toutes feuilles...
    Sous OOC la commande en question est-elle autre ou doit-elle être complétée ?
    Merci de vos éclaircissements
    Cordialement
    JL
    Ps ce n'est pas d'OpenO, mais de LibreOffice dont je parle, d'ailleurs, si s'était le cas il ya t-il la aussi une différence ?

  2. #2
    Membre averti Avatar de Mobydick_62
    Homme Profil pro
    Retraité
    Inscrit en
    Septembre 2009
    Messages
    260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2009
    Messages : 260
    Points : 386
    Points
    386
    Par défaut
    Bonjour,

    évite l'affichage successif de ces feuilles.
    Si je comprend bien tu veux figer l'écran pour empêcher l'affichage successif des feuilles ?

    Dans ce cas:

    - Avant d'effectuer le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisComponent.lockControllers
    - En fin de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisComponent.unlockControllers
    Cordialement
    Libre Office Version: 7.4.3.2 (x64)
    Windows 10

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2016
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2016
    Messages : 51
    Points : 33
    Points
    33
    Par défaut
    Bonjour et merci de votre réponse.
    C'est bien cela, mais votre propostion ne semble pas fonctionner dans mon cas.
    JL

  4. #4
    Membre averti Avatar de Amélie Ladoque
    Inscrit en
    Novembre 2004
    Messages
    249
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 249
    Points : 308
    Points
    308
    Par défaut
    Bonjour,

    Sûrement parce que :
    Je dispose d'un classeur Excel
    Les langages Basic sont incompatibles entre eux.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2016
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2016
    Messages : 51
    Points : 33
    Points
    33
    Par défaut
    Oui bien sûre, et alors ?

  6. #6
    Membre averti Avatar de Amélie Ladoque
    Inscrit en
    Novembre 2004
    Messages
    249
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 249
    Points : 308
    Points
    308
    Par défaut
    Et alors ?
    Qu'est ce que vous ne comprenez pas dans "incompatible" ?

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2016
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2016
    Messages : 51
    Points : 33
    Points
    33
    Par défaut
    Bonjour,
    Ma question me semblait claire dans la mesure ou je demandai, compte tenu de l’incompatibilité évidente, et puisque ça ne marchait pas, qu'elle était la syntaxe de la commande donnant un résultat équivalent en basic LibreOffice.
    Parceque pour le reste, beaucoup d'autres fonctions et formules fonctionnent parfaitement.
    Salutations
    JL

  8. #8
    Membre averti Avatar de Amélie Ladoque
    Inscrit en
    Novembre 2004
    Messages
    249
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 249
    Points : 308
    Points
    308
    Par défaut
    Il y a une pseudo compatibilité pour des fonctions basiques du Basic.
    Pour ce qui touche à l'interface, il est évident que cela s'arrête.
    Donc, il faut faire un ODS et un XLSM distincts.

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2016
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2016
    Messages : 51
    Points : 33
    Points
    33
    Par défaut
    Merci,
    Je ne manquerai pas, lorsque j'aurai besoin d'une réponse claire et précise de revenir vers vous.
    JL

  10. #10
    Membre averti Avatar de Mobydick_62
    Homme Profil pro
    Retraité
    Inscrit en
    Septembre 2009
    Messages
    260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2009
    Messages : 260
    Points : 386
    Points
    386
    Par défaut
    Bonjour,
    N'ayant pas ton code sous les yeux ou mieux un fichier exemple il est difficile d’appréhender ton problème.
    Je suppose que ton code est en VBA et qu'en début de code tu à écrit :

    ou
    A la base :
    Le langage Basic entre les deux logiciels est incompatible.
    Il existe depuis la 2.4.0, un interpréteur de VBA pour MS-Excel mais il est loin d'être parfait

    Le problème et que l'interpréteur de macro venant MS-Excel est tout de même limité. Il n’interprète pas tout.
    Et le fait de changer le code VBA qui ne fonctionne pas par du code oOoffice comme par exemple :
    -Application.ScreenUpdating =False par ThisComponent.lockControllers ne fonctionnera pas forcément car le fait d'utiliser l'interpréteur VBA induit des changements dans le comportement des instructions du Basic OpenOffice dans le module Calc.

    Pour faire court : un mix entre du VBA et du Basic oOo peut fonctionner, ou pas complètement.....

    Cordialement
    Libre Office Version: 7.4.3.2 (x64)
    Windows 10

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2016
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2016
    Messages : 51
    Points : 33
    Points
    33
    Par défaut
    Bonjour, et merci de reprendre le dialogue

    Je joins cette fois le fichier.
    Il s'agit de la macro "Ventilation" dans le module1

    ATDM-Inscriptions.ods


    Cette macro fonctionne parfaitement sur LoCalc, sauf en ce qui concerne la commande qui nous occupe. (<====)

    La commande "ThisComponent.lockControllers" que l'on m'a suggéré plus haut ne fonctionne pas et j'ai du mal à croire qu'elle constitue un "mixte" suceptible de perturber le reste. (elle est peut-être incomplète ?)

    Et pour finir, j'utilise bien l'interpréteur Basic... et non VBA. Interpréteur qui en l'occurence interprète bien les cdes VBA et pas les cdes Basic ! ...


    Quant aux instructions "Option compatible" et "Option VBASupport 1", non bien sûre je ne les aient pas mises puisque comme vous l'avez bien compris je découvre le basic LoCalc et que l'on ne m'en pas parlé. Quel sont leurs vocations, faut-il utiliser l'une ou l'autre ou encore l'une et l'autre ?

    A vous lire
    Cordialement
    JL

  12. #12
    Membre averti Avatar de Mobydick_62
    Homme Profil pro
    Retraité
    Inscrit en
    Septembre 2009
    Messages
    260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2009
    Messages : 260
    Points : 386
    Points
    386
    Par défaut Application.ScreenUpdating est sans effet
    Bonjour,

    Effectivement l'appel à ThisComponent.lockControllers n'a aucun effet.

    J'ai créé mon propre classeur LibreOffice et simulé la même chose que toi : sélection de zone dans les feuilles et traitement. Et là aussi LockControllers n'a aucun effet. Je pense que cette fonction ne soit pas complètement efficace. J'avais d'ailleurs remarqué ce problème dans le passé pour mes propres macros (notamment sur la sélection de zone).
    D'ailleurs ce problème est régulièrement évoquer sur plusieurs forums.

    Un moyen de contourner ce problème: avant de traiter toutes les feuilles , il suffit de les cacher (sauf la première) et de les ré-afficher en fin de traitement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    '______________________________________________________________________________
    Sub Ventilation
    Dim oFeuille As Object 
    Dim i As Integer 
     
    'Je cache toutes les feuilles avant traitement sauf la première
    For i = 1 to ThisComponent.Sheets.Count-1
    ThisComponent.Sheets(i).IsVisible = False
    Next i
     
    'Traitement 
    oFeuille = ThisComponent.getSheets.getByName("Feuille2")
    Macro1(oFeuille)
     
    oFeuille = ThisComponent.getSheets.getByName("Feuille3")
    Macro1(oFeuille)
     
    oFeuille = ThisComponent.getSheets.getByName("Feuille4")
    Macro1(oFeuille)
     
    'J'affiche toutes les feuilles après traitement
    For i = 1 to ThisComponent.Sheets.Count-1
    ThisComponent.Sheets(i).IsVisible = true
    Next i
     
    End Sub
     
    '_________________________________________________________________________________
    'Simulation de traitement
    Sub Macro1(oFeuille As Object)
    ThisComponent.CurrentController.Select( oFeuille.getCellRangeByName("A5:F5") )
    End Sub
    J'ai essayé sur ton fichier et cela fonctionne. Juste un petit problème de clignotement chez moi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 1 to Mydoc.Sheets.Count-1
    Mydoc.Sheets(i).IsVisible = False
    Next i
    Et à la fin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 1 to Mydoc.Sheets.Count-1
    Mydoc.Sheets(i).IsVisible = True
    Next i
    Cordialement
    Libre Office Version: 7.4.3.2 (x64)
    Windows 10

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2016
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2016
    Messages : 51
    Points : 33
    Points
    33
    Par défaut
    Merci de cette réponse précise et documentée.
    Je ne manquerai pas de la tester dès mon retour....
    A bientôt donc
    Cordialement
    JL

  14. #14
    Membre averti Avatar de Mobydick_62
    Homme Profil pro
    Retraité
    Inscrit en
    Septembre 2009
    Messages
    260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2009
    Messages : 260
    Points : 386
    Points
    386
    Par défaut Application.ScreenUpdating est sans effet
    Bonjour,
    Toujours pour améliorer car malgré le masquage des feuilles on voit tout de même le clignotements des sélections sur les entêtes de ligne et colonnes.
    Donc pour éviter cet effet de clignotement désagréable il suffit de cacher la barre "entête" et de figer la fenêtre active ce qui donne au total :
    - Avant traitement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    'Appel de la routine pour cacher la barre entêtes (lignes et colonnes)
    AfficheCacheBarreEntete(False)
    'Je bloque la fenêtre courante (feuille "Enregistrements")
    thisComponent.CurrentController.Frame.ContainerWindow.Enable = False
    'Je cache toutes les feuilles avant traitement sauf la première(Enregistrements)
    For i = 1 to Mydoc.Sheets.Count-1
    Mydoc.Sheets(i).IsVisible = False
    Next i
    - Fin de traitement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    'Je ré-affiche toutes les feuilles après traitement
    For i = 1 to Mydoc.Sheets.Count-1
    Mydoc.Sheets(i).IsVisible = True
    Next i
    'Je débloque la fenêtre courante (feuille "Enregistrements")
    thisComponent.CurrentController.Frame.ContainerWindow.Enable = True
    'Appel de la routine pour ré-afficher la barre entêtes (lignes et colonnes)
    AfficheCacheBarreEntete(true)
    Et la routine qui va bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub AfficheCacheBarreEntete(bAffiche As Boolean)
    Dim oDispatcher, oFrame as object
    Dim args(0) as new com.sun.star.beans.PropertyValue
    oDispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
    oFrame = thisComponent.CurrentController.Frame
    args(0).Name = "ViewRowColumnHeaders" 'Entete de lignes et de colonnes
    args(0).Value = bAffiche
    oDispatcher.executeDispatch(oFrame, ".uno:ViewRowColumnHeaders",    "", 0, args())
    End sub
    Cordialement
    Libre Office Version: 7.4.3.2 (x64)
    Windows 10

  15. #15
    Membre averti Avatar de Amélie Ladoque
    Inscrit en
    Novembre 2004
    Messages
    249
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 249
    Points : 308
    Points
    308
    Par défaut
    Tout ce code ne marchera pas sous MS-Excel

  16. #16
    Membre averti Avatar de Mobydick_62
    Homme Profil pro
    Retraité
    Inscrit en
    Septembre 2009
    Messages
    260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2009
    Messages : 260
    Points : 386
    Points
    386
    Par défaut Application.ScreenUpdating est sans effet
    Effectivement

    Tout ce code ne marchera pas sous MS-Excel
    Je n'avais pas compris que cette macro devait fonctionner sous Libre Office et MS Excel et vice versa.
    Pour ce qui est du masquage de la barre outil c'est sur que çà va coincer.

    Pour ce qui est du masquage des feuilles, cela pourra être facilement transposer en VBA et compris par Libre Office (normalement).
    Je ne programme plus en VBA depuis 2004, année où j'ai quitté le monde Microsoft pour la suite Open et Libre Office.
    Mais normalement cela devrait le faire. Je vais y regarder.

    Cordialement

    Après recherche :

    Code VBA à appliquer et compris par Libre Office :

    - Masquage feuilles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 1 to Mydoc.Sheets.Count-1
    Sheets(i).Visible = 2
    Next i
    - Affichage des feuilles:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 1 to Mydoc.Sheets.Count-1
    Sheets(i).Visible = -1
    Next i
    Libre Office Version: 7.4.3.2 (x64)
    Windows 10

Discussions similaires

  1. Mac OSX. La méthode WaitFor sur un Process est sans effet.
    Par GérardMartinelli dans le forum Concurrence et multi-thread
    Réponses: 2
    Dernier message: 05/01/2021, 15h45
  2. Shell.Application + open restant sans effet
    Par olra72 dans le forum Excel
    Réponses: 2
    Dernier message: 18/03/2020, 16h58
  3. Application d'un height 100% sur une image sans effet
    Par Earthwormjim dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 26/05/2009, 02h28
  4. La contrainte CHECK est sans effet
    Par DJERDJAR YACINE dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 02/07/2007, 18h56
  5. Réponses: 6
    Dernier message: 05/04/2007, 10h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo