Problème Gestion controles et unload Me

Bonjour,

Via un formulaire, j’ajoute, modifie et supprime des lignes dans une bd, en sélectionnant une des 3 checkboxs.

J’ai un problème pour le bouton d’option Ajouter. Je voudrais obliger l’utilisateur à remplir les différents contrôles. C-à-d qu’il ne peut pas passer au suivant si le précédant est vide ou contient une donnée erronée. Comme La textbox1 doit recevoir un nombre à 13 chiffres, mais pour tous les autres c’est du string.

Je suis confronté à un autre problème avec le bouton de fermeture du formulaire. En effet, si à l’ouverture je ne saisis aucune données, et que je clique sur le bouton fermer tout ce passe bien.

Par contre si je saisie une donnée dans n’importe quel contrôle, et que je ferme le formulaire le code ne fonctionne pas bien. J’ai l’affichage d’un msgbox mis dans les différentes TextBox*_Exit (*=n° textbox).

Je ne parviens pas à bien gérer tout ceci. Merci de m’aider.

15copie.xlsm (55.82 Ko)

Bonjour,

Je trouve ton code un peu agressif vis-à-vis de l'utilisateur, si tu veux changer de zone pour en remplir une autre parce que tu as envie d'y faire dans un autre ordre, bam, une msgbox te saute à la gorge.

Ce que je fais quand je veux vérifier si la personne a bien tout rempli, c'est juste vérifier au moment de l'appui sur modifier/valider, si la personne a bien rempli toutes les informations, si ce n'est pas le cas, afficher un message et mettre en rouge clair le fond des zones à renseigner. Dans l'autre cas, on continue.

J'ai changé pas mal de choses dans le fonctionnement de ton formulaire, je te laisse y jeter un oeil et me faire un retour

16copie-de-copie.xlsm (65.44 Ko)

C'est parfait exactement le résultat escompté.

Je me suis mêlé, je ne sais plus quoi au juste, les pinceaux ou les rouleaux

J'ai tellement torturé ma touche F8 que le bout de mon index me fait mal.

1000 mercis.

EDIT: comment au moins vérifier que le code de l'article n'existe pas dans la bd, pour ne pas faire des saisies inutilement.

En effet, le code sera rejeté plus qu'il existe déjà dans la bd. Merci beaucoup.

De rien

Change de doigt la prochaine fois au bout d'un moment

Le problème c'est que je ne sais me servir que de l'index droit

Nos messages se sont croisés. Pourrais-tu voir le problème soulevé dans l’édit de mon précédent message.

Avec mes remerciements anticipés.

Je te répondrai demain par rapport à ça, pourras-tu m'envoyer de nouveau un message pour que tu sois dans mes notifications?

Comme tu me l'as demandé, voilà je t'envoie ce message pour avoir une notification.

Encore merci pour ta gentillesse. J'apprécie ton geste.

Bonne soirée.

Bonjour,

Je viens donc de regarder ça ce matin, et j'ai rajouté quelques lignes de code, juste avant ton Set Rng dans ton programme d'ajout:

       If Not Range("a2", "a" & ligne).Find(TextBox1, lookat:=xlWhole) Is Nothing Then
            MsgBox "Le code article est déjà présent dans la base de données.", vbExclamation
            TextBox1.BackColor = RGB(230, 185, 185)
            Exit Sub
       End If

On vérifie si on trouve le code article dans la colonne A, que le résultat de la recherche ne renvoie pas rien, et si c'est le cas, on affiche un message, on met en rouge la TextBox avec le code article, et on sort du programme en cours.

Voici le fichier:

Bonne journée

Bonjour,

Je te remercie beaucoup. Mais ce n'est pas exactement ça.

En fait, la vérification doit se faire lorsque l'on sort de la textbox1 ou qu'elle change de valeur.

C'est pour que l'utilisateur sache dès le début qu'il a saisi un code existant dans la bd.

Que me conseilles-tu d'utiliser , TextBox1_Change, TextBox1_Exit ou TextBox1_AfterUpdate?

L'idée est d'avertir l'utilisateur, en affichant un message et le focus reste sur la textbox1

pour modifier le code.

Merci beaucoup.

Bonne journée.

Rebonjour,

J'ai préféré utiliser Exit pour le coup, tu n'embêtes pas la personne tant qu'elle ne décide pas de passer à un autre contrôle, j'ai donc adapté le code pour le mettre dans cet évènement, et j'annule la sortie du contrôle si jamais la valeur existe déjà dans la base de données, c'est vrai que c'est plus logique de faire comme ça que de tout taper et à la fin de voir que... ben non, c'est déjà là, donc que la personne a tout remplis pour rien, je n'y avais pas pensé de cette façon

Voici le fichier avec la réadaptation du code

Bonjour,

Je te remercie pour ta gentillesse.

Avec ton dernier fichier joint on retombe sur mon problème initial.

Autrement dit, ça rejoint tes pertinentes remarques de ton 1er post.

En effet, si le code existe alors l'utilisateur en est averti, et c'est le but rechercher.

Cependant, étant donné que le code existe et si l'utilisateur n'avait que ce code a ajouté à la bd.

Il décide logiquement à abandonner l'opération et là bingo à la fermeture du formulaire,

il trouve la msgbox affichée après la fermeture du formulaire.

C'est ce problème que je n'ai pas réussi à résoudre.

J'ai pensé à utiliser une variable booléenne pour inhiber l'affichage de la msgbox, mais sans succès.

Encore merci pour ta patience.

Ah oui en effet, je vois ton problème, du coup j'ai déclaré une variable publique en début de programme:

Public fermeture As Boolean

J'ai rajouté un évènement:

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
fermeture = True
End Sub

évènement qui agit quand on demande à fermer le formulaire, qui passe la variable fermeture à True, et du coup dans le programme Exit de la textbox j'ai la ligne de code:

    If fermeture Then Exit Sub

Du coup quand je vais pour fermer, on ne regarde plus le reste

Je te joins le fichier avec modification, tu verras que tu n'as plus le message à la fermeture:

Bonsoir ,

Excuse ma réponse tardive, je viens juste de rentrer chez moi.

Merci beaucoup, je n'aurai jamais pensé à utiliser UserForm_QueryClose.

C'est parfait. Toute ma gratitude.

Encore merci.

Bon week-end.

De rien et bon week-end également

Rechercher des sujets similaires à "probleme gestion controles unload"