OVH Cloud OVH Cloud

Problème de focus

12 réponses
Avatar
Fabrice
Bonjour à tous,

Sous Access 2000, j'ai un sous-formulaire au format tabulaire avec 2 champs
et un bouton de commande (pour chaque enregistrement, il y a deux champs,
suivi d'un bouton de commande). Lorsque je clique sur le bouton, il réalise
une action. Ensuite, j'aimerais qu'il se positionne sur le champ1 de
l'enregistrement `en cours. Mais là impossible.

J'ai essayé le code suivant sur la procédure événementielle SurClick du
bouton :

Private Sub btn_Click()
...
Actions à exécuter
...
Me.champ1.setfocus
End sub

Il ne comprend pas le setfocus du champ1. J'ai l'impression qu'il n'arrive
pas à se positionner sur le champ1 de l'enregistrement en cours et qu'il
sélectionne tous les champ1 du sous-formulaire tabulaire.

Est-ce que vous avez déjà rencontré ce type de problème ?

Merci de vos tuyaux

Cordiales salutations
Fabrice

10 réponses

1 2
Avatar
RaphK34
Salut,

Essaye un:

Private Sub btn_Click()
...
Actions à exécuter
...
Me.champ2.setfocus
Me.champ1.setfocus
End sub

voir même peut être en glissant un DoEvents devant ...

A force de bidouille, ceci m'a parfois bien dépanné!

--
@+ Raph.

--------------------------------------------
Merci de répondre sur le NG
Toutes remarques bienvenues !

Pour un contact direct, utiliser:
en enlevant nospam.
--------------------------------------------



"Fabrice" a écrit dans le message de news:
41bf3bd6$
| Bonjour à tous,
|
| Sous Access 2000, j'ai un sous-formulaire au format tabulaire avec 2
champs
| et un bouton de commande (pour chaque enregistrement, il y a deux champs,
| suivi d'un bouton de commande). Lorsque je clique sur le bouton, il
réalise
| une action. Ensuite, j'aimerais qu'il se positionne sur le champ1 de
| l'enregistrement `en cours. Mais là impossible.
|
| J'ai essayé le code suivant sur la procédure événementielle SurClick du
| bouton :
|
| Private Sub btn_Click()
| ...
| Actions à exécuter
| ...
| Me.champ1.setfocus
| End sub
|
| Il ne comprend pas le setfocus du champ1. J'ai l'impression qu'il n'arrive
| pas à se positionner sur le champ1 de l'enregistrement en cours et qu'il
| sélectionne tous les champ1 du sous-formulaire tabulaire.
|
| Est-ce que vous avez déjà rencontré ce type de problème ?
|
| Merci de vos tuyaux
|
| Cordiales salutations
| Fabrice
|
|
|
|
|
Avatar
Fabrice
Merci de ta réponse Raph,

Malheureusement, ça ne fonctionne pas. Si tu as une autre idée...

Encore merci
Cordiales salutations
Fabrice

"RaphK34" a écrit dans le message de
news:%
Salut,

Essaye un:

Private Sub btn_Click()
...
Actions à exécuter
...
Me.champ2.setfocus
Me.champ1.setfocus
End sub

voir même peut être en glissant un DoEvents devant ...

A force de bidouille, ceci m'a parfois bien dépanné!

--
@+ Raph.

--------------------------------------------
Merci de répondre sur le NG
Toutes remarques bienvenues !

Pour un contact direct, utiliser:
en enlevant nospam.
--------------------------------------------



"Fabrice" a écrit dans le message de news:
41bf3bd6$
| Bonjour à tous,
|
| Sous Access 2000, j'ai un sous-formulaire au format tabulaire avec 2
champs
| et un bouton de commande (pour chaque enregistrement, il y a deux
champs,

| suivi d'un bouton de commande). Lorsque je clique sur le bouton, il
réalise
| une action. Ensuite, j'aimerais qu'il se positionne sur le champ1 de
| l'enregistrement `en cours. Mais là impossible.
|
| J'ai essayé le code suivant sur la procédure événementielle SurClick du
| bouton :
|
| Private Sub btn_Click()
| ...
| Actions à exécuter
| ...
| Me.champ1.setfocus
| End sub
|
| Il ne comprend pas le setfocus du champ1. J'ai l'impression qu'il
n'arrive

| pas à se positionner sur le champ1 de l'enregistrement en cours et qu'il
| sélectionne tous les champ1 du sous-formulaire tabulaire.
|
| Est-ce que vous avez déjà rencontré ce type de problème ?
|
| Merci de vos tuyaux
|
| Cordiales salutations
| Fabrice
|
|
|
|
|




Avatar
3stone
Salut,

"Fabrice"

Malheureusement, ça ne fonctionne pas. Si tu as une autre idée...




Quel est le code que tu exécute ?
Fait-tu un requery ?

Le champ1 serait-il verrouillé ?


--
A+
Pierre (3stone) Access MVP
~~~~~~~~~~~~~~~~~~~~~~~
http://users.skynet.be/mpfa
http://users.skynet.be/accesshome

Avatar
Fabrice
Bonjour 3Stone,

Merci de prendre le temps de te pencher sur le problème. Voici le code
exécuté par le bouton (il permet de mettre le chemin d'un fichier
sélectionné dans le champ chemin_file). Il utilise des fonctions situées
dans un autre module (voir ci-dessous). Une fois ce code exécuté, il devrait
se positionner le focus sur le champ description (voir texte en majuscule
ci-dessous) :

Private Sub cmd_select_file_Click()
Dim lngFlags As Long
Dim gfni As adh_accOfficeGetFileNameInfo
Dim cheminFileTxt As String
Dim adhcAccErrSuccess

'Affiche le boîte de dialogue pour sélectionner le fichier
With gfni
.lngFlags = lngFlags
.strFilter = "All files (*.*)"
.lngFilterIndex = CInt("1")
.strFile = ""
.strDlgTitle = "Importation des données"
.strOpenTitle = "Select"
.strFile = ""
.strInitialDir = ""
End With
If adhOfficeGetFileName(gfni, True) = adhcAccErrSuccess Then
cheminFileTxt = Trim(gfni.strFile)
End If
Me.chemin_file = cheminFileTxt

Me.Requery

'ICI LE POSITIONNEMENT DU FOCUS NE FONCTIONNE PAS
Me.description.SetFocus

Me.Refresh
End Sub

'Fonctions situées dans un module utilisées pour la sélection d'un fichier

Option Compare Database

Type adh_accOfficeGetFileNameInfo
hwndOwner As Long
strAppName As String * 255
strDlgTitle As String * 255
strOpenTitle As String * 255
strFile As String * 4096
strInitialDir As String * 255
strFilter As String * 255
lngFilterIndex As Long
lngView As Long
lngFlags As Long
End Type

Declare Function adh_accOfficeGetFileName Lib "msaccess.exe" _
Alias "#56" (gfni As adh_accOfficeGetFileNameInfo, ByVal fOpen As Integer)
As Long

Function adhTrimNull(strVal As String) As String
' Trim the end of a string, stopping at the first
' null character.

' From Access 97 Developer's Handbook
' by Litwin, Getz, and Gilbert (Sybex)
' Copyright 1997. All rights reserved.

Dim intPos As Integer
intPos = InStr(strVal, vbNullChar)
If intPos > 0 Then
adhTrimNull = Left$(strVal, intPos - 1)
Else
adhTrimNull = strVal
End If
End Function

Public Function adhOfficeGetFileName(gfni As adh_accOfficeGetFileNameInfo, _
ByVal fOpen As Integer) As Long

' Use the Office file selector common dialog
' exposed by Access.

' From Access 97 Developer's Handbook
' by Litwin, Getz, and Gilbert (Sybex)
' Copyright 1997. All rights reserved.

Dim lng As Long
With gfni
.strAppName = RTrim$(.strAppName) & vbNullChar
.strDlgTitle = RTrim$(.strDlgTitle) & vbNullChar
.strOpenTitle = RTrim$(.strOpenTitle) & vbNullChar
.strFile = RTrim$(.strFile) & vbNullChar
.strInitialDir = RTrim$(.strInitialDir) & vbNullChar
.strFilter = RTrim$(.strFilter) & vbNullChar
SysCmd acSysCmdClearHelpTopic
lng = adh_accOfficeGetFileName(gfni, fOpen)
.strAppName = RTrim$(adhTrimNull(.strAppName))
.strDlgTitle = RTrim$(adhTrimNull(.strDlgTitle))
.strOpenTitle = RTrim$(adhTrimNull(.strOpenTitle))
.strFile = RTrim$(adhTrimNull(.strFile))
.strInitialDir = RTrim$(adhTrimNull(.strInitialDir))
.strFilter = RTrim$(adhTrimNull(.strFilter))
End With
adhOfficeGetFileName = lng
End Function


Si tu as une idée.
D'avance merci et bonne journée

Cordiales salutations
Fabrice



"3stone" a écrit dans le message de
news:
Salut,

"Fabrice"

Malheureusement, ça ne fonctionne pas. Si tu as une autre idée...




Quel est le code que tu exécute ?
Fait-tu un requery ?

Le champ1 serait-il verrouillé ?


--
A+
Pierre (3stone) Access MVP
~~~~~~~~~~~~~~~~~~~~~~~
http://users.skynet.be/mpfa
http://users.skynet.be/accesshome






Avatar
3stone
Salut,

"Fabrice"
[...]
Me.Requery

'ICI LE POSITIONNEMENT DU FOCUS NE FONCTIONNE PAS
Me.description.SetFocus



Eh ben... c'est comme je disais ;-) tu fait un requery...
et je ne suis pas sûr qu'il soit nécessaire.

Actuellement, le focus se place sur le champ du premier
enregistrement, c'est ca ?

Donc, soit tu supprime le requery (le plus simple si pas indispensable)
soit tu doit te repositionner sur l'enregistrement en cours...
- en mémorisant la clé
- faire un findfirst
- te replacer sur l'enregistrement grâce au .bookmark

et puis ton setfocus


--
A+
Pierre (3stone) Access MVP
~~~~~~~~~~~~~~~~~~~~~~~
http://users.skynet.be/mpfa
http://users.skynet.be/accesshome

Avatar
Fabrice
Merci de ta réponse,

J'avais mis le requery pour tester, mais même sans ça ne marche pas.

En espérant ne pas abuser, est-ce que tu pourrais me donner un exemple sur
la marche à suivre à effectuer :

- en mémorisant la clé
- faire un findfirst
- te replacer sur l'enregistrement grâce au .bookmark

Merci d'avance et bonne soirée
Cordiales salutations
Fabrice


"3stone" a écrit dans le message de
news:%
Salut,

"Fabrice"
[...]
Me.Requery

'ICI LE POSITIONNEMENT DU FOCUS NE FONCTIONNE PAS
Me.description.SetFocus



Eh ben... c'est comme je disais ;-) tu fait un requery...
et je ne suis pas sûr qu'il soit nécessaire.

Actuellement, le focus se place sur le champ du premier
enregistrement, c'est ca ?

Donc, soit tu supprime le requery (le plus simple si pas indispensable)
soit tu doit te repositionner sur l'enregistrement en cours...
- en mémorisant la clé
- faire un findfirst
- te replacer sur l'enregistrement grâce au .bookmark

et puis ton setfocus


--
A+
Pierre (3stone) Access MVP
~~~~~~~~~~~~~~~~~~~~~~~
http://users.skynet.be/mpfa
http://users.skynet.be/accesshome






Avatar
3stone
Salut,

"Fabrice"

J'avais mis le requery pour tester, mais même sans ça ne marche pas.




Je viens de tester et, quoique je fasse, cela fonctionne ;-(

Tu es sur du nom de ton textbox (description) ?


En espérant ne pas abuser, est-ce que tu pourrais me donner un exemple sur
la marche à suivre à effectuer :

- en mémorisant la clé
- faire un findfirst
- te replacer sur l'enregistrement grâce au .bookmark


Moins il y a de code, mieux c'est...
Essaies d'abord sans!


--
A+
Pierre (3stone) Access MVP
~~~~~~~~~~~~~~~~~~~~~~~
http://users.skynet.be/mpfa
http://users.skynet.be/accesshome

Avatar
Fabrice
Oui, oui promis, j'ai testé et retesté et reretesté et rererereteté (bon il
faut que je me calme, car ça fait monter ma tension ces problèmes de focus,
où sont mes calmants :-))

Je ne sais pas si c'est parce que c'est un sous-formulaire ou si ça vient du
code pour définir le chemin, mais pas moyen de mettre le focus sur ce champ
description (et, à ce sujet est-ce que je t'ai parlé de ma hausse de
tension:-))

Ce que j'ai remarqué, c'est que si je mets le focus sur un autre bouton de
mon sous-formulaire, il les sélectionne tous (les boutons de chaque
enregistrement) et non seulement le bouton situé sur l'enregistrement. C'est
assez bizarre, par contre j'ai remarqué que ça fait monter ma tension.

C'est pour ça que si tu peux me fournir un exemple sur :

- en mémorisant la clé
- faire un findfirst
- te replacer sur l'enregistrement grâce au .bookmark

Ma tension et moi-même te seront reconnaissants.

D'avance merci
Fabrice (qui est en train de pêter un câble, mais bon ça je pense que vous
l'avez tous compris :-))



"3stone" a écrit dans le message de
news:
Salut,

"Fabrice"

J'avais mis le requery pour tester, mais même sans ça ne marche pas.




Je viens de tester et, quoique je fasse, cela fonctionne ;-(

Tu es sur du nom de ton textbox (description) ?


En espérant ne pas abuser, est-ce que tu pourrais me donner un exemple
sur


la marche à suivre à effectuer :

- en mémorisant la clé
- faire un findfirst
- te replacer sur l'enregistrement grâce au .bookmark


Moins il y a de code, mieux c'est...
Essaies d'abord sans!


--
A+
Pierre (3stone) Access MVP
~~~~~~~~~~~~~~~~~~~~~~~
http://users.skynet.be/mpfa
http://users.skynet.be/accesshome






Avatar
3stone
Salut ;-)

"Fabrice"
Je ne sais pas si c'est parce que c'est un sous-formulaire


j'ai essayé, ca fonctionne..

ou si ça vient du
code pour définir le chemin, mais pas moyen de mettre le focus sur ce champ
description


j'ai mis des bidouilles, fonctionne tout de même...

Ce que j'ai remarqué, c'est que si je mets le focus sur un autre bouton de
mon sous-formulaire, il les sélectionne tous (les boutons de chaque
enregistrement) et non seulement le bouton situé sur l'enregistrement. C'est
assez bizarre, par contre j'ai remarqué que ça fait monter ma tension.


comprend pas là... :-(


C'est pour ça que si tu peux me fournir un exemple sur :

- en mémorisant la clé
- faire un findfirst
- te replacer sur l'enregistrement grâce au .bookmark


Vu ce que tu dis plus haut, je crois que je ne te rend pas service...
mais bon, voila :


Dim lgPK As Long

lgPK = CléprimaireNumérique

' ici ton code....

Me.Requery ' et ton requery

' tu te repositionne sur l'enregistrement
' sur lequel tu étais avant le requery

With Me.RecordsetClone
.FindFirst "ChampCléPrimaire=" & lgPK
Me.Bookmark = .Bookmark
End With

Me!Description.SetFocus


Hmmm ?


--
A+
Pierre (3stone) Access MVP
~~~~~~~~~~~~~~~~~~~~~~~
http://users.skynet.be/mpfa
http://users.skynet.be/accesshome

Avatar
Fabrice
Bonsoir 3Stone,

Excuse-moi de ne plus t'avoir donné de nouvelles, mais je n'ai pas pu me
remettre dessus ces deux derniers jours.

Tu ne vas pas le croire, mais même ce code ne fonctionne pas. J'ai omis un
point qui est peut-être important, le sous-formulaire est dans un onglet. Le
problème vient peut-être de là.

Bon voilà, je ne sais pas si tu reliras ce message vu mon retard, mais un
grand merci pour ton aide

Bonne soirée
Fabrice


"3stone" a écrit dans le message de
news:%
Salut ;-)

"Fabrice"
Je ne sais pas si c'est parce que c'est un sous-formulaire


j'ai essayé, ca fonctionne..

ou si ça vient du
code pour définir le chemin, mais pas moyen de mettre le focus sur ce
champ


description


j'ai mis des bidouilles, fonctionne tout de même...

Ce que j'ai remarqué, c'est que si je mets le focus sur un autre bouton
de


mon sous-formulaire, il les sélectionne tous (les boutons de chaque
enregistrement) et non seulement le bouton situé sur l'enregistrement.
C'est


assez bizarre, par contre j'ai remarqué que ça fait monter ma tension.


comprend pas là... :-(


C'est pour ça que si tu peux me fournir un exemple sur :

- en mémorisant la clé
- faire un findfirst
- te replacer sur l'enregistrement grâce au .bookmark


Vu ce que tu dis plus haut, je crois que je ne te rend pas service...
mais bon, voila :


Dim lgPK As Long

lgPK = CléprimaireNumérique

' ici ton code....

Me.Requery ' et ton requery

' tu te repositionne sur l'enregistrement
' sur lequel tu étais avant le requery

With Me.RecordsetClone
.FindFirst "ChampCléPrimaire=" & lgPK
Me.Bookmark = .Bookmark
End With

Me!Description.SetFocus


Hmmm ?


--
A+
Pierre (3stone) Access MVP
~~~~~~~~~~~~~~~~~~~~~~~
http://users.skynet.be/mpfa
http://users.skynet.be/accesshome







1 2