VBA Excel : Pb Gestionnaire d'erreur

Résolu
sifusalade Messages postés 142 Statut Membre -  
sifusalade Messages postés 142 Statut Membre -
Bonjour,

Je pose beaucoup de questions ces jours-ci désolé :/

Chaque problème réglé m'en donne un autre lol mais bon, disons que ce sont les joies de la programmation lol

Je suis confronté à un problème de gestionnaire d'erreur.

Je vous joint le fichier pour que que vous y voyez plus clair et je vous explique
https://www.cjoint.com/?BHimBGL8mxh

Je veux rendre obligatoire la saisie des champs "numéro, timbre, objet, destinataire, et date d'envoi"

Si en remplissant le formulaire il manque un ou plusieurs de ces 5 éléments, un message bloquant doit apparaitre en disant quel éléments doivent encore être rempli.

Le problème c'est que, le message apparait bien mais les données sont quand même insérées dans la feuille au lieu de bloquer tant que ces 5 éléments obligatoires ne sont pas remplis...

J'ai placé le gestionnaire d'erreur à la fin car si je place le gestionnaire d'erreur au début, j'ai un message d'erreur parlant de lecture seule... Après 1h de recherches sur le net je trouve pas (peut être ai-je mal cherché...) aussi je me retourne vers vous....

En vous remerciant vraiment par avance...

2 réponses

  1. chossette9 Messages postés 6855 Date d'inscription   Statut Contributeur Dernière intervention   1 313
     
    Bonjour,

    vu la construction de ta fonction, il est tout à fait normal que ton gestionnaire d'erreur apparaisse après le remplissage des données, vu que ta macro est constituée pour insérer les données avant.

    De plus, tu fais plein de Select, de Set qui ralentisse ta macro. Tu peux faire ça simplement, sans sélectionner.

    Je regarde ça pour améliorer ton code.

    Cordialement.
    0
  2. chossette9 Messages postés 6855 Date d'inscription   Statut Contributeur Dernière intervention   1 313
     
    Re,

    ton problème de gestionnaire est résolu :

    1°) mets-le au début de ta routine ajout, et remplace les
    CelluleNum.Value, CelluleObjet.Value etc... par leur équivalent dans l'userform, soit :
    Userform1.TexteNumero.Value
    UserForm1.TexteObjet.Value

    et ainsi de suite.

    De ce fait, ton gestionnaire d'erreur se déclenchera AVANT le remplissage de l'onglet, et se basera sur les valeurs de ton formulaires, pas de celles de la feuille.

    Pour l'optimisation de code, c'est à voir plus tard :-D

    Cordialement.
    0
    1. chossette9 Messages postés 6855 Date d'inscription   Statut Contributeur Dernière intervention   1 313
       
      Ce qui donne pour le gestionnaire :

       'gestionnaire d'erreur
      If UserForm1.TexteNumero.Value = "" Then
          MonMessage = MonMessage & "     - Un numéro" & Chr(13)
      End If
      If UserForm1.TexteTimbre.Value = "" Then
          MonMessage = MonMessage & "     - Un timbre" & Chr(13)
      End If
      If UserForm1.TexteObjet.Value = "" Then
          MonMessage = MonMessage & "     - Un objet" & Chr(13)
      End If
      If UserForm1.ListeDestinataire.Value = "" Then
          MonMessage = MonMessage & "     - Un destinataire" & Chr(13)
      End If
      If UserForm1.TexteDate.Value = "" Then
          MonMessage = MonMessage & "     - Une date d'envoi" & Chr(13)
      End If
              
      If MonMessage <> "" Then
          MsgBox "ATTENTION" & Chr(13) & "Vous devez saisir" & Chr(13) & MonMessage & "pour continuer", vbCritical
      Exit Sub
      End If
      0
    2. sifusalade Messages postés 142 Statut Membre 7
       
      .... et se basera sur les valeurs de ton formulaires, pas de celles de la feuille.

      Alors chapeau, quand je pense que c'est aussi con que ça... (j'ai honte lol)

      En tout cas merci beaucoup c'est super sympa. Et en plus, de me résoudre mon problème uu m'as expliqué. Merci beaucoup, je confirme, ça marche.
      0