Fichier Excel qui s'ouvre avec la touche entrée
Bonjour,
J'ai récemment créé un fichier de Base de Données avec un Userform de Saisie de données.
J'ai plusieurs options pour chaque TextBox.
Je rencontre actuellement un souci avec ce fichier sur le PC de ma collègue.
Sur le mien, pas de souci, je ferme et ré-ouvre le fichier sans souci.
En revanche, sur le PC de ma collègue, elle peut fermer le fichier sans problème. MAIS dès qu'elle va sur un autre fichier excel et appuie sur la touche entrée le fichier se ré-ouvre automatiquement, et ceci à chaque fois en réponse à l'appui sur la touche entrée.
Première question 1) Comment se fait-il que le bug se produise sur son PC et non pas le mien ? (les macros ont été créées sur mon poste)
2) Comment puis-je résoudre ce problème assez gênant ?
Voici la macro de mon Userform : Peut-être y verrez vous le pourquoi du comment.
Private Sub TextBox1_Change()
End Sub
Private Sub TextBox7_Change()
End Sub
Private Sub CommandButton3_Click()
Unload Me
End Sub
Private Sub Label7_Click()
End Sub
Private Sub CommandButton1_Click()
If UserForm1.TextBox1 = "" Then
MsgBox "N° du dossier manquant!"
Exit Sub
End If
If UserForm1.TextBox2 = "" Then
MsgBox "Collaborateur manquant !"
Exit Sub
End If
If UserForm1.TextBox3 = "" Then
MsgBox "Nom du client manquant !"
Exit Sub
End If
If UserForm1.TextBox4 = "" Then
MsgBox "Ville du client manquante !"
Exit Sub
End If
If UserForm1.TextBox5 = "" Then
MsgBox "Contribuable manquant !"
Exit Sub
End If
If UserForm1.TextBox6 = "" Then
MsgBox "Nom du contact manquant !"
Exit Sub
End If
If UserForm1.TextBox7 = "" Then
MsgBox "Date du dossier manquante !"
Exit Sub
End If
If Range("A2") = "" Then
Range("A2").Select
Else
Range("A1").End(xlDown).Select
ActiveCell.Offset(1, 0).Range("A1").Select
End If
ActiveCell = UserForm1.TextBox1.Value
ActiveCell.Offset(0, 1) = UserForm1.TextBox2.Value
ActiveCell.Offset(0, 2) = UserForm1.TextBox3.Value
ActiveCell.Offset(0, 3) = UserForm1.TextBox4.Value
ActiveCell.Offset(0, 4) = UserForm1.TextBox5.Value
ActiveCell.Offset(0, 5) = UserForm1.TextBox6.Value
ActiveCell.Offset(0, 6) = UserForm1.TextBox7.Value
End Sub
Private Sub UserForm_Initialize()
Application.OnKey "{ENTER}", "valider"
TextBox1 = Range("A" & Rows.Count).End(xlUp) + 1
Exit Sub
End Sub
Private Sub UserForm_Click()
End Sub
Private Sub Workbook_Open()
UserForm1.Show
End Sub
Private Sub TextBox2_Change()
Dim A As Variant
A = Me.TextBox2
A = UCase(A)
Me.TextBox2 = A
End Sub
Private Sub TextBox3_Change()
Dim A As Variant
A = Me.TextBox3
A = UCase(A)
Me.TextBox3 = A
End Sub
Bonjour,
A quoi ça sert de mettre des macros vides ???
Utiliser la balise Code que la lecture soit agréable, et l'indentation conservée.
Le plus étonnant c'est que ça ne le fasse pas sur le tien.
Application.OnKey "{ENTER}", "valider"
Il faudrait peut-être l'annuler à la fermeture du fichier, voire même dès que ce n'est plus utile. A savoir si ça l'est réellement (???).
Regarde l'aide sur OnKey, tout est expliqué.
eric
Bonjour eskate,
Tu a écrit :Je rencontre actuellement un souci avec ce fichier sur le PC de ma collègue.
Sur le mien, pas de souci, je ferme et ré-ouvre le fichier sans souci.
En revanche, sur le PC de ma collègue, elle peut fermer le fichier sans problème. MAIS dès qu'elle va sur un autre fichier excel et appuie sur la touche entrée le fichier se ré-ouvre automatiquement, et ceci à chaque fois en réponse à l'appui sur la touche entrée.
1) Comment se fait-il que le bug se produise sur son PC et non pas le mien ?
2) Comment puis-je résoudre ce problème assez gênant ?
Il me semble que ta collègue et toi vous n'avez pas le même paramétrage d'Excel ;
regarde sur la copie d'écran jointe ci-dessous l'option entourée en rouge.
Cordialement
Bonjour, et merci pour votre réponse.
Pour tout vous dire, je suis loin d'être une pro du VBA, malheureusement!
A vrai dire, c'est mon premier formulaire de saisie.
Nous venons de remarquer quelque chose avec ma collègue. Sur mon poste, je valide avec "Entrée" (la grande touche, entrée, classique)
Elle, sur son poste, elle valide avec la petite touche entrée qui est à côté du + sous le pavé numérique.
J'ai donc testé en validant avec la touche entrée sous le pavé numérique et la, effectivement, le souci arrive.
C'est vraiment bizarre, car normalement, ces 2 touches Entrée ont le même code ASCII : 13 ;
par contre, je pense qu'elles ont un Scan Code différent, mais je serais bien étonné que
ton classeur Excel teste le Scan Code et pas le code ASCII !
NB : le Scan Code est le code de balayage des touches du clavier.
Regarde mon message précédent, avec la copie d'écran
et l'option entourée en rouge.
Cordialement
dhany a écrit :C'est vraiment bizarre, car normalement, ces 2 touches Entrée ont le même code ASCII : 13 ;
par contre, je pense qu'elles ont un Scan Code différent, mais je serais bien étonné que
ton classeur Excel teste le Scan Code et pas le code ASCII !
NB : le Scan Code est le code de balayage des touches du clavier.
Regarde mon message précédent, avec la copie d'écran
et l'option entourée en rouge.
Cordialement
Merci pour votre réponse.
J'ai testé la touche entrée du pavé numérique sur mon poste et j'ai le même souci. En fait la différence venait de là. Le souci vient donc de la touchée entrée du pavé numérique :/
Je viens de consulter l'aide VBA sur OnKey : il différencie les 2 touches Entrée (code Touche différent) :
Entrée (pavé numérique) : {ENTER}
Entrée : ~ (tilde)
dhany a écrit :
J'ai compris ! dans ta sub UserForm_Initialize(), tu as cette ligne : Application.OnKey "{ENTER}", "valider" Je viens de consulter l'aide VBA sur OnKey : il différencie les 2 touches Entrée (code Touche différent) :
Entrée (pavé numérique) : {ENTER}
Entrée : ~ (tilde)
Effectivement, je ne connaissais pas cette précision!
J'ai donc fait quelques tests.
Ce qui est étonnant, c'est que si je mets du coup Application.Onkey {~}.... c'est donc la touche entrée du pavé numérique qui doit valider. Or ça ne fonctionne pas. Par contre, j'ai toujours le souci et je peux quand même valider avec la touche entrée classique.
Si je garde le Application.Onkey (Entrée)... je peux valider avec entrée, mais quand j'appuie sur la touche entrée du pavé numérique c'est la que le fichier s'ouvre.
La logique ne devrait-elle pas être que lorsque je configure le tilde (entée pavé numérique), ce soit elle qui potentiellement fasse ouvrir le fichier, et que quand je configure la touche entrée, idem ?
⚠ selon l'aide VBA, pour la touche :
Entrée : Application.OnKey "{ENTER}", "valider"
Entrée (pavé numérique) : Application.OnKey "~", "valider"
➯ sans accolades pour la 2ème ligne !
Je te laisse refaire le test.
dhany a écrit :⚠ selon l'aide VBA, pour la touche :
Entrée : Application.OnKey "{ENTER}", "valider"
Entrée (pavé numérique) : Application.OnKey "~", "valider"
➯ sans accolades pour la 2ème ligne !
Je te laisse refaire le test.
J'ai fait le test en mettant " Application.Onkey "~", "valider" puis en faisant "Application.Onkey "{ENTER}", "valider"
Dans les deux cas, je peux valider mon formulaire avec la touche entrée pavé numérique MAIS AUSSI avec la touche entrée principale (?!)
Quand je vais sur un nouveau fichier et que je fais entrée avec la touche principale, pas de souci, et quand j'appuie sur la touche entrée du pavé numérique, bim ca m'ouvre le 1er fichier, c'est à n'y rien comprendre
Ah bah maintenant les deux touches font ouvrir le fichier ahah
Je pensais que tu allais faire un essai avec les 2 lignes en même temps :
Application.OnKey "{ENTER}", "valider"
Application.OnKey "~", "valider"
Ainsi, la macro valider() sera appelée par un appui sur la grosse touche Entrée,
et aussi par un appui sur la plus petite du pavé numérique (l'une ou l'autre,
pas en même temps).
dhany a écrit :Je pensais que tu allais faire un essai avec les 2 lignes en même temps :
Application.OnKey "{ENTER}", "valider" Application.OnKey "~", "valider"
Ainsi, la macro valider() sera appelée par un appui sur la grosse touche Entrée,
et aussi par un appui sur la plus petite du pavé numérique (l'une ou l'autre,
pas en même temps).
Mille merci, ca a l'air de fonctionner!!!
Vous venez de sauver ma journée, je n'y croyais plus !
J'ai vraiment l'impression d'être transparent...
Rajouter un autre OnKey a vraiment résolu ton pb ???
Qui était je le rappelle :
MAIS dès qu'elle va sur un autre fichier excel et appuie sur la touche entrée le fichier se ré-ouvre automatiquement
eskate a écrit :Mille merci, ça a l'air de fonctionner !!!
Vous venez de sauver ma journée, je n'y croyais plus !
Je suis ravi d'avoir pu t'aider, et merci d'avoir passé le sujet en résolu. Je te souhaite un bon weekend !
Bonjour,
Après que le fichier ait fonctionné pendant une semaine, je reviens vers vous.... Car le problème est revenu!
J'ai désormais comme macro :
Private Sub UserForm_Initialize()
Application.OnKey "{ENTER}", "valider"
Application.OnKey "~", "valider"
TextBox1 = Range("A" & Rows.Count).End(xlUp) + 1
Exit Sub
End Sub
Et dès qu'on valide n'importe quelle cellule avec la touche entrée du pavé numérique, le fichier s'ouvre automatiquement.
Je précise qu'on avait pas eu besoin d'ouvrir ce fichier depuis plusieurs jours, nous venons de le faire ce matin, ce qui a relancé le problème.
Autre détail, j'ai déplacé le fichier qui pose problème de notre serveur pour le mettre uniquement sur notre bureau, en me disant que comme ça, impossible pour excel d'aller chercher le fichier.
Résultat, quand ma collègue appuie sur entrée, excel essaye toujours de chercher le fichier, mais indique juste quelque chose du genre " le fichier n'est plus à l'endroit spécifié...."
Et si tu lisais TOUTES les réponses ????
Depuis le début je t'ai dit ce qui clochait et aucun retour malgré 2 rappels.
Bonjour eskate,
Tu as indiqué cette macro :
Private Sub UserForm_Initialize()
Application.OnKey "{ENTER}", "valider"
Application.OnKey "~", "valider"
TextBox1 = Range("A" & Rows.Count).End(xlUp) + 1
Exit Sub
End Sub
1) Ta ligne Exit Sub
juste avant End Sub
ne sert à rien, puisque même sans, on sort de la sub aussitôt ; tu peux donc
l'enlever sans que ça pose aucun souci !
2) TextBox1 = Range("A" & Rows.Count).End(xlUp) + 1
; oui, tu peux le faire, effectivement, mais n'oublie pas qu'une
TextBox est toujours une valeur de type Texte ➯ ton dernier n° de ligne + 1 (nombre) sera automatiquement converti
en texte ; aussi, il serait plus judicieux d'utiliser une variable numérique Long ; mais peut-être que tu veux seulement
l'afficher dans ton formulaire ?
3) Déplace tes 2 lignes Application.OnKey dans le code de ThisWorkbook :
Private Sub Workbook_Open()
Application.OnKey "{ENTER}", "valider"
Application.OnKey "~", "valider"
End Sub
et vérifie bien que maintenant, elles sont seulement là, et pas ailleurs.
⚠ Le code de Workbook_Open est exécuté à l'ouverture du classeur, donc pour que cette modif soit prise en compte,
il faudrait normalement que tu sauvegarde ton classeur Excel, que tu le ferme, et que tu l'ouvre à nouveau ; astuce :
place ton curseur de texte dans la sub Workbook_Open et appuie sur la touche F5 ➯ idem.
ton code VBA n'est pas encore tout à fait au point et que ça bloque ton classeur, fais quand même une sauvegarde
préalable, par précaution.
Pour ton 2ème problème, je ne m'y connais pas en serveur de réseau, mais même si tu as déplacé le fichier Excel,
le code VBA qui cherche ce fichier doit être enlevé !
alors c'est que ton programme VBA doit être hanté !!! il reste des lignes de code fantômes rémanentes !
solution n° 1 : appelle au plus vite un exorciste ou un sorcier chaman (au choix).
solution n° 3 : mets des gousses d'ail sur ton clavier pour éloigner les mauvais esprits.
Cordialement
dhany a écrit :Bonjour eskate,
Tu as indiqué cette macro :
Private Sub UserForm_Initialize() Application.OnKey "{ENTER}", "valider" Application.OnKey "~", "valider" TextBox1 = Range("A" & Rows.Count).End(xlUp) + 1 Exit Sub End Sub
1) Ta ligne
Exit Sub
juste avantEnd Sub
ne sert à rien, puisque même sans, on sort de la sub aussitôt ; tu peux doncl'enlever sans que ça pose aucun souci !
2)
TextBox1 = Range("A" & Rows.Count).End(xlUp) + 1
; oui, tu peux le faire, effectivement, mais n'oublie pas qu'uneTextBox est toujours une valeur de type Texte ➯ ton dernier n° de ligne + 1 (nombre) sera automatiquement converti
en texte ; aussi, il serait plus judicieux d'utiliser une variable numérique Long ; mais peut-être que tu veux seulement
l'afficher dans ton formulaire ?
3) Déplace tes 2 lignes Application.OnKey dans le code de ThisWorkbook :
Private Sub Workbook_Open() Application.OnKey "{ENTER}", "valider" Application.OnKey "~", "valider" End Sub
et vérifie bien que maintenant, elles sont seulement là, et pas ailleurs.
⚠ Le code de Workbook_Open est exécuté à l'ouverture du classeur, donc pour que cette modif soit prise en compte,
il faudrait normalement que tu sauvegarde ton classeur Excel, que tu le ferme, et que tu l'ouvre à nouveau ; astuce :
place ton curseur de texte dans la sub Workbook_Open et appuie sur la touche F5 ➯ idem.
mais à supposer que ton code VBA n'est pas encore tout à fait au point et que ça bloque ton classeur, fais quand même une sauvegarde
préalable, par précaution.
Pour ton 2ème problème, je ne m'y connais pas en serveur de réseau, mais même si tu as déplacé le fichier Excel,
le code VBA qui cherche ce fichier doit être enlevé !
si ton problème persiste après avoir enlevé ce code, alors c'est que ton programme VBA doit être hanté !!! il reste des lignes de code fantômes rémanentes !
solution n° 1 : appelle au plus vite un exorciste ou un sorcier chaman (au choix).
solution n° 2 : prier solution n° 3 : mets des gousses d'ail sur ton clavier pour éloigner les mauvais esprits.
Cordialement
Bonjour,
Déjà, merci beaucoup pour toutes ces réponses et le temps pris pour me répondre
1) Merci, j'ai du coup supprimé.
2) Je veux effectivement uniquement afficher les données dans le formulaire, sans mise en page ni rien de particulier.
3) MERCI!!! J'ai suivi vos étapes et ça a l'air d'avoir enterré le problème.
Du coup, croisons les doigts, à priori peut-être pas besoin de vaudou et milles merci!