Affichage date dans Combobox

robertmattera

XLDnaute Nouveau
Bonjour,
Dans un userform, j'utilise une combobox alimentée par la propriété Rowsource, pour afficher une liste de date de naissance de membres d'une association. En cliquant sur une date, j'activé la procédure combobox.click, et j'affiche diverses propriétés de la personne concernée. Mais je rencontre 2 problèmes :
- la date affichée lors du choix est dans un format correct (jj/mm/aa), mais après sélection et ré affichage de l'écran, elle est en format normal (ex : 44127);
- si je force l'affichage dans un bon format en copiant une variable, l'application considère que la combobox a été modifiée et ré exécute la procédure. Ce qui fait que mes variables sont ré initialisées et que tout est erroné.
Et pourtant je n'utilise pas la procédure combobox.change.

Merci d'avance pour l'aide que vous pourrez m'apporter.
 

robertmattera

XLDnaute Nouveau
Re : Affichage date dans Combobox

Bonsoir Erci C et Néné06,

Tout d'abord, je charge la combobox nommée ListeEnfants dans une 1ère procèdure, de cette manière :

PlageEnf = "Enfants!$B$" & EnfantP & ":$B$" & EnfantD
ListeEnfants.RowSource = PlageEnf

Ensuite, lors du click sur une des dates proposées par la combobox, j'appelle la procédure suivante :
Private Sub ListeEnfants_click()
Dim DateEnf As Date
Dim NumSel As Integer
NumListe = ListeEnfants.ListIndex
NumSel = BoxNuméro.Value
If ListeEnfants.Value = "" Then
Exit Sub
End If
DateEnf = ListeEnfants.Value
ListeEnfants.Value = DateEnf

Cet affuichage de date n'est pas très "pro", mais cela me permet de conserver un format jj/mm/aaaa. La proposition d'EricC fonctionne également.
Mais le problème, est que l'instruction "ListeEnfants.Value = DateEnf" relance la procédure au déhut, et réinitialise ListIndex à 0, ce qui fait que je reste toujours sur le 1er de la liste.

Merci pour votre aide
 

Dranreb

XLDnaute Barbatruc
Re : Affichage date dans Combobox

Bonsoir.

Je crains qu'il ne vous faille abandonner la propriété RowSource du ComboBox au profit de sa propriété List.
VB:
ListeEnfants.List = Worksheets("Enfants").Cells(EnfantP, "B").Resize(EnfantD - EnfantP + 1).Value
Mais ce n'est pas encore l'idéal: l’auto-complétion à la frappe ne marchera pas. Ce qu'une List de ComboBox aime bien ce sont des String et pas autre chose.
Vous pourriez avoir intéret à utiliser mes dictionnaires arborescents. D'ou viennent les variables EnfantP et EnfantD ? D'autres ComboBox ? D'un truc qui pourrait se résoudre beaucoup plus simplement avec mon objet de type ComboBoxLiés ?
 

robertmattera

XLDnaute Nouveau
Re : Affichage date dans Combobox

Bonjour Dranreb,

A partir de la propriété LIST, selon votre exemple, cela fonctionne, mais uniquement s'il y a plus d'une donnée à afficher dans la box.
Je n'arrive pas à la modifier pour n'accepter qu'une seule donnée.
Votre Avis ?

Merci pour votre aide.
 

Dranreb

XLDnaute Barbatruc
Re : Affichage date dans Combobox

Oui c'est vrai. Dans ce cas il faut le détecter et fabriquer un tableau à un seul élément. Quel dommage que vous n'ayez pas plusieurs ComboBox à gérer en même temps, car l'objet ComboBoxLiés ne rencontre pas ce problème: il fait tout seul dans son coin tout ce qu'il faut, sans que vous n'ayez à vous en occuper, à l'aide de dictionnaires arborescents dont la propriété Keys est toujours un tableau.
De plus, quand il ne reste plus qu'un seul choix possible, il en garnit d'office de lui même le ComboBox, sauf option expresse contraire.
Et aussi la frappe d'une date permettrait de la sélectionner, car il prend toujours des clés String.
 
Dernière édition:

robertmattera

XLDnaute Nouveau
Re : Affichage date dans Combobox

Bonjour,

En fait le problème venait du format des dates sélectionnées dans ma combobox, qui était au format JJ/MM/AAAA. Dans le cas de 2 dates identiques (cas des jumeaux), en sélectionnant la seconde date, VB relançait la procédure à son début et je perdais les valeurs de mes variables.
En forçant dans la feuille excel le format à JJ/MM/AA, plus aucun problème !
J'avoue ne pas bien comprendre pourquoi, mais le principal est que ça fonctionne.
Merci à tous ceux qui m'ont aidé (et m'ont permis de découvrir les comboboxliés !)
 

Dranreb

XLDnaute Barbatruc
Re : Affichage date dans Combobox

Bonsoir.
et m'ont permis de découvrir les comboboxliés !
J'espère que vous en avez utilisé un, alors !
Pourriez vous joindre le classeur contenant ce que vous avez fait, que je voie si vous auriez pu utiliser encore mieux cet objet, dont je suis le créateur ?
Vous semblez dire que vous avez mis les dates sous forme de textes pour ne plus avoir de problème. On devrait quand même pouvoir faire autrement, notamment avec un dictionnaire arborescent (c'est a dire dont les items sont des listes de numéros de lignes) ou, bien sûr, un ComboBoxLiés.
 

Docmarti

XLDnaute Occasionnel
Re : Affichage date dans Combobox

Bonjour

Quand on utilise sa propriété RowSource, on ne peut pas modifier les valeurs directement dans le Combobox.
Voici une solution de contournement en utilisant un Textbox pour afficher la propriété Value du Combobox.

Cordialement

Docmarti
 

Pièces jointes

  • robertmattera_Combobox_Dates_001.xlsm
    20.3 KB · Affichages: 137
Dernière édition:

robertmattera

XLDnaute Nouveau
Re : Affichage date dans Combobox

Bonjour à tous,

En fait, j'ai pris connaissance du fonctionnement des comboboxliés, mais je ne les ai pas utilisé. Car comme je le disais dans mon précédent message, j'ai trouvé la solution en modifiant simplement le format de date.

Testez à partir du fichier joint.
Lorsqu'un adhérent a plusieurs enfants dont la date est au format JJ/MM/AA, c'est OK : adhérent n° 3, 5 ou 6.

Lorsqu'un adhérent a plusieurs enfants dont la date est au format JJ/MM/AAAA, c'est KO : adhérent n° 8.
Il n'affiche toujours que le 1er, même en sélectionnant les suivants.

J'ai réglé mon pb comme cela.

Merci pour votre aide.
 

Pièces jointes

  • Gestion Assoc.xlsm
    78.1 KB · Affichages: 104

Dranreb

XLDnaute Barbatruc
Re : Affichage date dans Combobox

Une cellule peut contenir ou non une date, le format avec lequel elle est affichée ne peut en aucun cas modifier quoi que ce soit.
Mais j'ai regardé un peu. Les enfants de l'adhérent 8 portent la même date, si la 2ième est différente on peut la sélectionner.
Peut être faudrait-il aussi un ComboBox au lieu d'une TextBox pour le prénom. S'il n'y a pas d’ambigüité de dates un ComboBoxLié y afficherait automatiquement le prénom. En revanche RowSource fait vraiment n'importe quoi, pire que List auquel on affecte autre chose que des textes. Il affiche apparemment les textes des cellules dans la liste mais prend comme Value la valeur de date convertie en String, soit toujours 4 chiffre pour l'année.
 

robertmattera

XLDnaute Nouveau
Re : Affichage date dans Combobox

Bonjour Dranreb,
"Une cellule peut contenir ou non une date, le format avec lequel elle est affichée ne peut en aucun cas modifier quoi que ce soit" : et pourtant c'est bien le cas. Selon le format, la sélection dans un combobox fonctionne ou pas.
"Les enfants de l'adhérent 8 portent la même date, si la 2ième est différente on peut la sélectionner." : normal, ce sont des jumeaux. Et c'est bien dans ce cas que j'avais u problème.
Quant aux comboboxliés, je ne les ais pas utilisé devant l'urgence à régler ce pb. Je prendrai le temps ranquillement d'étudier leur fonctionnement. Mais est-ce que cela fonctionnerait avec des index en doublon (dates de naissance identiques pour des jumeaux dans mon exemple) ?
En tout cas, je te remercie sincèrement pour ton aide.
 

Dranreb

XLDnaute Barbatruc
Re : Affichage date dans Combobox

Bonjour.
est-ce que cela fonctionnerait avec des index en doublon (dates de naissance identiques pour des jumeaux dans mon exemple) ?
Oui: la date ne serait proposée qu'une fois, ou même déjà affichée s'il n'y a que ces jumeaux, mais le prénom, lui, ne serait pas affiché en ComboBox prénom, il faudrait l'y choisir (ou, toujours possible aussi: taper le début jusqu'à ce que le bon prénom soit sélectionné).
 

Discussions similaires

Statistiques des forums

Discussions
312 683
Messages
2 090 905
Membres
104 693
dernier inscrit
azizou900