Bonjour, Salut h2so4 !
Tu utilises un tableau Excel !
1er conseil : tu limites ton tableau aux données qu'il contient.
Aucune ligne vide en fin de tableau. Si tu démarres avec un tableau vide, il ne devra comporter qu'une ligne (vide car pas encore de données, et cette ligne est nécessaire pour que le tableau existe.
Une fois la première ligne remplie, toute ligne ajoutée sous le tableau sera incorporée automatiquement au tableau par Excel, qui étendra en même temps la mise en forme, les formules et listes déroulantes éventuelles, etc.
Il te suffit de laisser faire Excel.
2e conseil : avec un tel tableau, tu travailles directement avec le tableau, tu ne toccupes plus de la feuille.
Excel insère atomatiquement un nom (le nom donné au tableau) dans le gestionnaire de noms. Ce nom correspond à la plage de données du tableau, tu peux le vérifier dans le gestionnaire de noms.
Tu détermines alors la ligne d'insertion par rapport à cette plage... Exemple :
With [Tableau7]
Lni = .Rows.Count + 1
If Lni = 2 Then Lni = IIf(.Cells(1, 1) = "", 1, 2) 'Correctif éventuel au démarrage...
'Affectation des valeurs...
End With
3e conseil : toujours qualifier tes expressions renvoyant un objet, notamment celles qui renvoient un objet Range, les faire référer explicitement à la feuille qui les contient. Ton code sera plus fiable et plus rapide.
NB- Pas d'application en appliquant les conseils précédents qui te feront éviter de passer par la feuille... )
4e conseil : éviter les énumérations disgracieuses listant une affectation de données cellule par cellule.
Les boucles sont faites pour ça !
4e conseil bis : et on peut constituer en tableau la ligne à affecter de façon à l'affecter globalement.
Ce sera plus rapide.
(Quelques aménagements à faire car tes noms de contrôle ne favorisent pas l'utilisation des meilleures méthodes mais on peut s'y adapter en définissant un tableau des noms de contrôles de façon à les parcourir en boucle...)
5e conseil : les dates doivent toujours être explicitement converties en dates lors de leur affectation.
Cela t'évitera des erreurs d'inversion jour/mois...
Autre conseil : 2 modules standard ! C'est déjà un début de multiplication inutile de modules.
Je ne saurais trop conseiller de ne créer un second module qu'avec de solides raisons tenant à la nature du code destiné à y être placé (susceptible de se voir appliqué un traitement différent...). Tu travailleras mieux et plus vite sur ton code...
Cordialement.