[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.
ThierryM
Membre enthOOusiaste
Membre enthOOusiaste
Messages : 437
Inscription : 26 nov. 2006 11:29
Localisation : Les Corbières

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

Message par ThierryM »

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

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
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice Version: 7.6.2 / Linux Mint Mate Edition 21.2 / Pourquoi privilégier les formats de fichiers ouverts ?