Bonjour
Beaucoup de questions au quelles je vais essayer de répondre de la manière la plus intelligible possible
1° question
on remplacer le code en bleu par celui en rouge ? Si non, pourquoi ?
C’est 2 lignes écrite de manière différente aboutissent au même résultat
L’instruction Range a besoins de la colonne exprimée avec sa lettre et du numéro de la ligne
Dans la première ligne ces 2 éléments sont exprimés l’une par une lettre « A » l’autre par une instruction « Rows.Count » qui donne le nombre de lignes de la feuille donc le chiffre
Dans la 2° seul le chiffre inscrit en dur est la différence et l instruction Range est remplacée par des crochets
Range(« A65000 ») est identique à [65000]
L’avantage de la première c’est d’être dynamique et de s’adapter à la feuille pour déterminer sa dernière ligne le but au final est de faire démarrer l’ensemble à partir d’une cellule vide pour déterminer la première non vide donc la dernière ligne des données sachant que cette dernière est fluctuante au grés du nombre de ces données qui peuvent très bien augmenter ou diminuer
Maintenant la 2° écriture même si elle n’est pas dynamique aura toutes les chances de toujours fonctionner car peu de fichier atteigne quant à ces données la ligne 65000
Moi même j’utilise dans ce genre d’instruction la ligne 65536 qui était à l’époque d’Excel 2003 la dernière ligne des onglets
Aujourd’hui le nombre de ligne a exploser dans les dernière version d’Excel mais par habitude j’utilise toujours ce rang et n’est jamais eu à en déplorer son choix
2° question
Dans le formulaire, que signifie les lignes de code :
on détermine la dernière ligne de donnée de l’onglet Ws que l’on affecte à la variable « I » :
I = Ws.Range(« A » & Rows.Count).End(xlUp).Row
On affecte le numéro de la sélection effectué dans la combobox1 à la variable "sélection :
sélection = Me.ComboBox1.ListIndex
On positionne la sélection de la listebox de la Combobox1 au niveau déterminé par L-1 ce qui représente dans la procédure concernée la dernière position de la liste
Me.ComboBox1.ListIndex = L - 1
On constitue les éléments de la Listebox de la Combobox celle-ci impérativement doit avoir au moins 2 item
Si tu mets " A1:K1" tu n’as qu’un item donc bug en perspective
Pas d’autre choix que de mettre « A1:K2 » pour avoir le minimum d’item soit 2 et ainsi d’éviter un bug
Me.ComboBox1.List = Ws.Range(« A1:K2 »).Value et pourquoi pas A1:K1 ?
3° question
La ligne 4 Bouton RECULER n’est pas déclaré. Pas de problème?
Pour solutionner certains dysfonctionnement j’ai tenté de déclarer des variable public pour que ces variables utilisées dans différentes procédures récupèrent leur valeur émanant de l’exécution de l’une d’entre elles et d’en profiter sur la suivante
Hélas si cela fonctionne très bien dans les modules classiques ce n’est pas le cas dans les Userformes
Donc j’ai abandonné cette option mais oublié de supprimer la ligne :
Public ligne, ligne2, ligne3
Aucune incidence mais tu peux la supprimer car inutile
4° question
- La programmation a-t-elle pris en compte le fait que certaines listes déroulantes (exemple Prof ) pourraient avoir plus de 3 éléments ? Si non, merci de mettre à jour.
Dans la constitution de toutes les listes la détermination de la dernière cellule à prendre en compte dans la colonne appropriée onglet « LISTE » est réalisée de manière dynamique
Pour cette liste les lignes concernées :
Set Ws = Sheets(« LISTE »)
I = Ws.Range(« D » & Rows.Count).End(xlUp).Row
If I > 2 Then
Me.ComboBox5.List = Ws.Range(« D2:D » & I).Value
Else
Me.ComboBox5.List = Ws.Range(« D2:D3 »)
End If
la constitution de la liste réalisée par cette ligne :
Me.ComboBox5.List = Ws.Range(« D2:D » & I).Value
utilise la variable « I » déterminée en amont par cette ligne de code :
I = Ws.Range(« D » & Rows.Count).End(xlUp).Row
qui s’adapte systématiquement au nombre de lignes remplies dans la colonne
Il en est ainsi pour toutes les listes
Pas de soucis donc à avoir
5° question
Peut-on supprimer sans problème ces 2 lignes de code?
Private Sub ComboBox2_Change()
End Sub
Pas de soucis on peut mais elle ne gène pas
A toi de voir
6° question
Que signifie ce rappel : Call UserForm_Initialize au Bouton ENREGISTRER) ?
Fais appel à la procédure de réinitialisation pour réinitialiser tout le userform afin de permettre la mise en place dans la listebox de la combobox1 en bas de sa liste du nouvel enregistrement effectué de placer la sélection dessus et d’alimenter de toutes les données correspondantes les 9 textbox de dessous
La procédure concernée appelée :
Private Sub UserForm_Initialize()
7° Question
je ne constate pas chez moi cette présentation
les cellules de la colonne concernée onglet « LISTE » après la dernière cellule saisie sont elles toutes vides sans espace invisible à l’œil
Moi chez moi j’ai cette présentation :

Je viens de récupérer ton fichier et comprendre l’origine de cet affichage listebox « Profession »
un caractère parasite dans la colonne concernée onglet « LISTE » en est la cause cellule « D14 »
Bien vérifier dans cet onglet la présence des seules données dans chaque colonne
Ne pas hésiter à faire un bon nettoyage après la dernière cellule saisie de chaque colonne
L’intrus colonne D onglet « LISTE » cellule D14 sélectionnée :
Je pense avoir répondu de manière claire à toutes tes interrogation
A ta disposition