XL 2019 formulaire de recherche à 4 ComboBox

Emmanuel-G

XLDnaute Nouveau
Bonjour

Etant novice dans la programation VBA sous Excel et après de multiple essais qui ne fonctionnait pas, n'ayant rien trouvé d'équivalent sur le net (Forum, you tube etc..) .

Je sollicite votre aide pour ce formulaire de rechercher fonctionnant avec quatre ComboBox (Clien, titre, pagination, pli).

La base de données se compose de 43 collonnes réparti de 7 ComboBox, 1TextBox et 35 TextBox à valeur numérique).

Je vous remercie par avance de votre aide
 
Solution
Je me suis amusé à terminer l'UFmRecherche parce qu'il était assez simple.
Il me paraît cependant assez inutile: S'il fallait absolument pouvoir consulter tous les tableaux de "Liste Rotoman" on pourrait très bien mettre le même dispositif dans l'UFmSaisie.

*** Pièce jointe mise à jour ***

Emmanuel-G

XLDnaute Nouveau
Bonsoir.
Cette ressource se charge de tout :

Bonsoir.
Cette ressource se charge de tout :
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Remarque : s'il n'est pas aisé d'envisager un classeur dont le projret VBA fait référence à celui d'un complément .xlam, s'il devait par exemple être ouvert depuis un chemin de réseau local ou distribué à plusieurs utilisateurs, il serait possible d'équiper des modules de service nécessaires le classeur modèle de la base de données à consulter et mettre à jour que vous allez joindre.
 

Emmanuel-G

XLDnaute Nouveau
bonjour

Je vous envoie le fichier du programme en question, il y a encore pas mal de travail à faire. Une fois la partie recherche faite, il ne me restera plus que la partie modification et suppression, et si tout fonctionne il n'y aura plus que des amélioration à y apporter (mettre les cases en numérique etc ...).

Je tiens à vous remercier pour la réponce et pour le programme, l'installation s'est pas trop mal déroulé mais je n'arrive pas à le faire fonctionner pour le momment.
Cordialement
Emmanuel
 
Dernière édition:

Emmanuel-G

XLDnaute Nouveau
Voici le fichier du programme (le bouton de recherche doit avoir pour seul fonction la recherche pour éviter que les personnes pas habilité ne puisse pas avoir accès aux modifications car par la suite les boutons (affiche le formulaire de saisie et modification / supression) seront proteger par mot de passe).
 

Pièces jointes

  • Programe des réglages Machine.xlsm
    49.4 KB · Affichages: 26
Dernière édition:

Dranreb

XLDnaute Barbatruc
Je vais regarder votre fichier.
Les conversion en numériques sont aussi assumées par mes objets ComboBoxLiées et ControlsAssociés si on utilise leurs méthodes ValeursVers.
Avez-vous vu que juste après l'installation, "CLsCAs" doit être coché dans les références du projet VBA de votre classeur d'application ? S'il a été installé lors d'une session Excel antérieure, vous devez, pour l'ouvrir à nouveau, cocher "CBx liées et Ctl associés" dans les compléments, coté Excel cette fois.
 

Dranreb

XLDnaute Barbatruc
J'ai ouvert le fichier.
Les points positifs de prime abord
1) — La référence à CBxLCtlA.xlam est bien cochée.
2) — La base à mettre à jour est sous forme de tableau
Les point plus gênants
1) — Des listes indépendantes. J'espère qu'elle ne devront pas être appliquées à des ComboBox devant faire l'objets de recherche dans la base. L'objet ComboBoxLiée fabrique en effet automatiquement des listes dynamiques classées et sans doublon à partir de ce qu'il trouve dans la base et de ce qui a déjà été renseigné dans certaines.
2) — Plusieurs UserForm. Je propose d'habitude un seul pour consultation et mise à jour d'une base.
On décide si ou va ajouter, modifier ou supprimé seulement après avoir renseigné les ComboBox correspondantes. La reherche est toujours obligatoire, même pour du neuf.
 

Dranreb

XLDnaute Barbatruc
Le code sera à peu près comme ça :
VB:
Option Explicit
Private WithEvents CLs As ComboBoxLiées, CAs As ControlsAssociés, LCou As Long, TVL()
Private Sub UserForm_Initialize()
   Set CLs = CLsCAs.Création.ComboBoxLiées: CLs.Plage Feuil2
   Set CAs = CLsCAs.Création.ControlsAssociés: Set CAs.Colonnes = CLs.Colonnes
'———————————————————————————
'Partie à compléter par vous. Juste la 1ère instruction :
   CLs.Add Me.cboClient, "Client"
'  faire :
'  CLs.Add Me.NomDuContrôle, IntituléColonne pour une ComboBox à liste dynamique
'  CAs.Add Me.NomDuContrôle, IntituléColonne pour tout autre contrôle y compris une ComboBox à liste fixe
'Fin de la partie à compléter
'———————————————————————————
   CLs.CouleurSympa
   CLs.LMaxDropBtn = 75
   CLs.Actualiser
   End Sub
Private Sub CLs_Change(ByVal Complet As Boolean, ByVal NbrLgn As Long)
   CBnEchap.Caption = "Effacer"
   If NbrLgn = 1 Then
      CBnEntrée.Enabled = True: CBnEntrée.Caption = "Modifier": CBnSuppr.Enabled = True
      Exit Sub: End If
   CBnSuppr.Enabled = False
   CBnEntrée.Caption = "Ajouter"
   CBnEntrée.Enabled = Complet And NbrLgn = 0
   LCou = 0
   ReDim TVL(1 To 1, 1 To CLs.Colonnes.Count)
   CAs.ValeursDepuis TVL
   End Sub
Private Sub CLs_BingoUn(ByVal Ligne As Long)
   LCou = Ligne
   TVL = CLs.Lignes(LCou).Range.Value
   WshSaisDons.[E3:E10].Value = WorksheetFunction.Transpose(TVL)
   CAs.ValeursDepuis TVL
   End Sub
Private Sub CBnEntrée_Click()
   CAs.ValeursVers TVL
   If LCou = 0 Then
      CLs.ValeursVers TVL
      CLs.Lignes.Add.Range.Value = TVL
      CLs.Actualiser
   Else: CLs.Lignes(LCou).Range.Value = TVL: End If
   End Sub
Private Sub CBnSuppr_Click()
   If MsgBox("Êtes vous sûr de vouloir supprimer ça définitvement ?", vbYesNo + vbExclamation _
      + vbDefaultButton2, Me.Caption) = vbNo Then Exit Sub
   CLs.Lignes(LCou).Delete
   CLs.Actualiser
   End Sub
Private Sub CBnEchap_Click(): If CLs.ChangéÀLEchap Then Exit Sub
   Select Case CBnEchap.Caption
      Case "Effacer": CLs.Nettoyer: CBnEchap.Caption = "Quitter"
      Case Else: Unload Me: End Select
   End Sub
Mais ça plante parce que la cboClient a un RowSource renseigné, ce qui interdit au CLs de lui affecter la liste des noms de clients trouvés dans la base …
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Oui c'est bien cela. Les ComboBox prise en charge par CLs ne doivent donc pas avoir leur propriété RowSource renseignée. C'est bien uniquement d'après la base à mettre à jour que ces listes sont automatiquement déterminées par l'objet ComboBoxLiées. Si on y tape un nouveau client et qu'on valide, il figurera automatiquement dans cette liste pour la suite des opérations.
Maintenant si vous y tenez, mais ça complique peut être pour rien, il est possible de stopper cet objet en vue d'affecter temporairement une liste fixe à la ComboBox. Mais préférez
cboCLient.List = [Tableau_Client[Client]].Value plutôt que l'utilisation de RowSource.
 
Dernière édition:

Emmanuel-G

XLDnaute Nouveau
les Combobox , client et titre sont énorme (plus de 200 pour la client et environ 350 pour la titre sans compter sur les nouveaux clients qui arrive, d'autre vont partir puis revenir et certain définitivement, pas facile à gérer.
je regarde ça demain en fin d'aprés-midi et j'essaierais de conprendre tout ça.
Bonne soirée à vous et merci pour cette rapidité
 

Dranreb

XLDnaute Barbatruc
Pour l'instant il n'y a rien d'énorme puisqu'il n'y a que 7 lignes dans la base. Les listes des ComboBox prises en charge par CLs ne peuvent donc pas comporter plus de 7 éléments. Elles pourraient à la rigueur en comporter moins s'il y avait des doublons dans la colonne. Mais il ne peut pas y avoir de doublon de l'ensemble de la combinaison de toutes les ComboBox prises en charge par CLs.
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Information: Je commence aussi mes noms d'objets par un trigramme de 3 lettres, mais ce ne sont pas les même que les vôtres. Les miens obéissent à une règle simple à se rappeler: S'il n'y a qu'une majuscule dans son nom de type, je prends les 1ères lettres, sauf les "a". Sinon je prend la 1ère majuscule, la dernière majuscule et la dernère lettre. Donc entre autres CBx pour CombBox, TBx pour TextBox et CBn pour CommandButton.
Bon, j'ai quand même 9 exceptions: Pour Chart je prends Cht et non Chr comme l'indiquerait la règle, pour CheckBox Ckx et non CBx (qui se confondrait avec celui des ComboBox), pour Collection: Cln et non Col, pour Control: Ctr et non Con, pour File: Fle et non Fil, pour Folder: Fdr et non Fol, pour Label: Lab et non Lbe, pour Workbook: Wbk et non Wor, enfin pour Worksheet: Wsh et non Wor.
À noter que selon cette règle Frm est un Frame et non un UserForm qui lui a UFm.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Je me suis amusé à terminer l'UFmRecherche parce qu'il était assez simple.
Il me paraît cependant assez inutile: S'il fallait absolument pouvoir consulter tous les tableaux de "Liste Rotoman" on pourrait très bien mettre le même dispositif dans l'UFmSaisie.

*** Pièce jointe mise à jour ***
 
Dernière édition:

Membres actuellement en ligne

Statistiques des forums

Discussions
315 127
Messages
2 116 534
Membres
112 771
dernier inscrit
mikadu49