Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Afficher la valeur d'une cellule (contenant une formule) dans un Userform

10 réponses
Avatar
sfrq
Bonjour,

J'en suis à mes premiers pas dans VBA. Actuellement, l'affichage du contenu des cellules dans mon formulaire fonctionne très bien sauf si une cellule contient une formule.

Voici un petit extrait de mon code:

LabelNom = Sheets(Feuille).Range("E" & Ligne)
LabelCR = Sheets(Feuille).Range("F" & Ligne)
TxtCCH = Sheets(Feuille).Range("G" & Ligne)

La variable Ligne a été définie et contient le chiffre correspondant à la ligne où le code recherché a été trouvé. Jusque là, pas de problème tout s'affiche #1. Par contre, comme je le disais, si la cellule à "G" & Ligne contient une formule, ça plante. J'ai donc essayé ce qui suit:

LabelNom = Sheets(Feuille).Range("E" & Ligne).value
LabelCR = Sheets(Feuille).Range("F" & Ligne).value
TxtCCH = Sheets(Feuille).Range("G" & Ligne).value

et ça plante quand même. J'ai aussi fait ce qui suit:

LabelNom.value = Sheets(Feuille).Range("E" & Ligne).value
LabelCR.value = Sheets(Feuille).Range("F" & Ligne).value
TxtCCH.value = Sheets(Feuille).Range("G" & Ligne).value

toujour sans succès.

Pouvez-vous m'aider?

Merci
Syl

10 réponses

Avatar
MichD
Bonjour,

| TxtCCH = Sheets(Feuille).Range("G" & Ligne).value

Cette ligne de code ne devrait pas générer une erreur SAUF si le
contenu que retourne la formule est une erreur de type :
#DIV/0!, #NOM!, #VALEUR!, #NOMBRE!,

Est-ce le cas ? As-tu vérifié ce que contenait la cellule en question ?

Quel est le message d'erreur ?


MichD
------------------------------------------
"sfrq" a écrit dans le message de groupe de discussion :

Bonjour,

J'en suis à mes premiers pas dans VBA. Actuellement, l'affichage du contenu des
cellules dans mon formulaire fonctionne très bien sauf si une cellule contient
une formule.

Voici un petit extrait de mon code:

LabelNom = Sheets(Feuille).Range("E" & Ligne)
LabelCR = Sheets(Feuille).Range("F" & Ligne)
TxtCCH = Sheets(Feuille).Range("G" & Ligne)

La variable Ligne a été définie et contient le chiffre correspondant à la ligne
où le code recherché a été trouvé. Jusque là, pas de problème tout s'affiche #1.
Par contre, comme je le disais, si la cellule à "G" & Ligne contient une
formule, ça plante. J'ai donc essayé ce qui suit:

LabelNom = Sheets(Feuille).Range("E" & Ligne).value
LabelCR = Sheets(Feuille).Range("F" & Ligne).value
TxtCCH = Sheets(Feuille).Range("G" & Ligne).value

et ça plante quand même. J'ai aussi fait ce qui suit:

LabelNom.value = Sheets(Feuille).Range("E" & Ligne).value
LabelCR.value = Sheets(Feuille).Range("F" & Ligne).value
TxtCCH.value = Sheets(Feuille).Range("G" & Ligne).value

toujour sans succès.

Pouvez-vous m'aider?

Merci
Syl
Avatar
sfrq
MichD a écrit le 14/11/2011 à 19h20 :
Bonjour,

| TxtCCH = Sheets(Feuille).Range("G" & Ligne).value

Cette ligne de code ne devrait pas générer une erreur SAUF si le
contenu que retourne la formule est une erreur de type :
#DIV/0!, #NOM!, #VALEUR!, #NOMBRE!,

Est-ce le cas ? As-tu vérifié ce que contenait la cellule en
question ?

Quel est le message d'erreur ?


MichD
------------------------------------------
"sfrq" a écrit dans le message de groupe de discussion :


Bonjour,

J'en suis à mes premiers pas dans VBA. Actuellement, l'affichage du
contenu des
cellules dans mon formulaire fonctionne très bien sauf si une cellule
contient
une formule.

Voici un petit extrait de mon code:

LabelNom = Sheets(Feuille).Range("E" & Ligne)
LabelCR = Sheets(Feuille).Range("F" & Ligne)
TxtCCH = Sheets(Feuille).Range("G" & Ligne)

La variable Ligne a été définie et contient le chiffre
correspondant à la ligne
où le code recherché a été trouvé. Jusque
là, pas de problème tout s'affiche #1.
Par contre, comme je le disais, si la cellule à "G" &
Ligne contient une
formule, ça plante. J'ai donc essayé ce qui suit:

LabelNom = Sheets(Feuille).Range("E" & Ligne).value
LabelCR = Sheets(Feuille).Range("F" & Ligne).value
TxtCCH = Sheets(Feuille).Range("G" & Ligne).value

et ça plante quand même. J'ai aussi fait ce qui suit:

LabelNom.value = Sheets(Feuille).Range("E" & Ligne).value
LabelCR.value = Sheets(Feuille).Range("F" & Ligne).value
TxtCCH.value = Sheets(Feuille).Range("G" & Ligne).value

toujour sans succès.

Pouvez-vous m'aider?

Merci
Syl


Bonjour MichD,

Effectivement, je constate que la formule en question, pour certaines ligne de ma feuille retourne la valeur # N/A. Ce qui est normal car le but de cette colonne est de détecté si les gens qui ont quitté notre service ont toujours des équipement informatiques associés à leur identifiant. Pour ce faire j'utilise, dans la feuille, une formule qui ressemble à :
=INDEX('I:CburInventaireMicros-Imprimante[Inventaire.xls]ACL'!$A:$A;EQUIV(A91;'I:CburInventaireMicros-Imprimante[InventaireCLA.xls]ACL'!$D:$D;0))
Formule qui m'a été fourni par un collègue et qui fonctionne très bien. Elle inscrit le numéro de bien associé à l'identifiant, lorsqu'il y en a un et inscrit #N/A lorsqu'il n'y en a pas...

Considérant cette situation, comment faire pour éviter l'erreur dans mon userform?

L'erreur généré est la suivante: "Impossible de définir la propriété Value, le type ne correspond pas"

Merci à l'avance et à tantôt
Avatar
MichD
Tu peux modifier ta formule comme suit :

=Si(estNa(Ta_formule);"N/A";Ta_Formule)

Dans la formule, tu remplaces, Ta_Formule par la formule que tu utilises.
Quand la formule ne trouve pas, elle renverra "N/A", ceci sera interprété
comme du texte et non comme une valeur d'erreur. Au besoin, tu peux
remplacer "N/A" par le texte de ton choix.
Cela ne devrait plus générer d'erreur dans ton formulaire.



MichD
------------------------------------------
"sfrq" a écrit dans le message de groupe de discussion :

MichD a écrit le 14/11/2011 à 19h20 :
Bonjour,

| TxtCCH = Sheets(Feuille).Range("G" & Ligne).value

Cette ligne de code ne devrait pas générer une erreur SAUF si le
contenu que retourne la formule est une erreur de type :
#DIV/0!, #NOM!, #VALEUR!, #NOMBRE!,

Est-ce le cas ? As-tu vérifié ce que contenait la cellule en
question ?

Quel est le message d'erreur ?


MichD
------------------------------------------
"sfrq" a écrit dans le message de groupe de discussion :


Bonjour,

J'en suis à mes premiers pas dans VBA. Actuellement, l'affichage du
contenu des
cellules dans mon formulaire fonctionne très bien sauf si une cellule
contient
une formule.

Voici un petit extrait de mon code:

LabelNom = Sheets(Feuille).Range("E" & Ligne)
LabelCR = Sheets(Feuille).Range("F" & Ligne)
TxtCCH = Sheets(Feuille).Range("G" & Ligne)

La variable Ligne a été définie et contient le chiffre
correspondant à la ligne
où le code recherché a été trouvé. Jusque
là, pas de problème tout s'affiche #1.
Par contre, comme je le disais, si la cellule à "G" &
Ligne contient une
formule, ça plante. J'ai donc essayé ce qui suit:

LabelNom = Sheets(Feuille).Range("E" & Ligne).value
LabelCR = Sheets(Feuille).Range("F" & Ligne).value
TxtCCH = Sheets(Feuille).Range("G" & Ligne).value

et ça plante quand même. J'ai aussi fait ce qui suit:

LabelNom.value = Sheets(Feuille).Range("E" & Ligne).value
LabelCR.value = Sheets(Feuille).Range("F" & Ligne).value
TxtCCH.value = Sheets(Feuille).Range("G" & Ligne).value

toujour sans succès.

Pouvez-vous m'aider?

Merci
Syl


Bonjour MichD,

Effectivement, je constate que la formule en question, pour certaines ligne de
ma feuille retourne la valeur # N/A. Ce qui est normal car le but de cette
colonne est de détecté si les gens qui ont quitté notre service ont toujours des
équipement informatiques associés à leur identifiant. Pour ce faire j'utilise,
dans la feuille, une formule qui ressemble à :
=INDEX('I:CburInventaireMicros-Imprimante[Inventaire.xls]ACL'!$A:$A;EQUIV(A91;'I:CburInventaireMicros-Imprimante[InventaireCLA.xls]ACL'!$D:$D;0))

Formule qui m'a été fourni par un collègue et qui fonctionne très bien. Elle
inscrit le numéro de bien associé à l'identifiant, lorsqu'il y en a un et
inscrit #N/A lorsqu'il n'y en a pas...

Considérant cette situation, comment faire pour éviter l'erreur dans mon
userform?

L'erreur généré est la suivante: "Impossible de définir la propriété Value, le
type ne correspond pas"

Merci à l'avance et à tantôt
Avatar
sfrq
sfrq a écrit le 14/11/2011 à 20h39 :
MichD a écrit le 14/11/2011 à 19h20 :
Bonjour,

| TxtCCH = Sheets(Feuille).Range("G" & Ligne).value

Cette ligne de code ne devrait pas générer une erreur SAUF si le
contenu que retourne la formule est une erreur de type :
#DIV/0!, #NOM!, #VALEUR!, #NOMBRE!,

Est-ce le cas ? As-tu vérifié ce que contenait la cellule en
question ?

Quel est le message d'erreur ?


MichD
------------------------------------------
"sfrq" a écrit dans le message de groupe de discussion :


Bonjour,

J'en suis à mes premiers pas dans VBA. Actuellement, l'affichage du
contenu des
cellules dans mon formulaire fonctionne très bien sauf si une cellule
contient
une formule.

Voici un petit extrait de mon code:

LabelNom = Sheets(Feuille).Range("E" & Ligne)
LabelCR = Sheets(Feuille).Range("F" & Ligne)
TxtCCH = Sheets(Feuille).Range("G" & Ligne)

La variable Ligne a été définie et contient le chiffre
correspondant à la ligne
où le code recherché a été trouvé. Jusque
là, pas de problème tout s'affiche #1.
Par contre, comme je le disais, si la cellule à "G" &
Ligne contient une
formule, ça plante. J'ai donc essayé ce qui suit:

LabelNom = Sheets(Feuille).Range("E" & Ligne).value
LabelCR = Sheets(Feuille).Range("F" & Ligne).value
TxtCCH = Sheets(Feuille).Range("G" & Ligne).value

et ça plante quand même. J'ai aussi fait ce qui suit:

LabelNom.value = Sheets(Feuille).Range("E" & Ligne).value
LabelCR.value = Sheets(Feuille).Range("F" & Ligne).value
TxtCCH.value = Sheets(Feuille).Range("G" & Ligne).value

toujour sans succès.

Pouvez-vous m'aider?

Merci
Syl



Bonjour MichD,

Effectivement, je constate que la formule en question, pour certaines ligne de
ma feuille retourne la valeur # N/A. Ce qui est normal car le but de cette
colonne est de détecté si les gens qui ont quitté notre
service ont toujours des équipement informatiques associés
à leur identifiant. Pour ce faire j'utilise, dans la feuille, une
formule qui ressemble à :
=INDEX('I:CburInventaireMicros-Imprimante[Inventaire.xls]ACL'!$A:$A;EQUIV(A91;'I:CburInventaireMicros-Imprimante[InventaireCLA.xls]ACL'!$D:$D;0))
Formule qui m'a été fourni par un collègue et qui
fonctionne très bien. Elle inscrit le numéro de bien
associé à l'identifiant, lorsqu'il y en a un et inscrit #N/A
lorsqu'il n'y en a pas...

Considérant cette situation, comment faire pour éviter l'erreur
dans mon userform?

L'erreur généré est la suivante: "Impossible de
définir la propriété Value, le type ne correspond
pas"

Merci à l'avance et à tantôt


Un gros merci MichD, ça fonctionne à merveille. J'étais certaine qu'il y avait une façon de capturer les #N/A, mais je ne l'avais pas trouvée.

Puis-je abuser de tes connaissances et te demander une question aussi "basic" que : "dans mon formulaire, je saisi l'identifiant de la personne que je recherche. J'aimerais. lorsque je fais TAB ou ENTER (soit un Lostfocus) après la saisi de l'identifiant, que la macro "Recherche" démarre sans que j'aie à cliquer sur le bouton "Rechercher".

Merci à l'avance

Sylvie
Avatar
MichD
Utilise ceci en adaptant le nom du textbox dans la ligne de déclaration de la procédure :
J'ai supposé que ta macro avait comme nom MaMacro et qu'elle était dans le module
du formulaire. Elle pourrait être dans un autre module, il faudrait modifier le nom
"Userform1" pour le nom dudit module dans Call UserForm1.MaMacro


'-------------------------------
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

If KeyCode = 9 Or KeyCode = 13 Then
Call UserForm1.MaMacro
End If

End Sub
'-------------------------------


MichD
------------------------------------------
Avatar
sfrq
MichD a écrit le 14/11/2011 à 22h03 :
Utilise ceci en adaptant le nom du textbox dans la ligne de déclaration
de la procédure :
J'ai supposé que ta macro avait comme nom MaMacro et qu'elle
était dans le module
du formulaire. Elle pourrait être dans un autre module, il faudrait
modifier le nom
"Userform1" pour le nom dudit module dans Call UserForm1.MaMacro


'-------------------------------
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal
Shift As Integer)

If KeyCode = 9 Or KeyCode = 13 Then
Call UserForm1.MaMacro
End If

End Sub
'-------------------------------


MichD
------------------------------------------


Rebonjour,

Voici comment j'ai modifié le code pour l'adapter à ma situation:

Private Sub Logon_Search(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

If KeyCode = 9 Or KeyCode = 13 Then
Call FormBQExternes.Enregistrer
End If

End Sub

Lors de l'exécution j'obtiens l'erreur suivante:
"Erreur de compilation - La déclaration de la procédure ne correspond pas à la description de l'évènement ou de la procédure du même nom".

:(
Avatar
MichD
Pour saisir l'identifiant de la personne, je suppose que tu utilises un Textbox,
dans la procédure que j'ai donnée, il suffit simplement de remplacer le nom du textbox1
de la déclaration de la procédure par le nom du Textbox de ton application. Sur la ligne
Call UserForm1.MaMacro , c'est là que tu utilises le nom du module où est la macro et
le nom de ta macro. Si dans la déclaration de la macro que tu veux appeler si elle est
à l'extérieur du module formulaire, tu dois lui enlever le mot "Private" dans la ligne
de déclaration de la procédure appelée.

'----------------------------------
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal
Shift As Integer)

If KeyCode = 9 Or KeyCode = 13 Then
Call UserForm1.MaMacro
End If

End Sub
'----------------------------------


MichD
------------------------------------------
"sfrq" a écrit dans le message de groupe de discussion :

MichD a écrit le 14/11/2011 à 22h03 :
Utilise ceci en adaptant le nom du textbox dans la ligne de déclaration
de la procédure :
J'ai supposé que ta macro avait comme nom MaMacro et qu'elle
était dans le module
du formulaire. Elle pourrait être dans un autre module, il faudrait
modifier le nom
"Userform1" pour le nom dudit module dans Call UserForm1.MaMacro


'-------------------------------
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal
Shift As Integer)

If KeyCode = 9 Or KeyCode = 13 Then
Call UserForm1.MaMacro
End If

End Sub
'-------------------------------


MichD
------------------------------------------


Rebonjour,

Voici comment j'ai modifié le code pour l'adapter à ma situation:

Private Sub Logon_Search(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As
Integer)

If KeyCode = 9 Or KeyCode = 13 Then
Call FormBQExternes.Enregistrer
End If

End Sub

Lors de l'exécution j'obtiens l'erreur suivante:
"Erreur de compilation - La déclaration de la procédure ne correspond pas à la
description de l'évènement ou de la procédure du même nom".

:(
Avatar
sfrq
MichD a écrit le 14/11/2011 à 22h41 :
Pour saisir l'identifiant de la personne, je suppose que tu utilises un
Textbox,
dans la procédure que j'ai donnée, il suffit simplement de
remplacer le nom du textbox1
de la déclaration de la procédure par le nom du Textbox de ton
application. Sur la ligne
Call UserForm1.MaMacro , c'est là que tu utilises le nom du module
où est la macro et
le nom de ta macro. Si dans la déclaration de la macro que tu veux
appeler si elle est
à l'extérieur du module formulaire, tu dois lui enlever le mot
"Private" dans la ligne
de déclaration de la procédure appelée.

'----------------------------------
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal
Shift As Integer)

If KeyCode = 9 Or KeyCode = 13 Then
Call UserForm1.MaMacro
End If

End Sub
'----------------------------------


MichD
------------------------------------------
"sfrq" a écrit dans le message de groupe de discussion :


MichD a écrit le 14/11/2011 à 22h03 :
Utilise ceci en adaptant le nom du textbox dans la ligne de déclaration
de la procédure :
J'ai supposé que ta macro avait comme nom MaMacro et qu'elle
était dans le module
du formulaire. Elle pourrait être dans un autre module, il faudrait
modifier le nom
"Userform1" pour le nom dudit module dans Call UserForm1.MaMacro


'-------------------------------
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal
Shift As Integer)

If KeyCode = 9 Or KeyCode = 13 Then
Call UserForm1.MaMacro
End If

End Sub
'-------------------------------


MichD
------------------------------------------



Rebonjour,

Voici comment j'ai modifié le code pour l'adapter à ma situation:

Private Sub Logon_Search(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As
Integer)

If KeyCode = 9 Or KeyCode = 13 Then
Call FormBQExternes.Enregistrer
End If

End Sub

Lors de l'exécution j'obtiens l'erreur suivante:
"Erreur de compilation - La déclaration de la procédure ne
correspond pas à la
description de l'évènement ou de la procédure du
même nom".

:(


Bonjour MichD,

La texbox pour saisir l'identifiant s'appelle Logon_Search
Private Sub Logon_Change(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

If KeyCode = 9 Or KeyCode = 13 Then
Call FormBQExternes.BtnRechercher_Click
End If

End Sub
la sub FormBQExternes.BtnRechercher_Click se trouve dans le même formulaire. J'utilisais un bouton "Rechercher" en attendant de trouver comment utiliser le lostfocus.

Je comprends que le (ByVal KeyCode As MSForms.Returninteger,ByVal Shift As Integer) recherche le code ASCII des touches TAB et Enter. Malheureusement, j'ai toujours la même erreur. VBA surligne la ligne Private Sub Logon_Change(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) et affiche l'erreur de compilation "La déclaration de la procédure ne correspond pas à la descritiôn de l'évèenement ou de la procédure du même nom".

J'ai essayé d'enlever le Private et ça n'a rien changé.

Désolée.
Avatar
sfrq
sfrq a écrit le 15/11/2011 à 15h53 :
MichD a écrit le 14/11/2011 à 22h41 :
Pour saisir l'identifiant de la personne, je suppose que tu utilises un
Textbox,
dans la procédure que j'ai donnée, il suffit simplement de
remplacer le nom du textbox1
de la déclaration de la procédure par le nom du Textbox de ton
application. Sur la ligne
Call UserForm1.MaMacro , c'est là que tu utilises le nom du module
où est la macro et
le nom de ta macro. Si dans la déclaration de la macro que tu veux
appeler si elle est
à l'extérieur du module formulaire, tu dois lui enlever le mot
"Private" dans la ligne
de déclaration de la procédure appelée.

'----------------------------------
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal
Shift As Integer)

If KeyCode = 9 Or KeyCode = 13 Then
Call UserForm1.MaMacro
End If

End Sub
'----------------------------------


MichD
------------------------------------------
"sfrq" a écrit dans le message de groupe de discussion :


MichD a écrit le 14/11/2011 à 22h03 :
Utilise ceci en adaptant le nom du textbox dans la ligne de
déclaration
de la procédure :
J'ai supposé que ta macro avait comme nom MaMacro et qu'elle
était dans le module
du formulaire. Elle pourrait être dans un autre module, il faudrait
modifier le nom
"Userform1" pour le nom dudit module dans Call UserForm1.MaMacro


'-------------------------------
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal
Shift As Integer)

If KeyCode = 9 Or KeyCode = 13 Then
Call UserForm1.MaMacro
End If

End Sub
'-------------------------------


MichD
------------------------------------------




Rebonjour,

Voici comment j'ai modifié le code pour l'adapter à ma
situation:

Private Sub Logon_Search(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift
As
Integer)

If KeyCode = 9 Or KeyCode = 13 Then
Call FormBQExternes.Enregistrer
End If

End Sub

Lors de l'exécution j'obtiens l'erreur suivante:
"Erreur de compilation - La déclaration de la procédure ne
correspond pas à la
description de l'évènement ou de la procédure du
même nom".

:(



Bonjour MichD,

La texbox pour saisir l'identifiant s'appelle Logon_Search
Private Sub Logon_Change(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As
Integer)

If KeyCode = 9 Or KeyCode = 13 Then
Call FormBQExternes.BtnRechercher_Click
End If

End Sub
la sub FormBQExternes.BtnRechercher_Click se trouve dans le même
formulaire. J'utilisais un bouton "Rechercher" en attendant de
trouver comment utiliser le lostfocus.

Je comprends que le (ByVal KeyCode As MSForms.Returninteger,ByVal Shift As
Integer) recherche le code ASCII des touches TAB et Enter. Malheureusement,
j'ai toujours la même erreur. VBA surligne la ligne Private Sub
Logon_Change(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) et
affiche l'erreur de compilation "La déclaration de la
procédure ne correspond pas à la descritiôn de
l'évèenement ou de la procédure du même nom".

J'ai essayé d'enlever le Private et ça n'a rien changé.

Désolée.


REbonjour Michel,

Il y a une erreur dans mon précédent texte. En effet, la textbox s'appelle Logon. Lorsque je double clique sur ce textbox, le nom de la SUB généré automatiquement par VBA est Logon_Change().

Lorsque j'ai écrit Logon_Search c'était une erreur dans le message qui t'était adressé seulement. Dans le code, je respecte bien le Logon_Change().

Merci encore.
Avatar
MichD
Fichier Exemple : http://cjoint.com/?AKptitBO9HY


MichD
------------------------------------------
"sfrq" a écrit dans le message de groupe de discussion :

sfrq a écrit le 15/11/2011 à 15h53 :
MichD a écrit le 14/11/2011 à 22h41 :
Pour saisir l'identifiant de la personne, je suppose que tu utilises un
Textbox,
dans la procédure que j'ai donnée, il suffit simplement de
remplacer le nom du textbox1
de la déclaration de la procédure par le nom du Textbox de ton
application. Sur la ligne
Call UserForm1.MaMacro , c'est là que tu utilises le nom du module
où est la macro et
le nom de ta macro. Si dans la déclaration de la macro que tu veux
appeler si elle est
à l'extérieur du module formulaire, tu dois lui enlever le mot
"Private" dans la ligne
de déclaration de la procédure appelée.

'----------------------------------
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal
Shift As Integer)

If KeyCode = 9 Or KeyCode = 13 Then
Call UserForm1.MaMacro
End If

End Sub
'----------------------------------


MichD
------------------------------------------
"sfrq" a écrit dans le message de groupe de discussion :


MichD a écrit le 14/11/2011 à 22h03 :
Utilise ceci en adaptant le nom du textbox dans la ligne de
déclaration
de la procédure :
J'ai supposé que ta macro avait comme nom MaMacro et qu'elle
était dans le module
du formulaire. Elle pourrait être dans un autre module, il faudrait
modifier le nom
"Userform1" pour le nom dudit module dans Call UserForm1.MaMacro


'-------------------------------
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal
Shift As Integer)

If KeyCode = 9 Or KeyCode = 13 Then
Call UserForm1.MaMacro
End If

End Sub
'-------------------------------


MichD
------------------------------------------




Rebonjour,

Voici comment j'ai modifié le code pour l'adapter à ma
situation:

Private Sub Logon_Search(ByVal KeyCode As MSForms.ReturnInteger, ByVal




Shift
As
Integer)

If KeyCode = 9 Or KeyCode = 13 Then
Call FormBQExternes.Enregistrer
End If

End Sub

Lors de l'exécution j'obtiens l'erreur suivante:
"Erreur de compilation - La déclaration de la procédure ne
correspond pas à la
description de l'évènement ou de la procédure du
même nom".

:(



Bonjour MichD,

La texbox pour saisir l'identifiant s'appelle Logon_Search
Private Sub Logon_Change(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift


As
Integer)

If KeyCode = 9 Or KeyCode = 13 Then
Call FormBQExternes.BtnRechercher_Click
End If

End Sub
la sub FormBQExternes.BtnRechercher_Click se trouve dans le même
formulaire. J'utilisais un bouton "Rechercher" en attendant de
trouver comment utiliser le lostfocus.

Je comprends que le (ByVal KeyCode As MSForms.Returninteger,ByVal Shift As
Integer) recherche le code ASCII des touches TAB et Enter. Malheureusement,
j'ai toujours la même erreur. VBA surligne la ligne Private Sub
Logon_Change(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)


et
affiche l'erreur de compilation "La déclaration de la
procédure ne correspond pas à la descritiôn de
l'évèenement ou de la procédure du même nom".

J'ai essayé d'enlever le Private et ça n'a rien changé.

Désolée.


REbonjour Michel,

Il y a une erreur dans mon précédent texte. En effet, la textbox s'appelle
Logon. Lorsque je double clique sur ce textbox, le nom de la SUB généré
automatiquement par VBA est Logon_Change().

Lorsque j'ai écrit Logon_Search c'était une erreur dans le message qui t'était
adressé seulement. Dans le code, je respecte bien le Logon_Change().

Merci encore.