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”
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