N° de SS et affichage du choix d'un la listbox

Bonsoir,

J'ai quasiment fini mon projet, cependant, il me reste encore 3 points à revoir et je n'arrive pas à les résoudre.

1) La vérification de la saisie du numéro de sécurité sociale

2) Lors de consultation de la "fiche employé", le choix du service, effectué précédemment ne s'affiche pas

3) Suppression d'un employé

Pourriez-vous corriger mon document s'il vous plait?

22testtable.xlsm (31.51 Ko)

Bonsoir,

Une remise en ordre ne serait pas du luxe !

C'est très bien de rechercher une belle présentation sur les feuilles qui se voient... mais je considère qu'un soin au moins égal, sinon supérieur devrait être apporté à ce qui trouve dans l'éditeur VBA. L'utilisateur n'a en principe pas à y mettre le nez, mais ceux qui ont à intervenir sur le code si ! Et ils méritent au moins autant d'égards !!

Un code écrit n'importe comment prend beaucoup plus de temps à être lu et interprété correctement... L'indentation selon des règles précises sert à voir la structure d'une procédure d'un seul regard, à y déceler immédiatement un certain nombre d'anomalies et à la lire beaucoup plus rapidement...

Les contrôles ont été renommés... mais visiblement par plusieurs personnes différentes avec des conceptions différentes en la matière. Ce qui ne facilite rien. Rétablir une certaine unité du programme serait une bonne chose.

En ce qui concerne les procédures d'évènements attachées aux contrôles, il y a une règle simple à respecter :

  • on n'écrit pas soi-même les déclarations de procédures, on laisse VBA le faire...
  • les contrôles apparaissent dans la liste déroulante de gauche du module : on clique sur le contrôle à programmer, VBA affiche la déclaration de proc. par défaut du contrôle...
  • si l'on souhaite un autre évènement : on va le sélectionner dans la liste déroulante de droite, VBA affiche la déclaration de procédure de l'évènement choisi...
  • si un évènement est déjà programmé lorsqu'on clique sur un contrôle dans la liste de gauche, le curseur sera déplacé sur cette procédure déjà existante, et pour en ajouter une autre sur un autre évènement, on va alors le chercher dans la liste de droite
  • on efface les déclarations que l'on n'utilise pas
  • on laisse VBA placer lui-même les procédures, c'est la meilleure façon de s'y retrouver
  • on place les procédures hors évènements dans la zone (Général) du module, soit en tête, après les déclarations de niveau module s'il y en a (et avant les évènementielles)
  • il est généralement peu utile de déclarer Private les procédures qu'on ajoute (sauf cas particulier...) et se contenter de Sub est un bon moyen d'identifier immédiatement les procédures ajoutées (qui ne sont pas déclenchées par un évènement mais par une autre procédure...)

Donc on peut en venir à ton bouton Supprimer pour illustrer : tu vas aller cliquer sur le nom de ce bouton dans la liste de gauche du module, et... tu constateras que contrairement à ce que je viens d'exprimer ci-dessus, le curseur ne se déplace pas vers ta procédure d'évènement Click du bouton mais inscrit une nouvelle déclaration de procédure de cet évènement !

Ce qui signifie que ta déclaration est défectueuse et qu'il ne te reste qu'à transférer le code dans la bonne déclaration et effacer la fausse procédure !

De la même façon il semble que tu aies deux procédures Initialize, dont une est nécessairement fausse et ne sera jamais lancée...

Pour la ListBox des services, je ne sais pas trop ce qu'il en est, sauf que rien n'étant programmé à son propos, il ne peut rien se passer...

Pour le numéro de SS, quelle vérification veux-tu opérer ? Ce n'est pas très clair... A ma connaissance, le numéro de SS a toujours comporté 13 chiffres, la clé de contrôle ne te sert que si tu l'utilises pour contrôler la validité du numéro... Pour les autres, tu peux contrôler facilement les 7 premiers chiffres avec les données de ta base, pour les 3 suivants il te faut les codes INSEE des communes, c'est un peu plus difficile, quant aux 3 derniers ce n'est guère possible...

Les MsgBox qui s'affichent en permanence dès qu'on ouvre le Userform ou qu'on clique ici ou là sont plutôt désagréables, sinon irritants, tant pour l'utilisateur que pour ceux qui cherchent à tester le fonctionnement... On réserve en général ce type de messages lors de la validation pour indiquer à l'utilisateur pourquoi la validation ne peut intervenir...

Cordialement.

Bonsoir,

j'avoue que je suis une débutante et j'ai fais ce code selon un livre.

J'ai remis le code de suppression dans la bonne procédure d'événement mais cela ne fonctionne toujours pas.

Au niveau du numéro de SS, je souhaite un contrôle de 13 chiffres lors de la saisie et ce format : 0 00 00 00 000 000|00.

Est-ce que vous pourriez me montrer les changements directement dans le document svp? Etant une débutant, je comprends mieux comme ça.

Merci à vous

A titre didactique :

Private Sub Bsupprimer_Click()
    Dim n%
    n = lstEmployes.ListIndex + 1
    If n > 0 Then
        If MsgBox("Confirmez-vous la suppression de la fiche employé ?", vbYesNo, "Demande de confirmation " _
         & "de suppression de fiche employé") = vbYes Then
            [Tableau23].Rows(n).Delete
            Affiche_Employes
        End If
    End If
End Sub

Compléments :

Select... (ou Activate ou équivalent) : à bannir du code que tu écris (une fois pour toutes) !

Si cela ne concerne pas un affichage à l'écran à l'intention de l'utilisateur, c'est une instruction parasite qui ne fait que ralentir l'exécution...

Supprimer une ligne cela se fait sans tarabiscoter ....Rows(n).Delete ! EntireRow n'a de sens que si l'objet Range ciblé n'est pas déjà la ligne ! Quand c'est une ligne, c'est forcément la ligne entière !!

n étant le numéro de ligne, il faut en disposer et tu en disposes avec la valeur ListIndex de ta ListBox dans laquelle les éléments sont indexés à partir de 0 (donc ajouter 1 pour retrouver le numéro de ligne dans la plage de données). Au passage on teste que n correspond bien à une sélection dans la liste (>0, après avoir ajouté 1).

Il s'agit du numéro de ligne dans la plage de données : justement là encore tu en disposes avec le nom du Tableau, mis automatiquement par Excel, qui y correspond... (il faut utiliser les outils disponibles et ne pas aller se perdre à chercher dans la feuille une ligne que tu peux atteindre directement sans la chercher).

Décharger pour recharger et relancer ainsi l'initialisation n'est pas très élégant ! Plutôt que cela on met alors le code des éléments à réinitialiser en cours d'exécution dans la procédure Activate au lieu de Initialize, pour qu'elle soit exécutée sur un Show succédant à un Hide (sans fermer complètement le Userform), mais au cas particulier la procédure est suffisament rapide pour ne pas avoir à y recourir, d'autant que l'initialisation de la ListBox se trouve dans une procédure ajoutée que l'Initialize se contente de lancer, il suffit donc de l'appeler pour que tout soit immédiatement en ordre...

NB- Cette proc. n'est pas particulièrement belle à voir et mérite d'être réécrite, mais du point de vue méthode c'est la bonne méthode, la plus efficace.

Cela n'entrait pas dans la démonstration, mais il ne serait peut-être pas inutile d'introduire le nom à supprimer dans la demande de confirmation, pour inciter l'utilisateur à vérifier deux fois plutôt qu'une...

Je te fais remarquer par ailleurs que pour le n° SS tu parles d'un contrôle de 13 chiffres et tu en mets 15 ! Il faut savoir. Le numéro a 13 chiffres. La clé de contrôle ne fait pas partie du numéro : si tu la demandes, elle doit figurer à part et te servir à vérifier que le numéro donné est valide, si elle ne te sert pas à vérifier, elle n'a aucune utilité !

Cordialement.

Rechercher des sujets similaires à "affichage choix listbox"