Soucis de code erreur à la fermeture volontaire de l'userform

Résolu/Fermé
gilles52300 Messages postés 35 Date d'inscription dimanche 12 mai 2013 Statut Membre Dernière intervention 1 octobre 2018 - Modifié par gilles52300 le 19/05/2013 à 19:36
gilles52300 Messages postés 35 Date d'inscription dimanche 12 mai 2013 Statut Membre Dernière intervention 1 octobre 2018 - 20 mai 2013 à 15:37
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.

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:

10 réponses

Mike-31 Messages postés 18310 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 29 mars 2024 5 073
19 mai 2013 à 19:57
Salut,

Il serait intéressant d'avoir ton fichier sans note confidentielle que tu peux joindre avec ce lien

https://www.cjoint.com/
0
gilles52300 Messages postés 35 Date d'inscription dimanche 12 mai 2013 Statut Membre Dernière intervention 1 octobre 2018
Modifié par gilles52300 le 19/05/2013 à 20:17
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
0
Mike-31 Messages postés 18310 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 29 mars 2024 5 073
Modifié par Mike-31 le 19/05/2013 à 21:19
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.
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
19 mai 2013 à 21:23
Bonjour,

et pourquoi n'utilises-tu pas UserForm3.hide ?

eric
0

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

Posez votre question
gilles52300 Messages postés 35 Date d'inscription dimanche 12 mai 2013 Statut Membre Dernière intervention 1 octobre 2018
19 mai 2013 à 21:42
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.
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
19 mai 2013 à 21:51
et en plus il me fait quand même l'erreur.
Ca ne faisait plus l'erreur chez moi sans rien toucher d'autre, c'est pour ça...
Ce qui n'est pas illogique puisqu'il se contente de le masquer.
eric
0
gilles52300 Messages postés 35 Date d'inscription dimanche 12 mai 2013 Statut Membre Dernière intervention 1 octobre 2018
19 mai 2013 à 22:07
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.
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
Modifié par eriiic le 19/05/2013 à 22:46
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.
0
gilles52300 Messages postés 35 Date d'inscription dimanche 12 mai 2013 Statut Membre Dernière intervention 1 octobre 2018
19 mai 2013 à 22:58
C'est une bonne idée ta reflexion sur la fausse date. Je n'y avais pas songé mais tu as entièrement raison.
Je vais me pencher sur ce problème et vous tiens informé de l'avancé de la résolution du problème.
Je te remercie de ton aide.
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
19 mai 2013 à 23:06
et on peut se demander pourquoi ton programme va trainer sur ces lignes là puisque qu'on est sensés quitter sans traitement (?)
eric
0
gilles52300 Messages postés 35 Date d'inscription dimanche 12 mai 2013 Statut Membre Dernière intervention 1 octobre 2018
Modifié par gilles52300 le 20/05/2013 à 01:12
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.
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
Modifié par eriiic le 20/05/2013 à 01:28
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
0
gilles52300 Messages postés 35 Date d'inscription dimanche 12 mai 2013 Statut Membre Dernière intervention 1 octobre 2018
20 mai 2013 à 01:54
Ok je vois ce que tu veux dire. Je vais apporter la modification. Car effectivement le reste de mes calculs se font à la suite de userform.show
Pour la poussière sur le tapis, je reconnais..... mea culpa!!!!!
0
Mike-31 Messages postés 18310 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 29 mars 2024 5 073
20 mai 2013 à 09:03
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
0
gilles52300 Messages postés 35 Date d'inscription dimanche 12 mai 2013 Statut Membre Dernière intervention 1 octobre 2018
20 mai 2013 à 12:43
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
0
Mike-31 Messages postés 18310 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 29 mars 2024 5 073
20 mai 2013 à 13:00
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
0
Normad Messages postés 112 Date d'inscription dimanche 6 juin 2010 Statut Membre Dernière intervention 10 juin 2015 37
20 mai 2013 à 15:05
C'est que ton code s'exécute alors qu'il ne devrait pas, est-ce que tu l'aurais mis dans l'évenènement Terminate par Hasard ?
0
gilles52300 Messages postés 35 Date d'inscription dimanche 12 mai 2013 Statut Membre Dernière intervention 1 octobre 2018
20 mai 2013 à 15:37
Je n'avais pas mis mon code dans le bouton "enter"
donc en fait mon code s'exécutait quand même dans tous les cas.
merci pour ton info.
0