Redéfinir les touches F1 F2 F3... dans un Userform (VBA)

Résolu
gribouillex
Messages postés
172
Date d'inscription
lundi 10 octobre 2005
Statut
Membre
Dernière intervention
16 mai 2011
- 11 oct. 2006 à 16:13
gribouillex
Messages postés
172
Date d'inscription
lundi 10 octobre 2005
Statut
Membre
Dernière intervention
16 mai 2011
- 13 oct. 2006 à 17:05
Bonjour,

J'ai une question toute bête : comment affecter des caractères spéciaux aux touches F1, F2, F3 etc... pour que lorsque je me trouve dans n'importe quel Textbox du userform, cela me permette d'insérer ces caractères spéciaux.

Quand je dis caractères spéciaux, c'est par exemple que cela affaiche chr(188) quand j'appuie sur F1...

 Merci pour votre aide !

11 réponses

mortalino
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
12 oct. 2006 à 15:30
Salut, je t'ai adapter mon code, pour t'entrainer, ouvre un nouveau fichier, insère un UserForm, place 10 textbox, place Obligatoirement à chaque TextBox que tu souhaites traiter la propriété Tag (donc de chacun) suivante : kdown
 et suis les instructions :

' *** Il faut appeler cette procédure, à l'ouverture de ton fichier.xls :

Private Sub Workbook_Open()
    Call Attribuer_Controls
End Sub
_________________________________________________________________________

' *** Il faut insérer un Module normal, que tu nommes : basAttrControls
' ensuite colle ce code et modifie le là où je t'ai mis les comm

Dim TextBoxes(1 To 10) As New clsTextBoxes
' remplace 10 par le nombre de TextBox à traiter

Sub Attribuer_Controls()
    '  pour le module de classe (évènement KeyDown)
    Dim ctl         As Control  
    Dim txbCount    As Integer
    txbCount =  0
    
    For Each ctl In UserForm1.Controls ' UserForm1 à remplacer par le bon nom
        If ctl.Tag = "kdown" Then
            txbCount = txbCount + 1
            
            Set TextBoxes(txbCount).MyTextBox = ctl
        End If
    Next ctl
    UserForm1.Show ' UserForm1 à remplacer par le bon nom

End Sub
_________________________________________________________________________

' *** Il faut insérer un Module de Classe, que tu nommes : clsTextBoxes
' ensuite colle ce code et test le ; puis après modifie le selon les besoins

Option Explicit

'Si vous changer le nom de la variable, changer le dans votre procédure
Public WithEvents MyTextBox As MSForms.TextBox

Private Sub MyTextBox_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, _
                                ByVal Shift As Integer)
        
    With UserForm1  ' seul UserForm1 sera ici à remplacer par le bon nom
        MyTextBox.Text = "KeyCode : " & KeyCode & " / Lettre : "
    End With

End Sub

<small>Coloration syntaxique automatique [mortalino] </small>
       

Pour le tester, après avoir fait tout ça, il faut enregistrer les modifications du fichier excel, puis réouvre le afin d'éxecuter la procédure Workbook_Open

@++

<hr width ="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
3
jrivet
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
59
11 oct. 2006 à 16:36
Salut,

Il faut utiliser l'événement KeyDown de l'objet TextBox

Voici un exemple pour deux textbox (TextBox1 et TextBox2) dans un userform.

'Evenement keydown Du TExtBox 1
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) 
    Call TraiteKeyDown(KeyCode, TextBox1) 
End Sub 

'Evenement keydown Du TExtBox 2
Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) 
    Call TraiteKeyDown(KeyCode, TextBox2) 
End Sub 

'Procédure traitant l'appui sur les touche
Private Sub TraiteKeyDown(ByVal KeyCode As MSForms.ReturnInteger, ObjText As MSForms.TextBox) 
    Select Case KeyCode 
        'Si la touche appuye est F1 = > 1/4
        Case vbKeyF1: ObjText.Text = ObjText.Text &  Chr (188) 
        'Si la touche appuye est F2  => 1/2
        Case vbKeyF2: ObjText.Text =  ObjText.Text &  Chr (189) 
        'Si la touche appuye est F3  => 3/4
        Case vbKeyF3: ObjText.Text = ObjText.Text & Chr(190) 
    End Select 
End Sub 

 

<small> Coloration syntaxique automatique [AFCK]</small>
       

Et voila j'espere que cela t'aide

@+,   Ju£i?n
0
gribouillex
Messages postés
172
Date d'inscription
lundi 10 octobre 2005
Statut
Membre
Dernière intervention
16 mai 2011

11 oct. 2006 à 16:53
Merci pour la réponse, le problème c'est que j'ai une multitude de textbox (créés dynamiquement en fonction du nombre de cellules que j'ai dans ma sélection).
Comment affecter un evenement keydown sur toutes ces textbox ?


Voici le code que j'utilise et qui me créé les textbox...

Private Sub UserForm_initialize()
Dim cell As Range
Dim  X, Y As Integer
Dim TxtB As Control
X = 0
Y = 1

For Each cell In Selection
    
    Set TxtB = Me.Controls.Add("forms.Textbox.1")
        With TxtB
        .Left = X * 50
        .Top = 30 + ((Y - 1) * 20)
        .Width = 50
        .Height = 18
        .Text = cell.Value
        End With         
 
    m = m + 1
    ReDim Preserve Tableau(2, m)
    Tableau(0, m - 1) = TxtB.name
    Tableau(1, m - 1) = cell.Address

Set TxtB = Nothing
Next cell

End Sub

En fait c'est pour ça que je demandais l'affectation de caractères au touches F1, F2, F3 indépendament des textbox..
Bref, si vous savez... je suis preneur
0
jrivet
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
59
11 oct. 2006 à 17:15
Re,
En VB6 il existe pour un objet Form la propriété KeyPreview qui, si elle mise a True  Permet d'anvoye les touche aussi a l'événement KeyDown du form mais le problème c'est que je crois qu il n'y a pas cette propriété pour les UserForm Excel

Essaie de trouve l'équivalent.
Sinon je ne vois pas trop comment faire (vu que les groupe de controle n'existe pas non plus...)

@+,   Ju£i?n
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mortalino
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
12 oct. 2006 à 06:34
Salut,

pour un groupe de contrôle en vba, il faut passer par une class, aide toi de ma source, qui reprend l'évènement MouseMove sur pleins de Labels.

A toi de l'adapter !

@++

<hr width="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
0
gribouillex
Messages postés
172
Date d'inscription
lundi 10 octobre 2005
Statut
Membre
Dernière intervention
16 mai 2011

12 oct. 2006 à 12:18
Bonjour Mortalino !!

Alors j'ai essayé ton code, mais je ne suis pas assez doué pour adapter (ni savoir si ça peut s'adapter à mon code)...

j'ai abandonné.

si tu sais comment je peux adapter ça à mon code ci-dessus en VBA, je suis preneur, sinon c'est pas grave, j'ai trouvé une solution alternative, qui est moins bien, mais qui fonctionne quand même.
0
mortalino
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
12 oct. 2006 à 12:50
Je finis le taf à 14 h, dès mon retour chez moi, je vais essayer de faire ça (sans garanti, bcoup de choses à faire)

je te tiens au courant

@++

<hr width="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
0
gribouillex
Messages postés
172
Date d'inscription
lundi 10 octobre 2005
Statut
Membre
Dernière intervention
16 mai 2011

13 oct. 2006 à 10:24
Merci Mortalino !! Tu me retires une fière chandelle du pied. Ca fontionne nickel ! Vraiment je te remercie mille fois !!

Le seul hic, c'est que j'aimerais appeler le userform à un moment précis de mon programme, et lorsque je mets call Attribuer_Controls au milieu de mon module général, au lieu de Workbook_open(), eh bien rien ne se passe....

Auparavant à cet endroit j'avais Userform1.show
0
mortalino
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
13 oct. 2006 à 11:59
Sans garantie :

supprime le Call Attribuer_Controls de WorkBook_Open.

Ensuite, là où avant tu appelais ton UserForm, donc dans ton Module, il faut supprimer NomDeTonUserForm.Show et le remplacer par
Call Attribuer_Controls
(puisque dans la procédure Attribuer_Controls, à la fin, je fais appel au UserForm ; pense juste à modifier le nom du UserForm dans cette procédure)

@++

<hr width="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
0
gribouillex
Messages postés
172
Date d'inscription
lundi 10 octobre 2005
Statut
Membre
Dernière intervention
16 mai 2011

13 oct. 2006 à 15:08
Ok, mais j'avais déjà essayé... et le userform ( appelé bêtement Userform1 au passage) n'apparaît pas...
0
gribouillex
Messages postés
172
Date d'inscription
lundi 10 octobre 2005
Statut
Membre
Dernière intervention
16 mai 2011

13 oct. 2006 à 17:05
Salut,
j'y suis arrivé enfn !

Il suffisait que je mette le call au bon endroit dans mon module, mais ensuite de laisser Userform1.Show

J'ignore pourquoi il ne se lance pas avec Attribuer_Controls tout seul....

Bref c'est pas grave !! ca marche super bien !!

Merci Mortalino !!!!
0