[Résolu][Calc] Appui Entrée pour démarrer itération suivante

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
Kev74
Membre hOOnoraire
Membre hOOnoraire
Messages : 139
Inscription : 24 avr. 2021 19:09

[Résolu][Calc] Appui Entrée pour démarrer itération suivante

Message par Kev74 »

Bonjour à tous,

je voudrai savoir s'il était possible avec ma macro que je vais mettre ci-dessous ou avec une des vôtres, lorsque j'appuie sur Entrée de démarrer l'itération suivante,

exemple, j'ai trois données (A1,B2,C3), je voudrai savoir avec la boucle For ou Do, si je peux lancer ma macro et appuyer sur Entrée de fait que lorsque j'appuie sur cette touche, je passe de A1 à B2, et si je rappuie sur Entrée de B2 à C3. J'espère avoir été compréhensible.

Code : Tout sélectionner

Sub masquer

Dim oDoc as Object, oFl as object, oZone as object,oZona as object, oCol as object

oDoc = ThisComponent
oFl = oDoc.sheets.getbyIndex(0)

i=-1

Do Until i=6

If i= -1 then 

oZone = oFl.getCellRangeByPosition(4  ,3, 1000 ,1000) 
oCol = oZone.Columns
oCol.IsVisible = False

Wait 15000

i = i+1

Wait 15000

else


oZone = oFl.getCellRangeByPosition(5 + i  ,3, 1000 ,1000) 
oZona = oFl.getCellRangeByPosition(3 ,3, 3+i ,1000) 
oCol = oZone.Columns
oCol1 = oZona.Columns
oCol.IsVisible = False
oCol1.IsVisible = False

Wait 15000

i = i+1

Wait 15000


oDoc = ThisComponent
oFl = oDoc.sheets.getbyIndex(0)
oCol = oFl.Columns
oCol.IsVisible = True


End if 

Loop

End Sub
Donc mon souhait serait d'enlever ces Wait, et de pouvoir appuyer sur Entrée pour passer à l'itération suivante. Et dans ce code, j'ai juste un soucis, mon filtrage pour i=0 ne s'affiche pas lors du lancement de la macro, est-ce normal ? Car tous les autres s'affichent sauf celui-ci.

Merci d'avance, et bonne après-midi.
Dernière modification par Kev74 le 01 mai 2021 11:07, modifié 1 fois.
LibreOffice 7.0.5.2 sous Windows 10
zeguedon
ManitOOu
ManitOOu
Messages : 3031
Inscription : 02 juil. 2014 17:25

Re: [Calc] Appui sur Entrée et démarrage itération suivante

Message par zeguedon »

Bonjour,
Si tu veux intercepter l'appui sur la touche entrée, il faut mettre en place un listener. Dans le fichier joint, il s'active à l'ouverture du fichier et se désactive lorsqu'un certain nombre d'appuis sur la touche entrée a été effectué (4 pour l'exemple) ou lorsque le fichier est fermé. J'ai ajouté un bouton ON/OFF pour le réactiver manuellement si besoin.
J'ai volontairement mis des msgBox un peu partout pour t'aider à comprendre ce qui se passe et à quel moment.
La sub maSubQuiVaBienPourMasquerLesColonnes() est appelée par la fonction _KeyPressed du listener. Elle permet de masquer tes colonnes en utilisant la variable compteur pour itérer en remplacement de ta boucle (je te laisse mettre en place).
Et pour finir, la variable compteur est définie comme Global ce qui permet de conserver la valeur du compteur en mémoire tout le temps de la session.

Code : Tout sélectionner

REM  *****  BASIC  *****
'https://forum.openoffice.org/fr/forum/viewtopic.php?f=8&t=63940#p350200

Global compteur As Integer
Global oCC As Object
const max = 4


Sub RegisterKeyHandler
oCC = ThisComponent.getCurrentController
oKeyHandler = createUnoListener ("DeplacementPerso_", "com.sun.star.awt.XKeyHandler")
oCC.addKeyHandler(oKeyHandler)
End Sub
'----------------------------------------
Sub UnregisterKeyHandler
on error resume next
oCC.removeKeyHandler(oKeyHandler)
End Sub
'----------------------------------------
Function DeplacementPerso_KeyPressed(oEvt) as Boolean
if oEvt.keyCode = 1280 then 'touche Entrée
	if compteur <= max then
		msgBox "Itération " & compteur
		oCel = oCC.ActiveSheet.GetCellByPosition(0+compteur,0+compteur)
		oCC.Select(oCel)
		compteur = compteur+1	
		msgBox "Cellule " & oCel.AbsoluteName & " sélectionnée"
		maSubQuiVaBienPourMasquerLesColonnes() 'ici on appelle la routine qui masque les colonnes
	elseif compteur = max+1 then
		oCC.ActiveSheet.Columns.Isvisible = true
		msgBox "Toutes les colonnes sont visibles"
		UnregisterKeyHandler
		compteur = 0
	end if
end if
DeplacementPerso_KeyPressed = true
End Function
'----------------------------------------
Function DeplacementPerso_KeyReleased(oEvt) As Boolean
DeplacementPerso_KeyReleased = False
End Function

Sub maSubQuiVaBienPourMasquerLesColonnes()
'Ici on masque les colonnes en utilisant la valeur du compteur pour itérer
ozone = oCC.ActiveSheet.GetCellByPosition(7+compteur,1000)
ozone.Columns.Isvisible = false
msgBox "La colonne " & ozone.ColumnDescriptions(0) & " vient d'être masquée"
end sub
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Comment baliser [Résolu] ?
AOO
LibreOffice
Sous Linux
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25173
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Appui sur Entrée et démarrage itération suivante

Message par Dude »

Salut,

Quel est l'intérêt d'intercepter cette touche qui valide le contenu d'une cellule ?
Sachant qu'il est aussi possible d'utiliser la tabulation ou que l'utilisateur peut aussi utiliser la souris (clic sur la coche verte en barre de formule).
Pour moi, le meilleur moyen d'avoir des plantages.
Kev74
Membre hOOnoraire
Membre hOOnoraire
Messages : 139
Inscription : 24 avr. 2021 19:09

Re: [Calc] Appui sur Entrée et démarrage itération suivante

Message par Kev74 »

Merci de votre réponse zeguedon, je vais essayer cela.
Bonjour Dude, je voulais savoir où vous voulez en venir en disant cela, car je veux filtrer ma colonne, or si on appuie sur Tab, on se retrouve à la cellule suivante sans filtrage ? Si y a une meilleure touche que Entrée, dites le moi
Merci d'avance.
LibreOffice 7.0.5.2 sous Windows 10
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25173
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Appui sur Entrée et démarrage itération suivante

Message par Dude »

Kev74 a écrit : je voulais savoir où vous voulez en venir en disant cela,
Je veux dire qu'intercepter une touche peut avoir des effets de bord.
Kev74 a écrit : car je veux filtrer ma colonne
Comme toujours, fournir un document exhaustif permet de comprendre ce qui peut être un problème XY.
Kev74
Membre hOOnoraire
Membre hOOnoraire
Messages : 139
Inscription : 24 avr. 2021 19:09

Re: [Calc] Appui sur Entrée et démarrage itération suivante

Message par Kev74 »

Bonsoir zeguedon, je ne vois pas l'effet du bouton Activer, car à chaque fois que j'appuie sur Entrée, la macro fonctionne toujours ? Merci de votre aide.
LibreOffice 7.0.5.2 sous Windows 10
zeguedon
ManitOOu
ManitOOu
Messages : 3031
Inscription : 02 juil. 2014 17:25

Re: [Calc] Appui sur Entrée et démarrage itération suivante

Message par zeguedon »

Bonsoir,

Effectivement je reproduis et je constate qu'il n'est pas possible (apparemment) d'activer et désactiver le listener à partir de 2 sources différentes. Du coup j'ai supprimé l'activation à l'ouverture du fichier puis la désactivation à la fermeture et laissé la totalité du contrôle au bouton ON/OFF
Je constate aussi que le bouton conserve le focus, du coup lorsqu’on appuie sur la touche entrée, il continue à être activé. Il est préférable de cliquer dans une cellule après avoir cliqué sur le bouton (j'ai contourné en modifiant l'événement du bouton de Exécuter l'action à souris relâchée).
@+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Comment baliser [Résolu] ?
AOO
LibreOffice
Sous Linux
Kev74
Membre hOOnoraire
Membre hOOnoraire
Messages : 139
Inscription : 24 avr. 2021 19:09

Re: [Calc] Appui sur Entrée et démarrage itération suivante

Message par Kev74 »

Bonjour, merci de votre réponse, juste une question, car je connais peu dans ce domaine, lors du sub activer, onOff est défini comme un Boolean, est-ce que cela veut dire que les boutons sur LibreOffice sont conçus avec un choix OUI ou NON ? Merci de votre réponse.
LibreOffice 7.0.5.2 sous Windows 10