Bonjour le fil,
COMPAN, Si vous nous faites parvenir votre fichier final anonymisé, nous pourrons vous aider à le finaliser.
Sinon quelques commentaires vite fait :
Pourquoi ne pas utiliser une feuille modèle pour l'impression de la fiche adhérent au lieu de passer par des API ?
Le bouton sauvegarde ajoute systématiquement une ligne au tableau, (Donc pas d'édition d'une fiche possible.)
Pourquoi utiliser des tableaux pour des listes aussi simple que "M., Mme" ? un simple cbocivilite.List = VBA.Array("M.", "Mme")
Dans l'initialisation du formulaire :
Dim TS As ListObject
Dim ligne As Integer
Set TS = Range("Source").ListObject
With TS
ligne = ActiveCell.Row - .DataBodyRange.Row + 1
Vous ne testez pas si le tableau existe, ni le « DataBodyRange » c'est le meilleur moyen de se prendre un coup de pied par le compilateur.
Au lieu de récupérer un hypothétique numéro de ligne charger plutôt la première ligne si elle existe et travaillez avec elle.
Quand vous avez du code qui se répète :
If InStr("1234567890", Chr(KeyAscii)) = 0 Then KeyAscii = 0: MsgBox "Saisie non valide", vbCritical
Préférer lui une petite fonction :
Private Sub GetIsNumeric(ByRef value As MSForms.ReturnInteger)
If InStr("1234567890", Chr(value)) = 0 Then
Beep
value = 0
End If
End Sub
Et pour l'appel :
Private Sub txtdate_Keypress(ByVal KeyAscii As MSForms.ReturnInteger)
GetIsNumeric KeyAscii
End Sub
Éviter les messages intrusifs qui lassent vite, préférez lui un « Beep » qui est suffisant.
Sur la fermeture :
Private Sub btnFermer_Click()
Unload Me
ActiveWorkbook.Save
End Sub
Vous devriez laisser le choix à l'utilisateur de sauvegarder ou non. Vous pourriez par exemple mettre un paramètre au classeur pour une sauvegarde automatique.