OVH Cloud OVH Cloud

Au secours

8 réponses
Avatar
JCM
Bonjour

J'essaie d'utiliser un exemple pour l'integrer dans une=20
appli et je n'arrive pas =E0 :

Supprimer le bouton OK et ses effets
je voudrais =E9galement, apr=E8s avoir saisi du texte dans=20
txtBox Valeur et tap=E9 sur Return, que la valeur s'affiche=20
dans la cellule du MSFlexGrid Grille, et que la txtBox=20
valeur se positionne dans la cellule suivante
Et quand la valeur de la derni=E8re cellule est saisie, je=20
voudrais que le curseur se positionne sur un bouton=20
Enregistre.

Pouvez-vous me dire ce qu'il faut faire, voici mon code :

Option Explicit
Private UsingMouse As Boolean
'---- Initialisations
Private Sub Form_Load()
Valeur.Visible =3D False
Dim i
' Nombre de lignes et colonnes
Grille.Rows =3D 5
Grille.Cols =3D 2
' Libell=E9s des lignes
Grille.Col =3D 0
For i =3D 1 To Grille.Rows - 1
Grille.Row =3D i
Grille.Text =3D i
Next
' Libell=E9s des colonnes
Grille.FixedAlignment(0) =3D vbCenter
Grille.Row =3D 0
For i =3D 1 To Grille.Cols - 1
Grille.FixedAlignment(i) =3D vbCenter
Grille.Col =3D i
Grille.Text =3D i
Next
' Position courante
Grille.Row =3D 1
Grille.Col =3D 1
KeyPreview =3D True
End Sub
'---- Touche de fonction
Private Sub Grille_KeyDown(KeyCode As Integer, Shift As=20
Integer)
If KeyCode =3D vbKeyEscape Then
' Echappement
Valeur.SetFocus
ElseIf KeyCode =3D vbKeyDelete Then
' Suppression
Grille.Clip =3D ""
Valeur.Text =3D Grille.Text
End If
End Sub
'---- Touche du clavier
Private Sub Grille_KeyPress(KeyAscii As Integer)
' Passe le caract=E8re au texte
Valeur.SetFocus
Valeur.Text =3D Chr$(KeyAscii)
Valeur.SelStart =3D 2
Valeur.SelLength =3D 0
End Sub
'---- Changement de position courante
Private Sub Grille_RowColChange()
Valeur.Text =3D Grille.Text
End Sub
' Changement de s=E9lection
Private Sub Grille_SelChange()
End Sub
'---- Bouton OK
'Private Sub OK_Click()
'Grille.Text =3D Valeur.Text
'Grille.SetFocus
'Valeur.Visible =3D False
'End Sub
'---- Colonne de d=E9but de la s=E9lection
Private Function SelStartCol(grd As MSFlexGrid)
If grd.ColSel < grd.Col Then SelStartCol =3D grd.ColSel=20
Else SelStartCol =3D grd.Col
End Function
'---- Colonne de fin de la s=E9lection
Private Function SelEndCol(grd As MSFlexGrid)
If grd.ColSel > grd.Col Then SelEndCol =3D grd.ColSel=20
Else SelEndCol =3D grd.Col
End Function
'---- Ligne de d=E9but de la s=E9lection
Private Function SelStartRow(grd As MSFlexGrid)
If grd.RowSel < grd.Row Then SelStartRow =3D grd.RowSel=20
Else SelStartRow =3D grd.Row
End Function
'---- Ligne de fin de la s=E9lection
Private Function SelEndRow(grd As MSFlexGrid)
If grd.RowSel > grd.Row Then SelEndRow =3D grd.RowSel=20
Else SelEndRow =3D grd.Row
End Function
Private Sub Grille_LeaveCell()
'Se produit imm=E9diatement avant qu'une cellule diff=E9rente=20
ne devienne la cellule active
Valeur.Visible =3D True
Valeur.Text =3D ""
End Sub
Private Sub Grille_EnterCell() ' Assign cell value to the=20
textbox
Valeur.Text =3D Grille.Text
End Sub
Private Sub Valeur_GotFocus()
Grille.Text =3D Valeur.Text
ChangeCellText
End Sub
Private Sub Grille_MouseDown(Button As Integer, Shift As=20
Integer, X As Single, Y As Single)
UsingMouse =3D True
Grille.Text =3D Valeur.Text
ChangeCellText
End Sub
'---- On quitte le champ de saisie
Private Sub valeur_LostFocus()
If UsingMouse =3D True Then
UsingMouse =3D False
Exit Sub
End If
ChangeCellText
End Sub
Public Sub ChangeCellText()
'deplace la textbox dans la cellule active
Valeur.Move Grille.left + Grille.CellLeft, _
Grille.top + Grille.CellTop, _
Grille.CellWidth, Grille.CellHeight
Valeur.SetFocus
Valeur.ZOrder 0
End Sub
Sub valeur_KeyPress(KeyAscii As Integer)
If Valeur.Visible =3D False Then
Valeur.Visible =3D True
End If
If KeyAscii =3D 13 Then
Grille.Text =3D Valeur.Text
Grille.SetFocus
Valeur.Visible =3D False
KeyAscii =3D 0
End If
End Sub

Merci de votre aide
Cordialement
JCM

8 réponses

Avatar
surfeur75
Bonjour,

Pour le bouton "ok", ben, suffit de faire
commandX.visibleúlse,
et comme il sera invisible, personne ne pourra appuyer dessus, donc il
n'aura plus d'effet (syllogisme)...

Pour le reste, je n'utilise pas passer souvent grid, je laisse les soins
aux autres de mieux répondre...
--
@+, bye, Joe.
Pour m'écrire ng75AROBASEnoosPOINTfr
remplace AROBASE et POINT par leur vrai signe
Il l'a fait car il ne savait pas que c'était impossible, alea jacta est!


"JCM" a écrit dans le message de news:
c59e01c3eee3$f12f1f50$
Bonjour

J'essaie d'utiliser un exemple pour l'integrer dans une
appli et je n'arrive pas à :

Supprimer le bouton OK et ses effets
je voudrais également, après avoir saisi du texte dans
txtBox Valeur et tapé sur Return, que la valeur s'affiche
dans la cellule du MSFlexGrid Grille, et que la txtBox
valeur se positionne dans la cellule suivante
Et quand la valeur de la dernière cellule est saisie, je
voudrais que le curseur se positionne sur un bouton
Enregistre.

Pouvez-vous me dire ce qu'il faut faire, voici mon code :

Option Explicit
Private UsingMouse As Boolean
'---- Initialisations
Private Sub Form_Load()
Valeur.Visible = False
Dim i
' Nombre de lignes et colonnes
Grille.Rows = 5
Grille.Cols = 2
' Libellés des lignes
Grille.Col = 0
For i = 1 To Grille.Rows - 1
Grille.Row = i
Grille.Text = i
Next
' Libellés des colonnes
Grille.FixedAlignment(0) = vbCenter
Grille.Row = 0
For i = 1 To Grille.Cols - 1
Grille.FixedAlignment(i) = vbCenter
Grille.Col = i
Grille.Text = i
Next
' Position courante
Grille.Row = 1
Grille.Col = 1
KeyPreview = True
End Sub
'---- Touche de fonction
Private Sub Grille_KeyDown(KeyCode As Integer, Shift As
Integer)
If KeyCode = vbKeyEscape Then
' Echappement
Valeur.SetFocus
ElseIf KeyCode = vbKeyDelete Then
' Suppression
Grille.Clip = ""
Valeur.Text = Grille.Text
End If
End Sub
'---- Touche du clavier
Private Sub Grille_KeyPress(KeyAscii As Integer)
' Passe le caractère au texte
Valeur.SetFocus
Valeur.Text = Chr$(KeyAscii)
Valeur.SelStart = 2
Valeur.SelLength = 0
End Sub
'---- Changement de position courante
Private Sub Grille_RowColChange()
Valeur.Text = Grille.Text
End Sub
' Changement de sélection
Private Sub Grille_SelChange()
End Sub
'---- Bouton OK
'Private Sub OK_Click()
'Grille.Text = Valeur.Text
'Grille.SetFocus
'Valeur.Visible = False
'End Sub
'---- Colonne de début de la sélection
Private Function SelStartCol(grd As MSFlexGrid)
If grd.ColSel < grd.Col Then SelStartCol = grd.ColSel
Else SelStartCol = grd.Col
End Function
'---- Colonne de fin de la sélection
Private Function SelEndCol(grd As MSFlexGrid)
If grd.ColSel > grd.Col Then SelEndCol = grd.ColSel
Else SelEndCol = grd.Col
End Function
'---- Ligne de début de la sélection
Private Function SelStartRow(grd As MSFlexGrid)
If grd.RowSel < grd.Row Then SelStartRow = grd.RowSel
Else SelStartRow = grd.Row
End Function
'---- Ligne de fin de la sélection
Private Function SelEndRow(grd As MSFlexGrid)
If grd.RowSel > grd.Row Then SelEndRow = grd.RowSel
Else SelEndRow = grd.Row
End Function
Private Sub Grille_LeaveCell()
'Se produit immédiatement avant qu'une cellule différente
ne devienne la cellule active
Valeur.Visible = True
Valeur.Text = ""
End Sub
Private Sub Grille_EnterCell() ' Assign cell value to the
textbox
Valeur.Text = Grille.Text
End Sub
Private Sub Valeur_GotFocus()
Grille.Text = Valeur.Text
ChangeCellText
End Sub
Private Sub Grille_MouseDown(Button As Integer, Shift As
Integer, X As Single, Y As Single)
UsingMouse = True
Grille.Text = Valeur.Text
ChangeCellText
End Sub
'---- On quitte le champ de saisie
Private Sub valeur_LostFocus()
If UsingMouse = True Then
UsingMouse = False
Exit Sub
End If
ChangeCellText
End Sub
Public Sub ChangeCellText()
'deplace la textbox dans la cellule active
Valeur.Move Grille.left + Grille.CellLeft, _
Grille.top + Grille.CellTop, _
Grille.CellWidth, Grille.CellHeight
Valeur.SetFocus
Valeur.ZOrder 0
End Sub
Sub valeur_KeyPress(KeyAscii As Integer)
If Valeur.Visible = False Then
Valeur.Visible = True
End If
If KeyAscii = 13 Then
Grille.Text = Valeur.Text
Grille.SetFocus
Valeur.Visible = False
KeyAscii = 0
End If
End Sub

Merci de votre aide
Cordialement
JCM
Avatar
François Picalausa
Bonjour/soir,

Je suppose que ton boutton OK est Default?
Une solution triviale serait de passer Default à False et le comandbutton ne
serait plus activé par Enter.
Sinon, tu peux utiliser le keydown du commandbutton et utiliser une variable
privée en fonction du fait que le textbox ait perdu le focus (LostFocus) et
de sa position actuelle...

Je ne sais pas si tu vois exactement ce que je veux dire.. mais je
repasserai peut-être plus tard avec un bout de code
(beaucoup de projets en cours pour le moment ;-)... plus beaucoup de temps)

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com


"JCM" a écrit dans le message de
news:c59e01c3eee3$f12f1f50$
Supprimer le bouton OK et ses effets
je voudrais également, après avoir saisi du texte dans
txtBox Valeur et tapé sur Return, que la valeur s'affiche
dans la cellule du MSFlexGrid Grille, et que la txtBox
valeur se positionne dans la cellule suivante
Et quand la valeur de la dernière cellule est saisie, je
voudrais que le curseur se positionne sur un bouton
Enregistre.

Pouvez-vous me dire ce qu'il faut faire, voici mon code :


Avatar
JCM
Bonjour François

et merci de me répondre car cela fait plusieurs jours que
je galère sans trouver de réponse.

Non je ne vois pas tres bien, en fait je veux supprimer ce
bouton OK et le remplacer par la touche RETURN

Si je mets OK en visibleúlse cela ne fonctionne plus

Cordialement
JCM
-----Message d'origine-----
Bonjour/soir,

Je suppose que ton boutton OK est Default?
Une solution triviale serait de passer Default à False et


le comandbutton ne
serait plus activé par Enter.
Sinon, tu peux utiliser le keydown du commandbutton et


utiliser une variable
privée en fonction du fait que le textbox ait perdu le


focus (LostFocus) et
de sa position actuelle...

Je ne sais pas si tu vois exactement ce que je veux


dire.. mais je
repasserai peut-être plus tard avec un bout de code
(beaucoup de projets en cours pour le moment ;-)... plus


beaucoup de temps)

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com


"JCM" a écrit dans le


message de
news:c59e01c3eee3$f12f1f50$
Supprimer le bouton OK et ses effets
je voudrais également, après avoir saisi du texte dans
txtBox Valeur et tapé sur Return, que la valeur




s'affiche
dans la cellule du MSFlexGrid Grille, et que la txtBox
valeur se positionne dans la cellule suivante
Et quand la valeur de la dernière cellule est saisie, je
voudrais que le curseur se positionne sur un bouton
Enregistre.

Pouvez-vous me dire ce qu'il faut faire, voici mon




code :


.



Avatar
Eric Blin
Bonjour,

Non je ne vois pas tres bien, en fait je veux supprimer ce
bouton OK et le remplacer par la touche RETURN



Tu interceptes alors l'appuie sur la touche ENTREE sur ta form dans l'event
Keypress/Keydown/KeyUp suivant ce que tu veux faire.


Si je mets OK en visibleúlse cela ne fonctionne plus


Heu u comme cela c'est normal, mais vu comment tu as posé le problème nous
pouvions envisagé que tu avais un bouton OK pour valider la saisie hors tu
sembles en faite vouloir simuler le bouton OK

Bon un peu plus de précision et je pense que ta question aura une soluce...

@+

Eric
Avatar
Zoury
Salut!

>Non je ne vois pas tres bien, en fait je veux supprimer ce
>bouton OK et le remplacer par la touche RETURN

Tu interceptes alors l'appuie sur la touche ENTREE sur ta form dans


l'event
Keypress/Keydown/KeyUp suivant ce que tu veux faire.



Yep. Assure toi toutefois que la propriété KeyPreview du formulaire
concernée soit mise à True.

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous
Avatar
JCM
Bonjour Eric

je veux supprimer le bouton OK, cette procédure est
récupérée dans un exemple c'est pour cela qu'il y a un
bouton OK.

Dans mon appli je veux placer la txtBox sur la première
cellule de mon MSGRID, saisir une valeur dans la TXTBOX,
tapez sur RETURN pour placer la saisie dans la premiere
cellulle et descendre la TXTBX dans la seconde cellule,
ect jusqu'à la dernière

Ensuite (passé la dernière cellule) je veux ajouter dans
mon appli un bouton "enregistre" pour rentrer les données
de toutes les cellules dans ma base de données

est-ce plus clair ?
Cordialement
JCM
-----Message d'origine-----
Bonjour,

Non je ne vois pas tres bien, en fait je veux supprimer




ce
bouton OK et le remplacer par la touche RETURN



Tu interceptes alors l'appuie sur la touche ENTREE sur ta


form dans l'event
Keypress/Keydown/KeyUp suivant ce que tu veux faire.


Si je mets OK en visibleúlse cela ne fonctionne plus


Heu u comme cela c'est normal, mais vu comment tu as posé


le problème nous
pouvions envisagé que tu avais un bouton OK pour valider


la saisie hors tu
sembles en faite vouloir simuler le bouton OK

Bon un peu plus de précision et je pense que ta question


aura une soluce...

@+

Eric


.



Avatar
Zoury
Salut Jean-Claude! :O)

saisir une valeur dans la TXTBOX,
tapez sur RETURN pour



mmm.. juste avec ce bout de phrase, on pourrait déduire que c'est dans
l'événement KeyDown (ou KeyPress) du TextBox qu'il faudra exécuter le code
se trouvant dans le bouton OK.

je présume, qu'il faudrait donc rajouter cet événement dans ton code
'***
Private Sub Valeur_KeyPress(KeyAscii As Integer)
If (KeyAscii = vbKeyReturn) Then
Grille.Text = Valeur.Text
Grille.SetFocus
Valeur.Visible = False
End If
End Sub
'***

quelque chose comme ça.. :O)

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous
Avatar
JCM
Bonjour Zoury

cela ne marche toujours pas,

quand je lance l'appli le MSGRID s'affiche
je click sur la premiere cellule
la textBox se positionne sur la premiere cellule
je saisi du texte
RETURN
la 1ere cellule n'a pas pris la valeur de la textbox
la textbox ne se positionne pas sur la 2eme cellule
je click sur cette 2eme cellule
et BEUG sur

Public Sub ChangeCellText()
'deplace la textbox dans la cellule active
Valeur.Move Grille.left + Grille.CellLeft, _
Grille.top + Grille.CellTop, _
Grille.CellWidth, Grille.CellHeight
Valeur.SetFocus
Valeur.ZOrder 0
End Sub

Sur la ligne Valeur.Setfocus avec ce message : argument ou
appel de procédure incorrect

Dur Dur

JCM
-----Message d'origine-----
Salut Jean-Claude! :O)

saisir une valeur dans la TXTBOX,
tapez sur RETURN pour



mmm.. juste avec ce bout de phrase, on pourrait déduire


que c'est dans
l'événement KeyDown (ou KeyPress) du TextBox qu'il faudra


exécuter le code
se trouvant dans le bouton OK.

je présume, qu'il faudrait donc rajouter cet événement


dans ton code
'***
Private Sub Valeur_KeyPress(KeyAscii As Integer)
If (KeyAscii = vbKeyReturn) Then
Grille.Text = Valeur.Text
Grille.SetFocus
Valeur.Visible = False
End If
End Sub
'***

quelque chose comme ça.. :O)

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 -


http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml -


http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire


profiter à tous


.