XL 2010 La feuille Tableau référentiels menus reste vide

Statut
N'est pas ouverte pour d'autres réponses.

BUDGETS

XLDnaute Impliqué
Bonsoir Dranreb,
Comment allez-vous?
Je vous envoie comme vous me l'avez demandé mon fichier avec userform initialize. Comme je n'ai rien compris aux cbo liées, j'ai tenté d'écrire le code mais la plupart du temps la liste déroulante ne comprend pas les termes du code (par exemple ContrôlesAssociés), donc j'ai laissé tomber.
Bonnes soirée, nuit et continuation.
 

Fichiers joints

Dranreb

XLDnaute Barbatruc
Bonsoir.
Mettez derrière chaque contrôle une virgule suivie du titre de la colonne contenant l'information qu'il devra afficher.
Je n'ai pas le DTPicker, et je ne suis pas le seul. Si je dois vous retourner le classeur équipé, mettez une TextBox à la place. Je veillerai à ce qu'un calendrier soit afficher dessous quand on cliquera dedans si vous voulez.
Ne faites de CL.Add que pour les ComboBox dont les listes doivent être calculées dynamiquement en fonction de ce qui existe dans la base et des choix déjà effectués dans certaines. Pour les ComboBox indépendantes et les contrôles autres que les ComboBox faites des CA.Add.
 

BUDGETS

XLDnaute Impliqué
Bonsoir.
Mettez derrière chaque contrôle une virgule suivie du titre de la colonne contenant l'information qu'il devra afficher.
Je n'ai pas le DTPicker, et je ne suis pas le seul. Si je dois vous retourner le classeur équipé, mettez une TextBox à la place. Je veillerai à ce qu'un calendrier soit afficher dessous quand on cliquera dedans si vous voulez.
Ne faites de CL.Add que pour les ComboBox dont les listes doivent être calculées dynamiquement en fonction de ce qui existe dans la base et des choix déjà effectués dans certaines. Pour les ComboBox indépendantes et les contrôles autres que les ComboBox faites des CA.Add.
Bonjour Dranreb,

Comment allez-vous, bien j'espère.
J'ai remplacé le DTPicker par un texbox comme vous l'avez demandé. Oui, je veux bien qu'un calendrier soit affiché.
J'espère avoir compris la virgule suivie du titre de la colonne.
Pour les CL.Add me, j'ai modifié sans avoir rien compris. Les outils qui suivent un outil code sont dépendants dudit outil code.
Bonnes journée et continuation.
 

Fichiers joints

Dranreb

XLDnaute Barbatruc
D'accord, je l'ai équipé.
Mais j'ai arrêté à la 3ième erreur de titre.
À mon avis si c'est juste pour la date de création, qui ne changera plus, on n'aurait pas besoin de la saisir. Mais bon. Il faut avancer…
 

Fichiers joints

BUDGETS

XLDnaute Impliqué
D'accord, je l'ai équipé.
Mais j'ai arrêté à la 3ième erreur de titre.
À mon avis si c'est juste pour la date de création, qui ne changera plus, on n'aurait pas besoin de la saisir. Mais bon. Il faut avancer…
Feuille accueil, clic sur le rectangle Consultation et mise à jour des référentiels : erreur 1004 en tentant d'analyser la spécification de colonne "CodeJour" Erreur définie par l'application ou par l'objet Remarque : la plage à couvrir est définie A2:O5 de la feuille WshRéférentielsMenus (Référentiels menus). Clic sur ok : la feuille code de ComboBoxLiées apparaît à l'écran : private sub CorrigerColonne : l'erreur semble être à la fin de la procédure (Colonne = -1:Stop). Stop est entouré de jaune
 

BUDGETS

XLDnaute Impliqué
Il n'existe pas de titre "Codejour" dans le tableau.
Merci Dranreb. J'ai vu l'erreur : j'ai mes barres d'espacement (pc de bureau et portable) qui fonctionnement mal. J'essaie de faire attentions mais ce n'est toujours pas évident. J'ai donc rectifié Codejour en Code jour, plus d'erreur. Il y en a eu d'autres basées sur le même principe que je n'ai eu aucun mal à rectifier.
Deuxième point : comment as-tu fait pour m'envoyer un fichier complet en si peu de temps ? Tu l'avais en avance préparé pour m'en faire la surprise afin que je n'ai pas à attendre; Merci beaucoup.
Tel qu'il est là, le programme peut-il effectuer les modifications. Ou dois-je te faire un descriptif afin de modifier le programme en conséquence ?
Encore merci pour ta gentillesse, ta patience, ta rapidité. Je ne clos pas le sujet. Je vais faire des essais de création à partir du fichier ci-dessus;ceci est prévu pour samedi 26 janvier 2019 dans la soirée.
Bonnes fin de journée, soirée, nuit et continuation.
 

Dranreb

XLDnaute Barbatruc
Le calendrier je l'avais tout fait dans un classeur et les modules de service je les ai glissé déplacés dans l'explorateur de projet depuis le CBxLiésDG-59.xlsm. Je n'ai eu qu'à ajouter les déclaration Private en tête de CL et de CA. Mais il n'est pas encore prêt à réaliser les mises à jour. Il faut reprendre et adapter les petites procédures, CA_Change et tout ça. Je corrigerai les détails qui n'iront pas, ou je le ferai entièrement sur une version avec les titres corrigés.
 

BUDGETS

XLDnaute Impliqué
Le calendrier je l'avais tout fait dans un classeur et les modules de service je les ai glissé déplacés dans l'explorateur de projet depuis le CBxLiésDG-59.xlsm. Je n'ai eu qu'à ajouter les déclaration Private en tête de CL et de CA. Mais il n'est pas encore prêt à réaliser les mises à jour. Il faut reprendre et adapter les petites procédures, CA_Change et tout ça. Je corrigerai les détails qui n'iront pas, ou je le ferai entièrement sur une version avec les titres corrigés.
Par rapport à ton fichier et à mon fichier Menus 2 : j'ai deux solutions possibles dont la première est ma préférence :
1) Créer tous les modules de service et modifier les modules et le code des feuilles dans mon fichier Menus 2; dans ce cas, quel ordre suivre pour la création ? (à mon avis, d'après ce que j'ai cru comprendre, créer les modules de service en premier, les modules en second et enfin le code des feuilles)
2) Sauvegarder ton fichier sous Menus 2 (ce qui implique de ne pas savoir de quoi est composé le code de chaque module de service, le code des modules, le code des feuilles et d'essayer de comprendre leur signification respective).
Qu'en pensez-vous ?
 

Dranreb

XLDnaute Barbatruc
J'ai mis tous les modules de service nécessaires pour l'instant, ils ne sont pas à retoucher (ou alors que par mes soins). Des modules applicatifs, alors, par contre ?
Ne nous dispersons pas. On a un UserForm à terminer.
 

BUDGETS

XLDnaute Impliqué
J'ai mis tous les modules de service nécessaires pour l'instant, ils ne sont pas à retoucher (ou alors que par mes soins). Des modules applicatifs, alors, par contre ?
Ne nous dispersons pas. On a un UserForm à terminer.
Tu n'as pas compris ce que j'ai dit. Loin de moi l'idée de retoucher les modules de service (et pour être franc, j'en serai incapable); qu'entends-tu par modules applicatifs ? UserFrom à terminer : lequel ? Pour la suite du programme, il y aurait peut-être lieu de prévoir une case à cocher (À modifier); si la réponse est oui, il y aura lieu de faire apparaître le référentiel à modifier, d'appliquer la modification ou les modifications nécessaires, de renvoyer les nouvelles données dans la feuille WshRéférentielsMenus sans qu'il y ait pour autant une nouvelle création. Dernière question : Pour chaque outil, est-il possible de créer une liste de choix à laquelle il sera fait appel selon l'outil à renseigner ?
 

Dranreb

XLDnaute Barbatruc
Il reste à écrire dans l'UserForm, une fois les titres corrigés dans la Sub UserForm_Initialize, les procédures applicatives nécessaires à la mise à jour. Je ne considère pas que la balle soit dans mon camp, puisque je n'ai pas en ma possession ce classeur avec le code corrigé.
Comme dans le CBxLiéesDG-59.xlsm, je les écris généralement de telle sorte que si on tape dans les ComboBox prises en charge par CL une combinaison de valeurs qui existe déjà on est d'office orienté vers la modification. C'est seulement si ça n'existe pas que c'est en vue d'un ajout.
On peut attribuer une liste à une ComboBox indépendante, pas à une ComboBox prise en charge par CL vu que c'est lui qui l'attribue.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
Vous faites allusion, du moins d'après ce que je comprends, à une table annexe comportant au moins 2 colonnes: 1—une désignation Outil, 2—une désignation Choix. Mettez ce tableau dans une feuille. On va déclarer un Private CLsO As ComboBoxLiées en tête de l'UserForm pour se faciliter la programmation. Pas besoin, à priori, qu'il ait l'attribut WithEvents, puisqu'on ne va pas se servir de ses évènements. Mais mettez quand même dans l'UserForm_Initialize des CLsO.Add pour les ComboBox concernées, avec les titres de ce tableau annexe. Attention, si certaines sont déjà prises en charge par CL ça va d'un coup fortement compliquer l'ensemble. Deux objets ComboBoxLiées ne peuvent en effet pas prendre en charge simultanément une même ComboBox. Il faudra donc un système de basculement du fonctionnement soit de l'un soit de l'autre. S'il n'est déjà pris en charge que par CA, pas de problème …en principe.
 

BUDGETS

XLDnaute Impliqué
Bonjour.
Vous faites allusion, du moins d'après ce que je comprends, à une table annexe comportant au moins 2 colonnes: 1—une désignation Outil, 2—une désignation Choix. Mettez ce tableau dans une feuille. On va déclarer un Private CLsO As ComboBoxLiées en tête de l'UserForm pour se faciliter la programmation. Pas besoin, à priori, qu'il ait l'attribut WithEvents, puisqu'on ne va pas se servir de ses évènements. Mais mettez quand même dans l'UserForm_Initialize des CLsO.Add pour les ComboBox concernées, avec les titres de ce tableau annexe. Attention, si certaines sont déjà prises en charge par CL ça va d'un coup fortement compliquer l'ensemble. Deux objets ComboBoxLiées ne peuvent en effet pas prendre en charge simultanément une même ComboBox. Il faudra donc un système de basculement du fonctionnement soit de l'un soit de l'autre. S'il n'est déjà pris en charge que par CA, pas de problème …en principe.
Bonsoir Danreb,
J'espère que vous allez bien.
Je souhaite, si vous me le permettez, vous poser des questions et,ce n'est qu'un début.
1)Le code des modules de classe vient, en grande partie, de Visual Basic, version 6 ? Oui - Non
2) Les modules de classe que vous avez créés commencent la plupart par C : le C signifie qu'il s'agit d'un module de classe ? Oui - Non
3) Si oui, pour quelles raisons que les modules de classe ComboBoxLiées, ComboBoxMmbr (pour celui-ci, je n'ai pas trouvé ce que signifiait Mmbr), ControlsAssociés ne sont-ils pas précédés de la lettre C ?
4) CAsso : module de classe mais que signifie, que représente Asso ? Asso = associé, lié ? Oui - Non; dans un module il est question de TCAsso : que signifie ce T ?
5) Il y avait beaucoup de nom de module que je ne comprenais pas. J'ai regardé le trigramme et là la lumière a fusé. CAssoFrm = frame (cadre);CAssoOBn = bouton d'option;CAssoTBx = TextBox;ComboBoxMmbr : pas trouvé sa signification;CAssoCBx =ComboBox;
6)Dans les modules de classe, MSForms = UserForm : Oui - Non
7) Dans les modules de classe, il est souvent employé CTl ou CTI : je n'arrive pas à distingues s'il s'agit d'un L ou d'un l ou bien d'un I ou d'un i;je pense qu'il s'agit d'un l comme Léon et qu'il concerne les contrôles (objets, outils).
8) Fmt : abréviation pour format : Oui - Non
9) Tous les modules de classe sont faits pour organiser le programme même si certains, dans mon cas particulier, ne seront pas utilisés (par exemple CAssoOBn) : oui - Non
Dans un prochain message, je te poserai des questions sur certaines lettres qui sont employées et pour lesquelles je n'ai pas trouvé de signification.
Bonnes soirée, nuit et continuation.
 

Dranreb

XLDnaute Barbatruc
Bonsoir. Sacré quiz, lol.
1) — Oui, c'est même tout le langage qui en vient en quasi totalité je dirais, au point de ne plus me souvenir des infimes différences. Je ne tiens compte en disant cela de la bibliothèque mise à disposition par l'application hôte ni d'éventuels rouages internes facilitant l'osmose entre les deux…
Mais le code de mes modules de classe, c'est moi qui l'ai entièrement conçu, quand même.
2) — Non. C'est un simple hasard, que ComboBoxLiées et ControlsAssociés commencent par la même lettre. Mais tant mieux, ça suggère des similitudes qu'ils ont en effet. Je donne à un module de classe destiné à être utilisé par le programmeur d'application un nom qui évoque ce qu'il représente, comme le fait la bibliothèque Excel: Workbook, Worksheet, Range etc. sans préfixe.
3) — 1ère question sans objet, donc. Mmbr signifie membre. ComboBoxMmbr est donc un objet membre d'un ensemble géré par l'objet ComboBoxLiées. En principe on a peu à s'en soucier, sauf besoins particuliers. Il est cependant transmis pour information par certains évènements sous le nom CBM.
4) — Non et Oui, je n'ai pas repris le principe de Mmbr à la fin pour les membres parce qu'il en existe de plusieurs sortes. Un CAsso est membre d'un ensemble géré par un objet ControlsAssociés. C'est un Control associé, l'un de ceux de l'ensemble, quoi. Le T signifie quasiment toujours tableau pour moi. Bien que le nom Add des méthodes qui y ajoutent un élément suggère qu'il s'agirait de collections, les ensembles sont en fait sous la forme de tableaux d'objets.
5) — Bravo !
6) — Non. MSForms est le nom de la bibliothèque contenant la définition de la plupart des contrôles utilisables dans les UserForm.
7) — Eh oui, c'est regrettable cette confusion, mais quel meilleur trigramme possible (et pas trop con ;)) pour Control ?
8) — J'ai dû rechercher. Oui Fmt c'est Format, mais ce n'est utilisé avec ce nom qu'en interne. Dans un Add de ControlsAssocié c'est Format comme pour un ComboBoxLiées si on veut l'utiliser et ce en nommant l'argument.
9) — Non, je ne dirais pas ça. Le rôle d'un module de classe est de définir un type d'objet, avec ses propriétés, méthodes et évènements.
J'avais rédigé ce texte assez complet dans un ficheier LeçonModuleDeClasse.txt :
Un module de classe est à la fois un modèle d'objet, son plan de construction et la programmation destinée à fonctionner sur les exemplaires qui en seront créés. On préfèrera ce mot "exemplaire" à l'anglicisme "instance" du jargon informatique. Le nom du module de classe devient aussi le nom du type de donnée objet qu'il définit, de sorte qu'on peut le préciser derrière As dans une déclaration Dim, Private ou Public.
Dans la programmation extérieure au module de classe on ne voit de celui ci que les éléments y étant précisés avec le mot clé Public, mais, à la différence d'un module ordinaire, on ne peut y accéder qu'à condition de le faire précéder d'un point, puis encore devant, à moins d'une instruction With préalable la précisant déjà, d'une expression représentant un exemplaire de cet objet (sinon: erreur de compilation). S'il s'agit d'une variable, il faut en outre qu'une expression de son type lui ait été affectée par un Set (sinon: erreur d'exécution, cette fois). Fort heureusement, l'expression formée du mot clé New suivi du type d'objet (qui est en même temps le nom de son module de classe) représente un exemplaire tout juste créé de ce type d'objet.
Propriétés et méthodes sont les appellations conventionnelles de ces éléments visibles de l'extérieur du module de classe, déjà vues dans l'aide de VBA à propos des objets de bibliothèques fournies. Une chose déclarée Public dans un module de classe a un statut de propriété quand il s'agit d'une simple variable, d'une Function ou d'une Property Get dépourvues de paramètre, ou d'une Property Let ou Set munie du seul faux paramètre formel représentant la valeur à lui attribuer. Dans tous les autre cas il s'agit d'une méthode, en particulier quand c'est une Sub avec ou sans paramètre.
Enfin, un objet peut aussi décréter des évènements dans un autre module objet. Pour cela, il doit y être déclaré en tête avec le mot clé WithEvents. Cela a pour conséquence d'installer son nom dans la liste de gauche (Objet) qui surmonte la fenêtre de code. S'il y est sélectionné, celle de droite (Procédure) propose les différents modèles de procédures pouvant être installés automatiquement pour profiter de ces évènements. Les noms des procédures installées seront de la forme NomObjet_NomÉvènement. Dans le module de classe, ces évènements sont déclarés au moyen d'instructions Event, et, lors des exécutions, décrétés par des RaiseEvent.
Pour être tout à fait complet, il ne resterait qu'un tout petit point à aborder à propos d'une espèce bien étrange de module de classe: le module d'interface. Mais je crois que ça suffit pour aujourd'hui !
Bonne soirée à vous aussi.
 
Dernière édition:

BUDGETS

XLDnaute Impliqué
Bonjour Dranreb,

Comment allez-vous ? Bien, j'espère.
Module CAsso : j'ai écrit des commentaires. Merci par avance de me dire ce que vous en pensez.
Bonnes journée et continuation.
 

Fichiers joints

Dranreb

XLDnaute Barbatruc
Bonsoir.
J'aurais mis des commentaires différents :
VB:
Option Explicit ' Module d'interface avec les CAsso de différents types spécifiques.
'(Peu usité, un module d'interface ne contient que des propriétés et méthodes vides de tout code. Ce sont les procédures _
 correspondantes des modules de classe ayant l'instruction Implements CAsso qui seront exécutées à leurs places.)

' Méthode à usage exclusif de l'objet ControlsAssociés parent de cet objet.
'    Effectue l'opération d'initialisation requise par sa méthode Add.
Public Sub Init(ByVal Parent As ControlsAssociés, ByVal Ctl As MSForms.Control, _
   ByVal Index As Long, ByVal Col As Long, ByVal Format As String, ByVal Mode): End Sub
 
' Propriété Ctl en lecture seule: Contrôle supporté par l'objet.
Function Ctl() As MSForms.Control: End Function

' Propriété Index en lecture seule: Numéro d'ordre de cet objet dans son parent ControlsAssociés.
Function Index() As Long: End Function

' Propriété Col en lecture seule: Numéro de la colonne contenant sa valeur dans le tableau à mettre à jour.
Function Col() As Long: End Function

' Propriété Format en lecture seule: Format appliqué par VBA.Format lors de la conversion de valeur en le texte affiché dans le contrôle.
Function Format() As String: End Function

' Propriété Mode en lecture seule: En vue d'une utilisation non prédéfinie, à la discrétion du programmeur d'application.
Function Mode(): End Function

' Propriété Valeur en lecture/écriture: Valeur de cellule correspondant au texte affiché par le contrôle.
Property Let valeur(ByVal V): End Property
Property Get valeur(): End Property
Le code du ControlsAssociés est en double. Je ne vois pas d'autre explication, si on suppose une fausse manœuvre, que ceci: Vous avez dû créer les modules puis copier/coller leurs codes depuis et vers la fenêtre de code, au lieu de simplement glisser/déplacer leurs noms dans l'explorateur de projets. Pas étonnant que vous m'ayez trouvé rapide l'autre jour, si vous ne saviez pas que c'était comme ça qu'il fallait faire…
Édition: Et l'UFmCalend, vous vous imaginiez que je m'étais amusé à le redessiner et à copier/coller son code ? Non, non. Ayant ouvert le classeur le contenant, je l'avais dans un projet voisin. Je m'étais borné à trainer son nom avec la souris, bouton gauche maintenu enfoncé, puis relâché quand j'étais quelque part dans la zone couverte par votre projet, et hop, j'en avais une copie dedans !

Il n'y a toujours pas le principal: la programmation terminée dans l'UFmCréaRéfMen (qu'il faudrait plutôt nommer UFmMàJRéfMen puisqu'il fera ajouts et modifications)
 
Dernière édition:

BUDGETS

XLDnaute Impliqué
Bonsoir.
J'aurais mis des commentaires différents :
VB:
Option Explicit ' Module d'interface avec les CAsso de différents types spécifiques.

' Méthode à usage exclusif de l'objet ControlsAssociés parent de cet objet.
'    Effectue l'opération d'initialisation requise par sa méthode Add.
Public Sub Init(ByVal Parent As ControlsAssociés, ByVal Ctl As MSForms.Control, _
   ByVal Index As Long, ByVal Col As Long, ByVal Format As String, ByVal Mode): End Sub
 
' Propriété Ctl en lecture seule: Contrôle supporté par l'objet.
Function Ctl() As MSForms.Control: End Function

' Propriété Index en lecture seule: Numéro d'ordre de cet objet dans son parent ControlsAssociés.
Function Index() As Long: End Function

' Propriété Col en lecture seule: Numéro de la colonne contenant sa valeur dans le tableau à mettre à jour.
Function Col() As Long: End Function

' Propriété Format en lecture seule: Format appliqué par VBA.Format lors de la conversion de valeur en le texte affiché dans le contrôle.
Function Format() As String: End Function

' Propriété Mode en lecture seule: En vue d'une utilisation non prédéfinie, à la discrétion du programmeur d'application.
Function Mode(): End Function

' Propriété Valeur en lecture/écriture: Valeur de cellule correspondant au texte affiché par le contrôle.
Property Let valeur(ByVal V): End Property
Property Get valeur(): End Property
Le code du ControlsAssociés est en double. Je ne vois pas d'autre explication, si on suppose une fausse manœuvre, que ceci: Vous avez dû créer les modules puis copier/coller leurs codes depuis et vers la fenêtre de code, au lieu de simplement glisser/déplacer leurs noms dans l'explorateur de projets. Pas étonnant que vous m'ayez trouvé rapide l'autre jour, si vous ne saviez pas que c'était comme ça qu'il fallait faire…
Toujours pas le principal: la programmation terminée dans l'UFmCréaRéfMen (qu'il faudrait plutôt nommer UFmMàJRéfMen puisqu'il fera ajouts et modifications)
Je n'ai pas compris Le code du controlsassociés est en double. J'ai créé les modules de classe puis, pour chacun, à partir du fichier que vous m'avez envoyé antérieurement, j'ai imprimé le code que je retape ligne par ligne sans aucun copier.coller ou glisser.déplacer. Je fais ainsi pour essayer de comprendre ce qui se passe (enfin, j'essaie) !
Le code du ControlsAssociés est en double. Je ne vois pas d'autre explication, si on suppose une fausse manœuvre, que ceci: Vous avez dû créer les modules puis copier/coller leurs codes depuis et vers la fenêtre de code, au lieu de simplement glisser/déplacer leurs noms dans l'explorateur de projets. Pas étonnant que vous m'ayez trouvé rapide l'autre jour, si vous ne saviez pas que c'était comme ça qu'il fallait faire…
D'après vous, il faudrait que je termine la programmation de l'UFmCréaRefMen que je devrais intitulé UFmMàJRéfMen.
 

Dranreb

XLDnaute Barbatruc
Oui, puisque je ne peux plus avancer de mon coté pour l'instant vu que j'ai encore le code avec vos erreurs de titres que vous ne m'avez toujours pas encore renvoyé corrigé.
 
Dernière édition:
Statut
N'est pas ouverte pour d'autres réponses.

Haut Bas