[Calc] Passer à la ligne suivante, avec lignes non contiguës

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 !
fonfonsd
Membre OOrganisé
Membre OOrganisé
Messages : 55
Inscription : 04 août 2022 10:00
Localisation : BLOIS

[Calc] Passer à la ligne suivante, avec lignes non contiguës

Message par fonfonsd »

Bonjour

je travail sur un tableau de permanence.
J'ai repris une macro de votre bibiliothèque que j'adapte à mon tableau. Il s'agit de la macro qui permets de passer à la cellule suivante lorsque l'on appuie sur une certaine touche. Dans mon fichier par exemple les touches A, I, P.

Mon problème est que je n'arrive pas à faire que cette macro se fasse sur plusieurs lignes non continue.

Voici la macro utilisée

Code : Tout sélectionner

REM  *****  BASIC  *****
' Macro permettant dans une zone déterminée, d'aller automatiquement 
' à la cellule suivante lors de l'appui de touches précises
' Ici touche P, A, I, (évite d'avoir à appuyer sur la touche Entrée)

global oKeyHandler as object

Sub AddKeyHandler
  'Macro à associer à l'évènement "Activation" de la feuille
        oKeyHandler = CreateUnoListener("KeyHandler_","com.sun.star.awt.XKeyHandler")
        thisComponent.currentController.addKeyHandler(oKeyHandler)
        'Print "Listener On"
End Sub


Sub RemoveKeyHandler
   'Macro à associer à l'évènement "Désactivation" de la feuille
        On Error Resume Next
        thisComponent.currentController.removeKeyHandler(oKeyHandler)
        'Print "Listener Off"
End Sub


Sub KeyHandler_disposing
End Sub


Function KeyHandler_keyPressed(oKeyEvent as new com.sun.star.awt.KeyHandler) As Boolean
        'KeyHandler_keyPressed = false
        cellule=thisComponent.CurrentSelection                                  
        If cellule.supportsService("com.sun.star.table.Cell") Then
                Select Case oKeyEvent.keyChar
                        Case "A","P","I":
                                KeyHandler_keyPressed = false
                        Case Else:
                                KeyHandler_keyPressed = false
                End Select
        Else
                KeyHandler_keyPressed = false                                                                           
        End If
End Function


Function KeyHandler_keyReleased(oKeyEvent as new com.sun.star.awt.KeyHandler) As Boolean
        KeyHandler_keyReleased = False
        maFeuille=thisComponent.CurrentController.ActiveSheet
        zoneEcoute=maFeuille.getCellRangeByName("G8:AQ8").RangeAddress
        LigDeb=zoneEcoute.StartRow
        ColDeb=zoneEcoute.StartColumn
        LigFin=zoneEcoute.EndRow
        ColFin=zoneEcoute.EndColumn
        cellule=thisComponent.CurrentSelection
        'xray oKeyEvent 
        If cellule.supportsService("com.sun.star.table.Cell") Then
                adresseCellule=cellule.CellAddress
                lig=adresseCellule.Row
                col=adresseCellule.Column
                If lig>=LigDeb And lig<=LigFin And col>=ColDeb And col<=ColFin Then     
                        'KeyHandler_keyReleased = False
                        cellule=maFeuille.getCellByPosition(col+1,lig)                                          
                        Select Case oKeyEvent.keyChar
                                Case "A","P","I":
                                        thisComponent.currentController.Select(cellule)
                                Case Else:
                                        thisComponent.currentController.Select(cellule)                         
                                        cellule=maFeuille.getCellByPosition(col,lig)
                                        eval=cellule.String
                                        Select Case eval
                                                Case "A","P","I":
                                                ' N'efface pas la case si elle contient une valeur
                                                Case Else: 
                                                        cellule.String=""
                                                        MsgBox "Erreur" 'Affichage Erreur
                                        End Select
                                        thisComponent.currentController.Select(cellule)
                                End Select
                End If
        End If
End Function
Moi pour mon tableau il faudrait que la macro se fasse sur les plages
G8:AQ8;G9:AQ9;G11:AQ11;G12:AQ12;G14:AQ14;G15:AQ15;G14:AQ17;G18:AQ18;G20:AQ20;G21:AQ21;G23:AQ24;G24:AQ24;G26:AQ26;G27:AQ27;G29:AQ29;G30:AQ30;G32:AQ32;G33:AQ33;G35:AQ35;G36:AQ36;G38:AQ38;G39:AQ39;G41:AQ41;G42:AQ42
j'ai essayé de changer la ligne
zoneEcoute=maFeuille.getCellRangeByName("G8:AQ8")
en mettant mes plages mais cela ne fonctionne pas.

Que dois je faire ?

merci par avance
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Oukcha le 19 août 2022 11:35, modifié 1 fois.
Raison : Titre explicite, merci d'éviter les termes implicites ("macro" en section éponyme)
LibreOffice 6.4.7.2 ( imposée )
ubuntu 20.04
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26195
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] macro sur plusieurs lignes non continues

Message par Dude »

Salut,

De ce que je vois, ta fonction KeyHandler_keyPressed renvoie toujours faux.

Mais comme toujours...
Image
Comment joindre un fichier au format ODF
Penser également à dépersonnaliser le fichier joint.
fonfonsd
Membre OOrganisé
Membre OOrganisé
Messages : 55
Inscription : 04 août 2022 10:00
Localisation : BLOIS

Re: [Calc] macro sur plusieurs lignes non continues

Message par fonfonsd »

Bonjour j'ai mis le fichier, je l'avais oublié ma modification et ta réponse ont du se croiser

Merci
LibreOffice 6.4.7.2 ( imposée )
ubuntu 20.04
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26195
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] macro sur plusieurs lignes non continues

Message par Dude »

fonfonsd a écrit : 19 août 2022 09:28 lorsque l'on appuie sur une certaine touche. [...] par exemple les touches A, I, P
Pourquoi ne pas faire une liste de validité ?
Et verrouiller les cellules qui ne doivent pas être saisies.
Tu éviterais l'usine à gaz que tu es en train de concevoir.
fonfonsd
Membre OOrganisé
Membre OOrganisé
Messages : 55
Inscription : 04 août 2022 10:00
Localisation : BLOIS

Re: [Calc] Passer à la ligne suivante, avec lignes non contiguës

Message par fonfonsd »

Bonjour
désolé de ne pas avoir réagi à votre réponse plus tôt.

Le système de liste je connais bien, mais cela m'oblige à le faire sur chaque cellule de chaque jour? Car en choix il n'y a que 3, c'est surtout la répétition sur les cellules suivantes que je voudrais faciliter pour gagner du temps dans le remplissage
merci
LibreOffice 6.4.7.2 ( imposée )
ubuntu 20.04
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26195
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Passer à la ligne suivante, avec lignes non contiguës

Message par Dude »

fonfonsd a écrit : 22 août 2022 07:03 c'est surtout la répétition sur les cellules suivantes que je voudrais faciliter pour gagner du temps dans le remplissage
Et donc ?
Dude a écrit : 19 août 2022 12:11 verrouiller les cellules qui ne doivent pas être saisies.
fonfonsd
Membre OOrganisé
Membre OOrganisé
Messages : 55
Inscription : 04 août 2022 10:00
Localisation : BLOIS

Re: [Calc] Passer à la ligne suivante, avec lignes non contiguës

Message par fonfonsd »

Bonjour
je m'explique peu être pas trop bien, moi j'ai l'avantage de savoir ce que je veux et dois faire plus facile.
Pour synthétiser toute les cellules ( ou du moins 80 %) vont être remplie par l'un des choix pour les personnes. Car elle es soit A, P ou I peu etre ou semaine sans rien mais cela est rare.

merci de ta prise de temps pour mon aide
stef
LibreOffice 6.4.7.2 ( imposée )
ubuntu 20.04
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26195
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Passer à la ligne suivante, avec lignes non contiguës

Message par Dude »

Ton titre est faux dans ce cas.

Code : Tout sélectionner

cellule=maFeuille.getCellByPosition(col+1,lig)
Avec ça, tu passes à la colonne suivante.

Et sans macro, il suffit d'appuyer sur la touche Tab