Soucis de code erreur à la fermeture volontaire de l'userform
Résolu
gilles52300
Messages postés
34
Date d'inscription
Statut
Membre
Dernière intervention
-
gilles52300 Messages postés 34 Date d'inscription Statut Membre Dernière intervention -
gilles52300 Messages postés 34 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Question que je n'arrive pas à élucider,
j'ouvre l'userform, et je me rend compte que je n'ai pas toutes les données. je décide de le fermer sans avoir rentré aucune donnée dedans et là il me fait un message d'erreur qui me renvoie sur le débogueur.
message
Erreur d'exécution 13
incompatibilité de type
Quand j'ouvre le debogueur, c'est cette ligne qui est surligné
DateReception = UserForm3.TextBox1.Text
j'ai mis en place un bouton pour le fermer en condamnant le bouton rouge de fermeture.
mais rien n'y fait.
si vous avez une idée.
je voudrais éviter que les personnes qui vont utiliser ce dossier puissent rentrer dans vba.
Question que je n'arrive pas à élucider,
j'ouvre l'userform, et je me rend compte que je n'ai pas toutes les données. je décide de le fermer sans avoir rentré aucune donnée dedans et là il me fait un message d'erreur qui me renvoie sur le débogueur.
message
Erreur d'exécution 13
incompatibilité de type
Quand j'ouvre le debogueur, c'est cette ligne qui est surligné
DateReception = UserForm3.TextBox1.Text
j'ai mis en place un bouton pour le fermer en condamnant le bouton rouge de fermeture.
Unload unserform3
mais rien n'y fait.
si vous avez une idée.
je voudrais éviter que les personnes qui vont utiliser ce dossier puissent rentrer dans vba.
A voir également:
- Soucis de code erreur à la fermeture volontaire de l'userform
- Code ascii - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Code puk bloqué - Guide
- Code activation windows 10 - Guide
- Forcer la fermeture d'un programme - Guide
10 réponses
Salut,
Il serait intéressant d'avoir ton fichier sans note confidentielle que tu peux joindre avec ce lien
https://www.cjoint.com/
Il serait intéressant d'avoir ton fichier sans note confidentielle que tu peux joindre avec ce lien
https://www.cjoint.com/
Bonsoir Mike,
Merci de t'intéresser à mon cas.
voici le lien du fichier. https://www.cjoint.com/?0EtumVrzDcf
c'est avec l'userform3 et le module 4 que j'ai ce problème.
il est existant avec l'userform " aecraser" et le module 1 qui le concerne.
toutes les données sur le fichiers sont des données test.
merci encore.
cordialement
Merci de t'intéresser à mon cas.
voici le lien du fichier. https://www.cjoint.com/?0EtumVrzDcf
c'est avec l'userform3 et le module 4 que j'ai ce problème.
il est existant avec l'userform " aecraser" et le module 1 qui le concerne.
toutes les données sur le fichiers sont des données test.
merci encore.
cordialement
Re,
il faudrait que je comprenne ce que tu cherches faire ce qui risque être assez long vu l'importance du code, mais si tu sécurises cette ligne
DateReception = UserForm3.TextBox1.Text
l'erreur se retrouve également sur la ligne suivant
en attendant que je trouve mieux, essaye de sécuriser ces deux lignes comme ceci
If TextBox1 <> "" Then DateReception = UserForm3.TextBox1.Text
If TextBox2 <> "" Then DatePrelevement = UserForm3.TextBox2.Text
ou mieux sans toucher aux lignes ajoute simplement une gestion d'erreur après l'ouverture de l'userform3
UserForm3.Show
On Error Resume Next
teste le fichier et tu reviens me dire
tu as le même problème avec ce code,
Sub ecrasement()
sur lequel je te conseille d'ajouter la même gestion d'erreur après l'ouverture de l'userform
aecraser.Show
On Error Resume Next
A+
Mike-31
Une période d'échec est un moment rêvé pour semer les graines du savoir.
il faudrait que je comprenne ce que tu cherches faire ce qui risque être assez long vu l'importance du code, mais si tu sécurises cette ligne
DateReception = UserForm3.TextBox1.Text
l'erreur se retrouve également sur la ligne suivant
en attendant que je trouve mieux, essaye de sécuriser ces deux lignes comme ceci
If TextBox1 <> "" Then DateReception = UserForm3.TextBox1.Text
If TextBox2 <> "" Then DatePrelevement = UserForm3.TextBox2.Text
ou mieux sans toucher aux lignes ajoute simplement une gestion d'erreur après l'ouverture de l'userform3
UserForm3.Show
On Error Resume Next
teste le fichier et tu reviens me dire
tu as le même problème avec ce code,
Sub ecrasement()
sur lequel je te conseille d'ajouter la même gestion d'erreur après l'ouverture de l'userform
aecraser.Show
On Error Resume Next
A+
Mike-31
Une période d'échec est un moment rêvé pour semer les graines du savoir.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci Mike pour ton aide.
On Error Resume Next
fonctionne parfaitement et je n'ai plus ce message d'erreur.
En ce qui concerne la longueur du code, c'est du trompe l'oeil car il y a de la répétition. juste 4 fois le premier passage est répété avec seulement 2 lignes qui changent à chaque fois. et ensuite c'est l'ensemble qui est répété 3 fois.
je suis en train de regarder pour le simplifier avec quelqu'un.
Merci bien pour la solution. J'ai testé plein de truc mais pas ça!
pourquoi faire simple quand on veut essayer de faire compliqué!
Bonjour Eric,
userform3.hide je l'utilise losque mon userform est rempli.
et en plus il me fait quand même l'erreur.
là c'est dans le cas ou je veux le fermer sans le remplir. Oui c'est idiot, pourquoi l'ouvrir?
avec mac, j'ai pas la possibilité ou pas encore trouver la possibilité de mettre l'userform en mode 'non modale' aussi si j'ai pas pris toutes mes infos, je suis obligé de le fermer sans l'avoir rempli.
On Error Resume Next
fonctionne parfaitement et je n'ai plus ce message d'erreur.
En ce qui concerne la longueur du code, c'est du trompe l'oeil car il y a de la répétition. juste 4 fois le premier passage est répété avec seulement 2 lignes qui changent à chaque fois. et ensuite c'est l'ensemble qui est répété 3 fois.
je suis en train de regarder pour le simplifier avec quelqu'un.
Merci bien pour la solution. J'ai testé plein de truc mais pas ça!
pourquoi faire simple quand on veut essayer de faire compliqué!
Bonjour Eric,
userform3.hide je l'utilise losque mon userform est rempli.
et en plus il me fait quand même l'erreur.
là c'est dans le cas ou je veux le fermer sans le remplir. Oui c'est idiot, pourquoi l'ouvrir?
avec mac, j'ai pas la possibilité ou pas encore trouver la possibilité de mettre l'userform en mode 'non modale' aussi si j'ai pas pris toutes mes infos, je suis obligé de le fermer sans l'avoir rempli.
Si j'arrivais à comprendre.... tout a l'heure j'avais un code sans erreur. je le copie et le met à la suite sans rien changer hormis les ranges..... et là il ne fonctionnait plus.
Quand je vois comment je me casse la tête dès fois pour une ligne de code....
Mais je reconnais que ta solution aurait pu m'arranger.
Quand je vois comment je me casse la tête dès fois pour une ligne de code....
Mais je reconnais que ta solution aurait pu m'arranger.
Re,
Dim DateReception As Date
DateReception = UserForm3.TextBox1.Text
Je pense que ce qu'il n'aime pas c'est une chaine vide...
Essayer de tester pour toutes les dates :
if UserForm3.TextBox1.Text <>"" then DateReception = UserForm3.TextBox1.Text
Ou mieux, mettre un contrôle date&time picker qui contrôlera la validité des dates car tu auras le même soucis si qcq'un fait une faute de frappe et fournit une date non valide.
Je te laisse tester ;-)
eric
Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
Dim DateReception As Date
DateReception = UserForm3.TextBox1.Text
Je pense que ce qu'il n'aime pas c'est une chaine vide...
Essayer de tester pour toutes les dates :
if UserForm3.TextBox1.Text <>"" then DateReception = UserForm3.TextBox1.Text
Ou mieux, mettre un contrôle date&time picker qui contrôlera la validité des dates car tu auras le même soucis si qcq'un fait une faute de frappe et fournit une date non valide.
Je te laisse tester ;-)
eric
Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
Ah non on est sensé les traités, mais dans ce cas précis, c'est suite à fausse manip.
Autrement tous les combo et text sont à remplir avec les bonnes données. donc effectivement si la date n'est pas bonne (fausse date comme le 29/2) il faut le signaler car cela va influer sur le reste de l'exécution du traitement des données.
Dans ce cas précis, je ne saurais te dire pourquoi il n'obéit pas à l'ordre de tout stopper.
Autrement tous les combo et text sont à remplir avec les bonnes données. donc effectivement si la date n'est pas bonne (fausse date comme le 29/2) il faut le signaler car cela va influer sur le reste de l'exécution du traitement des données.
Dans ce cas précis, je ne saurais te dire pourquoi il n'obéit pas à l'ordre de tout stopper.
Oui, en marche normale quand on valide.
Mais si on abandonne il ne devrait pas passer par ces lignes.
Après ton UserForm3.Show tu ne devrais plus rien avoir.
Et avoir tes calculs sur le bouton de validation, et en final le .hide si toutes les saisies sont correctes et les calculs effectués.
En résumé sur le bouton de validation :
- contrôle des saisies
- si non correctes : message d'erreur et exit sub pour rester sur le formulaire.
- si correctes on calcule et .hide
Sur le bouton d'annulation (et tu peux remettre la croix de fermeture, tu cherchais à cacher la poussière sous le tapis là) :
.hide
eric
Mais si on abandonne il ne devrait pas passer par ces lignes.
Après ton UserForm3.Show tu ne devrais plus rien avoir.
Et avoir tes calculs sur le bouton de validation, et en final le .hide si toutes les saisies sont correctes et les calculs effectués.
En résumé sur le bouton de validation :
- contrôle des saisies
- si non correctes : message d'erreur et exit sub pour rester sur le formulaire.
- si correctes on calcule et .hide
Sur le bouton d'annulation (et tu peux remettre la croix de fermeture, tu cherchais à cacher la poussière sous le tapis là) :
.hide
eric
Re,
en décortiquant ton code, sur l'userform3 le bouton Fermeture et Enter ont la même fonction fermer l'userform un avec Hide l'autre Unload donc il est normal que l'on retrouve ce message d'erreur sur les deux.
Ensuite le code à mon sens est mal placé et devrait être exemple sous un bouton Enter ou enregistrer etc ... parce qu'Excel se trouve avec un ordre sans aboutissement d'où erreur qu'il faut gérer ou il faut revoir ton code qui semble un mix
en décortiquant ton code, sur l'userform3 le bouton Fermeture et Enter ont la même fonction fermer l'userform un avec Hide l'autre Unload donc il est normal que l'on retrouve ce message d'erreur sur les deux.
Ensuite le code à mon sens est mal placé et devrait être exemple sous un bouton Enter ou enregistrer etc ... parce qu'Excel se trouve avec un ordre sans aboutissement d'où erreur qu'il faut gérer ou il faut revoir ton code qui semble un mix
Je te remercie pour tes conseils Mike.
Je suis un novice en VBA. j'ai débuté vba en 2006 (fichier de stock, création d'annonce en csv pour import sur le net, facturation...) et depuis plus rien jusqu'à ces jours.
alors j'ai une petite base (toute petite) et je ne fini pas de découvrir la puissance et la complexité de vba. Je prend des morceau de code pour ce que je veux faire et je les assemble et fait en sorte que cela fonctionne.
Donc je prend tous les conseils que l'on me donne et les appliques.
C'est vrai que pour l'appel de l'userform j'ai toujours fait comme ça, mais c'est plus judicieux comme tu dis.
A+
Gilles
Je suis un novice en VBA. j'ai débuté vba en 2006 (fichier de stock, création d'annonce en csv pour import sur le net, facturation...) et depuis plus rien jusqu'à ces jours.
alors j'ai une petite base (toute petite) et je ne fini pas de découvrir la puissance et la complexité de vba. Je prend des morceau de code pour ce que je veux faire et je les assemble et fait en sorte que cela fonctionne.
Donc je prend tous les conseils que l'on me donne et les appliques.
C'est vrai que pour l'appel de l'userform j'ai toujours fait comme ça, mais c'est plus judicieux comme tu dis.
A+
Gilles
Re,
C'est que j'ai remarqué, des bout de code pas toujours harmonieux, une sorte d'empilement.
en fait je reprendrai les codes à zéro depuis la première action, mais bon si ça marche comme cela
C'est que j'ai remarqué, des bout de code pas toujours harmonieux, une sorte d'empilement.
en fait je reprendrai les codes à zéro depuis la première action, mais bon si ça marche comme cela