[Calc] Déplacement auto cellule suivante lors de la saisie

Vos meilleures macros et portions de code sont publiées dans cette section.
Aucun support sur une question de programmation ici !

Modérateur: Vilains modOOs

Règles du forum
Aucune question dans cette section !
Celle-ci rassemble les meilleures macros et portions de code. Vous pouvez en revanche commenter ou argumenter le code exposé. Vous pouvez même remercier l'auteur (cela fait toujours plaisir) en indiquant par exemple dans quel cadre ou contexte vous en avez eu l'utilité.
Si vous avez à poster quelque chose, faites-le depuis la section Macros et API et demandez à un modérateur de l'y déplacer.

[Calc] Déplacement auto cellule suivante lors de la saisie

Messagepar ThierryM » 18 Sep 2016 03:48

Salut à tous,
Voici du code permettant lors de l'appui sur des touches déterminées (modifiables dans la macro) de rentrer la valeur et de passer à la cellule suivante sans avoir à appuyer sur une autre touche (Entrée, Tab ou Flèche −>).
Si la valeur saisie est incorrecte, une boite de dialogue s'affiche et on revient automatiquement sur la cellule incriminée.
Pour que le "Listener" se déclenche, il faut ajouter des évènements sur la feuille via un clic droit sur son onglet.

Code : Tout sélectionner   AgrandirRéduire
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 0, 1, 9, a ou A (é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","a","0","1","9":
            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("B5:S9").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","a","0","1","9":
               thisComponent.currentController.Select(cellule)
            Case Else:
               thisComponent.currentController.Select(cellule)            
               cellule=maFeuille.getCellByPosition(col,lig)
               eval=cellule.String
               Select Case eval
                  Case "A","a","0","1","9":
                  ' 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


En espérant que ça serve, cordialement,

Thierry
Pièces jointes
Exemple_Saut_Automatique.ods
Fichier exemple de saut automatique après appui sur une touche.
(21.96 Kio) Téléchargé 116 fois
LibreOffice Version: 6.0.7.3 version ubuntu / Ubuntu Trusty 18.04 / Pourquoi privilégier les formats de fichiers ouverts ?
ThierryM
Membre cOOnverti
Membre cOOnverti
 
Message(s) : 383
Inscrit le : 26 Nov 2006 12:29
Localisation : Les Corbières

Retour vers Suprême de code

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 1 invité