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

Résolu/Fermé
Signaler
Messages postés
35
Date d'inscription
dimanche 12 mai 2013
Statut
Membre
Dernière intervention
1 octobre 2018
-
Messages postés
35
Date d'inscription
dimanche 12 mai 2013
Statut
Membre
Dernière intervention
1 octobre 2018
-
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.



10 réponses

Messages postés
17816
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
19 janvier 2022
4 913
Salut,

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

https://www.cjoint.com/
0
Messages postés
35
Date d'inscription
dimanche 12 mai 2013
Statut
Membre
Dernière intervention
1 octobre 2018

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
Messages postés
17816
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
19 janvier 2022
4 913
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
Messages postés
24265
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
19 janvier 2022
7 027
Bonjour,

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

eric
0
Messages postés
35
Date d'inscription
dimanche 12 mai 2013
Statut
Membre
Dernière intervention
1 octobre 2018

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
Messages postés
24265
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
19 janvier 2022
7 027
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
Messages postés
35
Date d'inscription
dimanche 12 mai 2013
Statut
Membre
Dernière intervention
1 octobre 2018

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
Messages postés
24265
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
19 janvier 2022
7 027
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
Messages postés
35
Date d'inscription
dimanche 12 mai 2013
Statut
Membre
Dernière intervention
1 octobre 2018

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
Messages postés
24265
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
19 janvier 2022
7 027
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
Messages postés
35
Date d'inscription
dimanche 12 mai 2013
Statut
Membre
Dernière intervention
1 octobre 2018

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
Messages postés
24265
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
19 janvier 2022
7 027
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
Messages postés
35
Date d'inscription
dimanche 12 mai 2013
Statut
Membre
Dernière intervention
1 octobre 2018

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
Messages postés
17816
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
19 janvier 2022
4 913
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
Messages postés
35
Date d'inscription
dimanche 12 mai 2013
Statut
Membre
Dernière intervention
1 octobre 2018

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
Messages postés
17816
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
19 janvier 2022
4 913
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
Messages postés
112
Date d'inscription
dimanche 6 juin 2010
Statut
Membre
Dernière intervention
10 juin 2015
34
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
Messages postés
35
Date d'inscription
dimanche 12 mai 2013
Statut
Membre
Dernière intervention
1 octobre 2018

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