VBA ComboBox triée et sans doublon

Bonjour,

toujours dans le cadre de mon projet de gestion de consommables.
j’ai un tableau [Tableau1] dans ma feuille « ENTREES » qui trace les entrées en stock :
date entrée
ref conso
etc…

Bien sur il y a parfois plusieurs entrées à la même date

Dans un userform j’ai créé un combobox (ComboBox7). Je voudrais que ce comboBox m’affiche les dates de mes entrées mais sans doublon et trié par ordre croissant

Dois-je obligatoirement faire du VBA ou existe t il un code spécial à mettre directement dans le champ « RowSource » de ma combobox ?

Merci à vous

Bonjour,

S’il y a un combobox, c’est qu’il y a du VBA, sinon, c’est un mystère
Peut-être qu’avec un exemple concret … !!!

Bonjour MimiMathy,

voici ma gestion de consommables
Gestion-de-stock-consommables-informatiques.xlsm (1,8 Mo)

Dans ma UserForm « Test_Mulipage » Onglet « Entrées », je voudrais que ma combobox7 (au-dessus du champ « Date Entrée » m’affiche les dates de ma feuille de calcul « ENTREES » sans doublon et par ordre chronologique.

2ème soucis :
D’ailleurs vous constaterez un bug à partir de la ligne 6, mes dates ne se mettent pas au format dd/mm/yyyy quand je rentre une nouvelle entrée (Userform Ajouter_Entrées_en_stock). J’ai testé des dizaines de solutions, rien à faire, je n’y arrive pas malgré Format(TextBox1, « DD/MM/YYYY »). Si en même temps vous avez également une solution pour ça…

Merci

Bonjour,
A tester
Gestion-de-stock-consommables-informatiques (2).xlsm (1,8 Mo)

Mimimathy bonjour,

oui, tu as réglé les 2 soucis.
Cependant mon objectif est d’apprendre en même temps et là je ne comprends pas bien.

Pour le 1er soucis « liste déroulante triée sans doublon » j’ai vu que tu avais fait la macro « tri ». Mais je ne la comprends pas du tout, je ne vois dedans aucune référence sur ma colonne « Date entrée », ni comment et quand tu fais appel à cette macro.

Pour le 2ème soucis « format de date » je ne vois pas ce que tu as fait non plus car ma macro est restée telle quelle, le format de mes cellules également.

Merci de ton éclaircissement.

Re,
Pour le combobox, la macro se trouve dans l’userform qui appele à la fin la macro TRI

Private Sub ComboBox7_DropButtonClick()
Dim f As Worksheet, a(), I%, temp()
Dim mondico As Object
Set f = Sheets("ENTREES")
  Set mondico = CreateObject("Scripting.Dictionary")
  a = f.Range("A4:A" & f.[A65000].End(xlUp).Row)
  For I = LBound(a) To UBound(a)
   If a(I, 1) <> "" Then mondico(a(I, 1)) = ""
  Next I
  temp = mondico.keys
  Call tri(temp, LBound(temp), UBound(temp))
  ComboBox7.List = temp
End Sub

Pour le problème de date dans l’userform Ajouter Entrées en stock
sur la macro du bouton Ajouter


'Ajout des données dans le tableau

If erreur = 0 Then
    Dim ligne As Integer
    If remplissage_article_1 = 1 Then
        Worksheets("ENTREES").Select
        ligne = Sheets("ENTREES").Range("A1000").End(xlUp).Row + 1
        'Saisie des données communes
        Cells(ligne, 1) = Format(TextBox1.Value, "mm/dd/yyyy") '**ICI LE FORMAT POUR LA DATE**
        Cells(ligne, 5) = TextBox4.Value
        Cells(ligne, 6) = TextBox5.Value
        Cells(ligne, 7) = TextBox6.Value

Ok vu.
1er soucis ok, j’ai vu j’ai compris, nickel.

Cependant pour le 2ème soucis, je ne comprends pas pourquoi on impose le format ```« mm/dd/yyyy »

mais qui finalement renvoi le format dd/mm/yyyy

ça bug dans mon cerveau ou il y a une explication rationnelle ?

Re,
VBA c’est la langue de " Shakespeare" Américain, et dans leur environnement les dates sont au format mm/dd/yyy, d’ou la transformation pour nous Français
D’ailleurs, en Angleterre le format de date est identique au notre ( jour en premier suivi du mois)

Bah put… ! c’est chaud faut le savoir. Maintenant je le sais.

Merci à Toi

En fait, le tri ne se fait pas bien. Si tu reprends ton fichier tu verras que dans la combobox1 la date du « 07/06/2022 » se positionne entre le 09/06/2022 et le 10/06/2022

Parce qu’il faut savoir que je peut antidater des entrées si litige.

Re,
Remplace dans le module5 la macro TRI par celle-ci pour une tri décroissant

Sub tri(a, gauc, droi)       
Dim ref, g, d, temp
ref = a((gauc + droi) \ 2)
g = gauc: d = droi
Do
    Do While a(g) > ref: g = g + 1: Loop
    Do While ref > a(d): d = d - 1: Loop
    If g <= d Then
      temp = a(g): a(g) = a(d): a(d) = temp
      g = g + 1: d = d - 1
    End If
Loop While g <= d
If g < droi Then Call tri(a, g, droi)
If gauc < d Then Call tri(a, gauc, d)
End Sub

Pour un tri croissant

Sub tri(a, gauc, droi)
Dim ref, g, d, temp
ref = a((gauc + droi) \ 2)
g = gauc: d = droi
Do
    Do While a(g) < ref: g = g + 1: Loop
    Do While ref < a(d): d = d - 1: Loop
    If g <= d Then
      temp = a(g): a(g) = a(d): a(d) = temp
      g = g + 1: d = d - 1
    End If
Loop While g <= d
If g < droi Then Call tri(a, g, droi)
If gauc < d Then Call tri(a, gauc, d)
End Sub

Bonjour Mimimathy,

malheureusement y’a toujours un bug. voici ce que ça donne en croissant et décroissant :
image

Désolé

Re,
Désolé, pas chez moi
image
Gestion-de-stock-consommables-informatiques (2).xlsm (1,8 Mo)

Ce sujet a été automatiquement fermé après 30 jours. Aucune réponse n’est permise dorénavant.