Macro par ordre alphabétique

pompaero

XLDnaute Impliqué
Bonjour à tous

Dans un fichier, il y a une feuille "Cat et theme" qui sert de BDD pour plusieurs UF ou se trouve 3 combobox en cascade
(ComboBox1 = Catégorie, ComboBox2 = Unité de valeur, ComboBox3 = thème).
Mon soucis est que la BDD va être renseigné régulièrement et donc va devenir importante. Afin de faciliter la recherche dans les ComboBox, j'aimerai si cela est possible une macro permettant de mettre cette feuille "Cat et theme" par ordre alphabétique.
L'idéal est que je puisse mettre cette macro ensuite la ou je veux dans mes codes.

Merci à vous.

P.J
 

Pièces jointes

  • Essai liste Alphabé.xlsm
    74 KB · Affichages: 71

pompaero

XLDnaute Impliqué
Re : Macro par ordre alphabétique

Bonjour Dranreb

Merci d'être arrêté sur mon post.

Je me doutais qu'il y aurai plus simple mais le soucis c'est que j'ai trouvé un Formulaire (UF_Thème) complexe niveau codage pour moi (mais fort intéressant) mais n'enregistre pas par ordre alphabétique, c'est donc pour cela que j'aimerai une macro.
Je joint un fichier un peu plus complet avec un
UF_Thème (code complexe pour moi) qui permet de remplir la BDD feuille "Cat et theme"
UF_Formation (avec les 3 CBx en cascade) qui récupère les données telle qu'elle sont dans "Cat et thème".

En ayant une macro alphabétique, je pensais pouvoir la mettre dans différent code si nécessaire.

Merci pour tout
Cdlt
P.J
 

Pièces jointes

  • Formation continue.xlsm
    208.4 KB · Affichages: 66
  • Formation continue.xlsm
    208.4 KB · Affichages: 58

Regueiro

XLDnaute Impliqué
Re : Macro par ordre alphabétique

Bonsoir le Forum - pompaero
Voici ton code avec le tri ( Quick Sort ) de Boisgontier

Code:
Private Sub UserForm_Initialize()
 Dim J As Integer
  Dim temp
  Set Clients = CreateObject("Scripting.Dictionary")
  With Ws
    For Each Cel In .Range("Tableau1[Catégorie]").SpecialCells(xlCellTypeConstants)
        If Not Clients.exists(Cel.Value) Then Clients.Add Cel.Value, Cel.Value
            temp = Clients.items
    Next Cel

  End With
      Call Tri(temp, LBound(temp), UBound(temp)) ' voir module mod_tri
  Me.ComboBox1.List = temp

'Mettre code dans un module
Sub Tri(a, gauc, droi) ' Quick sort
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

@+
 

Dranreb

XLDnaute Barbatruc
Re : Macro par ordre alphabétique

À priori mettez ça :
VB:
Option Explicit
Dim CLCatTh As ComboBoxLiées

Private Sub UserForm_Initialize()
Set CLCatTh = New ComboBoxLiées
CLCatTh.Plage Feuil2.[A1]
CLCatTh.Add Me.ComboBox1, "Catégorie"
CLCatTh.Add Me.ComboBox2, "Unité de Valeur"
CLCatTh.Add Me.ComboBox3, "Thème"
CLCatTh.Add Me.ComboBox4, "Référent"
CLCatTh.CorrespRequise = True
CLCatTh.Actualiser
End Sub
Et ne vous occupez plus de ces 4 ComboBox sauf dans la Sub CommandButton1_Click pour récupérer leurs valeurs.
Vous devriez donner des noms mnémoniques à vos contrôles. Et aussi aux objets Worksheet de la rubrique Microsoft Excel Objets. FCatTh et FMvts serait tout de même un peu plus parlant que Feuil2 et Feuil3 ! C'est la 1ère propriété (Name) à changer pour ça dans la fenêtre de propriétés.

Maintenant en ajoutant le mot clé WithEvents dans la déclaration de CLCatTh vous pourriez en plus bénéficier de son évènement Change juste pour être informé que toute les valeurs d'une ligne unique ont été sélectionnées, ou pas.
Même sans ce mot clé, vous pouvez vider les 4 ComboBox en faisant CLCatTh.Nettoyer.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Macro par ordre alphabétique

Bonjour.

…Parce que ce qui est complexe dans l'UF_Thème c'est seulement le processus de mise à jour et non pas la synchronisation des ComboBox. Comment pourrait-ce être complexe alors que l'objet ComboBoxLiée se charge de tout, on a juste à l'instruire de ce qu'il a en charge.
(Je parle naturellement seulement de la complexité de la programmation applicative, celle de la programmation de service n'a aucune importance: on n'y va que pour relire les commentaires d'aide à l'utilisation)

Vraiment dommage de n'utiliser les modules de service, dont le projet est de toute façon équipé, seulement là où sa simplicité d'utilisation est noyée dans un contexte compliqué !
 
Dernière édition:

pompaero

XLDnaute Impliqué
Re : Macro par ordre alphabétique

Bonjour Reguiero et Dranreb

Merci de votre soutien.
Reguiero : j'ai essayé ta proposition, cela à l'aire de fonctionner sur la Cbx 1.
Dranreb : Ta proposition également fonctionne.
Mais se que j'aimerai dans mon fichier principal sur les 2 UF avec Cbx en cascade serai d'avoir le même principe que les Cbx de UF_Thème, c'est à dire par ordre alphabétique quelque soit l'ordre de BDD.

Je me doute bien un peu qu'il doit y avoir une relation avec le codage de UF_Thème, j'ai beau lire et relire les codes mais n'arrive pas à déchiffrer correctement ces derniers.
Dranreb, je vois que tu parles de l'objet ComboBoxLiée, d'après ton dernier msg je crois qu'il faut se diriger dans ce sens.

Cdlt
 

Dranreb

XLDnaute Barbatruc
Re : Macro par ordre alphabétique

Me signaler ce qui n'est pas clair dans les commentaires explicatifs du module de classe ComboBoxLiées.
Me signaler aussi le point le plus obscur pour toi de la programmation de l'UFm de mise à jour. Je te suggèrerai un commentaire pour le rendre plus clair. Par exemple à la première utilisation de CL.PlgTablo mettre : ' Rappel: il est vivement recommander d'utiliser cette propriété en lieu et place d'une expression Range classique pour garantir qu'il s'agit bien de la même plage que celle sur laquelle s'appuie CL, l'objet ComboBoxLiées.
 
Dernière édition:

pompaero

XLDnaute Impliqué
Re : Macro par ordre alphabétique

Re Dranreb

Que veux tu dire par :
Vraiment dommage de n'utiliser les modules de service, dont le projet est de toute façon équipé, seulement là où sa simplicité d'utilisation est noyée dans un contexte compliqué !

est ce que mes codes pouraient être remplacé par des codes plus simple en relasion avec UF_Thème ?

J'ai beau relire le codage de UF_Theme, j'arrive pas a déchiffrer, mais j'ai essayé de mettre en place tes conseil dans UF_Formation mais ça Bug sur ComboBox_Change.
 

Pièces jointes

  • Formation continue.xlsm
    211.9 KB · Affichages: 60
  • Formation continue.xlsm
    211.9 KB · Affichages: 66

Dranreb

XLDnaute Barbatruc
Re : Macro par ordre alphabétique

ça Bug sur ComboBox_Change.
C'est normal il ne le faut plus. Je t'ai dit de supprimer tous autres codes se rapportant à ces 4 ComboBox, excepté la récupération de leurs valeurs dans la CommandButton1_Click, parce que c'est désormais CLCatTh, l'objet ComboBoxLiées, qui s'en charge entièrement du seul fait des instructions dans la UserForm_Initialize.

Il ne faut pas s'écarquiller les yeux sur le codage de UF_Theme, il faut aller voir ce que ça signifie dans le module de classe ComboBoxLiées, tout y est expliqué en détail. Relis autant de fois qu'il le faudra tout ce qui se rapporte à sa propriété PlgTablo jusqu'à ce que tu aura compris. Et si tu n'y arrive pas, explique moi pourquoi, il te manque peut être des bases comme les notions d'expression Range ou plus généralement d'expression objet, de méthode et de propriété.

Normalement il ne faudrait plus de Sub CBxQelqueChose_Change si un ComboBoxLiées la prend en charge. Dans UF_Thème, les trois qui mettent en majuscule pourraient être avantageusement remplacées par une seule qui corrige à la frappe :
VB:
Private Sub CL_KeyPress(ByVal CBM As ComboBoxMmbr, ByVal KeyAscii As MSForms.ReturnInteger)
Select Case CBM.Col
   Case 1, 2, 4: KeyAscii = Asc(UCase$(Chr$(KeyAscii)))
   End Select
End Sub
 
Dernière édition:

pompaero

XLDnaute Impliqué
Re : Macro par ordre alphabétique

Re

ça y est, les codes des Cbx sont supprimés et mettant tes conseils en place, tout fonctionne comme je le souhaitais sur tous les UF de mon fichier principal et tout fonctionne correctement.

Merci également pour le petit code mettant les Cbx en majuscule dans UF_Theme.

Je vais continuer à lire, décortiquer les codes se rapportant à UF_Theme pour essayer de comprendre et si besoin je reviens vers toi pour des explications.
Merci de ta sympathie pour tout.

Cdlt
 

Discussions similaires

Statistiques des forums

Discussions
312 503
Messages
2 089 055
Membres
104 013
dernier inscrit
VELONDAHY Mickaël