Mettre le focus dans une cellule d'un Controle de Table

Bonjour,
Je voudrais “poser” le focus sur la cellule “erronée” d’un contrôle de table.
Est-ce seulement possible ?
Dans mon exemple la macro de validation est affectée à l’évènement de formulaire “Avant enregistrement”. Ce n’est peut-être pas le bon endroit … mais j’ai pas trouvé mieux.
Pour tester il suffit de mettre à jour une des deux dates et de valider. Il faudrait que le focus revienne sur une des deux dates tout “simplement” :grinning:
Merci pour votre aide
Valider_Grid_Dates.odb (13.7 KB)
Ah ! j’oubliais je suis repassé à LO 7.1.8.1 Trop de plantages insupportables avec LO 7.2.5

Bonjour @reginacoco

Quel est ton environnement ? Cette version est stable… As-tu testé avec un profil vierge ?

Voir ci-dessous (j’ai gardé ton code de base et apporté uniquement la modification demandée).

function ValiderDates (oEvt As Object)

ValiderDates = true

' a placer evenement formulaire "avant enregistrement"

Dim  oForm As Object
Dim sEch, sRgt, sTypeForm As String

sTypeForm = oEvt.Source.ImplementationName
'pour eviter de passer 2 fois
'If sTypeForm =  "org.openoffice.comp.svx.FormController" Then 
'oForm = oEvt.Source.Model
If sTypeForm = "com.sun.star.comp.forms.ODatabaseForm" then
oForm = oEvt.Source 'le formulaire

sEch = oForm.getString(oForm.findColumn("dateEch"))
sRgt =  oForm.getString(oForm.findColumn("dateReglmt"))

dim oGrid as object, oVue as object
oGrid = oForm.getByName("gridDates")

If sEch >"" Then
	If sRgt>"" And sEch > sRgt Then
		MsgBox "Incohérence dans les dates d'échéance et de règlement", 64, "Contôle de Saisie"
		oVue= ThisComponent.currentController.GetControl(oGrid)
		oVue.setFocus
		oVue.CurrentColumnPosition = 1
		ValiderDates = false
	End If
End If

End if  'sTypeForm
End function

Explications

  • Transformer la procédure (sub) en fonction (function) pour permettre l’annulation de l’événement en cas d’erreur (autrement, même en affichant un message d’erreur l’enregistrement serait validé).
  • Pour valider l’enregistrement la fonction doit renvoyer True et False sinon…
  • On met le focus via le controller pour accéder au contrôle grille et définir la position (1 pour la 2ème colonne).

Cordialement

Super !!! Je ne connaissait pas cette “astuce” pour éviter l’enregistrement. Je ne l’ai trouvée nulle part dans ma documentation (ou ce n’était pas assez clair ou précis)

Ça alors c’est encore super.
Encore Merci,Merci…

Je suis sous Ubuntu 20.04.3 LTS. Peut-être que mon “jre-8u311-linux-x64” n’est pas adapté ?
C’est vrai que j’aime bien utiliser les dernières versions, mais là j’avais trop de problèmes avec LO 7.2.4. Surtout avec l’assistant Report (parfois avec le mode Ebauche de formulaire) et Firebird.
J’aime bien également dans les outils avancés le “correcteur” de l’EDI.
Mon processeur un peu vieux ? Intel® Core™ i5-3340M CPU @ 2.70GHz × 4
Mémoire 8Go

Encore mille fois Merci