DTPicker et module de classe [Résolu]

Spitnolan08

XLDnaute Barbatruc
Bonsoir à tous en cette fin de week-end Pascal,

Je suis bloqué par un message d'erreur : Erreur 459 : L'objet ou la classe ne gère pas le jeu d'évènements dans le cadre de la création d'un module de classe devant mettre en jeu des DTPicker.

Pour que ce soit plus clair, je vous joint un fichier créé pour la cause.

Bonne soirée et bonne semaine !
Un peu froide donc bonne pour coder.... ;)
 

Pièces jointes

  • TestDTpickerModClasse.xls
    33 KB · Affichages: 54

Spitnolan08

XLDnaute Barbatruc
Bonsoir Lone-wolf,

Le fichier joint est un fichier exemple... créé pour expliquer mon problème. J'ai beaucoup plus de DTPicker dans mon fichier d'origine.

Bien sur, je peux me passer d'un module de classe et répéter autant de fois que de DTPicker la même macro mais, les modules de classe existant, je préférerais procéder de façon plus élégante.
 

Spitnolan08

XLDnaute Barbatruc
Bonjour Lone-Wolf, le forum,

Merci et désolé, mais je pensais que c'était clair dans mon message :
Pour que ce soit plus clair, je vous joint un fichier créé pour la cause.
Mais ça ne l'était que pour moi...:oops::confused:

J'en profite pour repréciser ma question :
Quand le code s'exécute, il se bloque et le message d'erreur indiqué apparait.
Pourtant l'évènement change est bien attaché aux DTPicker.
Est ce que la déclaration de variable dans le module de classe n'est pas bonne ?
Est ce que....?
Peut être avez vous une idée en utilisant un autre évènement ? (Nota : je viens d'y penser : je n'ai pas essayé, tant l'évènement change me paraissait simple à utiliser !)
Bref, comment régler le pb ?
 

Lone-wolf

XLDnaute Barbatruc
Re

Tu dit: Merci et désolé, mais je pensais que c'était clair dans mon message.

Dans ton message oui, mais tu met un fichier avec juste 2 contrôles, tu ne trouverais pas ça bizarre?? :rolleyes:
Tu pense qu'on est censés deviner que tu en à 30??? o_O Et dans le fichier tu aurais pu en mettre 5 ou 6.

Désolé de ne pas pouvoir t'aider, je n'ai pas de maîtrise concernant les modules de classe.

EDIT: j'ai trouvé un lien en anglais(à traduire avec google traduction) Calendar Controls
Regarde si ça peut t'aider.
 
Dernière édition:

Si...

XLDnaute Barbatruc
Bonjour
Bien sur, je peux me passer d'un module de classe et répéter autant de fois que de DTPicker la même macro mais, les modules de classe existant, je préférerais procéder de façon plus élégante.

N’étant guère adepte des collections car trop lourde à gérer pour Me o_O, je passe plutôt par un module de classe de contrôle "Textbox "».
Tu peux aussi utiliser le contrôle "MonthView" , forme développée du DtPicker.
 

Pièces jointes

  • TextBox ModuleDeClasse et Dpicker.xls
    37.5 KB · Affichages: 45
  • TextBox ModuleDeClasse et MonthView.xls
    38 KB · Affichages: 36

Spitnolan08

XLDnaute Barbatruc
Re LoneWolf, Bonjour Si,

Merci Lone-Wolf :) pour le lien : Je ne suis pas tombé dessus dans mes recherches. Cependant bien que très très intéressant sur le concept cela me semble trop lourd à mettre en oeuvre pour mon projet : autant répéter x fois le même code ou saisir directement les dates dans les textbox à la mano.
Par contre il apparait qu'il est inutile de chercher un ocx pour le contrôle calendar que j'utilisais autrefois et qui n'est plus disponible aujourd'hui sur ma machine en 64bits

Si, Astucieux ! :):) En fait, tu contournes le pb en utilisant le textbox comme base du module de classe au lieu du DTPicker... Et merci pour l'exemple. En fait ta méthode avec DTPicker ajoute un clic dans le traitement puisqu'il faut cliquer sur le textbox pour déclencher l'évènement puis cliquer sur le DTPicker pour l'ouvrir et enfin choisir la date.
Par contre avec le monthview on supprime un clic et cela revient au même que dans ma présentation : il faut cliquer sur le DTPicker avant de choisir la date.

Si personne ne peut résoudre le problème directement, c'est la solution que je vais retenir. (Nota : perso le monthview n'a jamais retenu mon attention mais dans ton traitement "inversé" c'est plus rapide qu'avec le DTPicker donc pas de remarque particulière)

Je laisse le fil open au cas où quelqu'un aurait rapidement la solution qui m'éviterait de recoder mon projet.:)

(Car bien entendu c'est un petit peu plus complexe que dans le fichier test... Dans mes UF il y a des centaines de contrôles de tous types qui interagissent les uns avec les autres avec d'autres modules de classe y compris des appels croisés d'UF. ;))

Lone-Wolf, Si tu en as l'utilité ou simplement si tu le souhaites pour te perfectionner je te conseille les excellents articles suivants sur les modules de classe :
http://tissotemmanuel.developpez.com/articles/VBA/modules-de-classe/
https://excel.developpez.com/faq/?page=ModuleClasse
http://fauconnier.developpez.com/articles/vba/general/classes/
 
Dernière édition:

PMO2

XLDnaute Accro
Bonjour,
Je ne m'étend pas en explications car je ne sais pas expliquer ce qui est très compliqué.
Regardez la pièce jointe pour voir si elle peut vous orienter dans le bon sens.
En premier lieu il faut monter la référence suivante :
Library MSComCtl2
c:\windows\System32\MSCOMCT2.OCX
Contrôles communs Microsoft Windows-2 6.0

Il est indispensable de déclarer le type de l'objet dans les WithEvents du module de classe
Public WithEvents DTPic As MSComCtl2.DTPicker 'il faut spécifier le type pour obtenir ses évènements

J'espère que vous arriverez à tirer quelque chose de mon exemple.
Bon courage.
 

Pièces jointes

  • TestDTpickerModClasse_pmo.xls
    45 KB · Affichages: 55

Spitnolan08

XLDnaute Barbatruc
Bonjour le forum, PMO2,:)

Ce qui me manquait c'était MSComCtl2.DTPicker dans
Public WithEvents DTPic As MSComCtl2.DTPicker
Mon fichier fonctionne impec y compris dans son jus d'origine ! RESPECT PMO2!

Par contre, au delà du fait qu'il faut associer le contrôle DTPicker comment savoir à quelle référence, il faut associer le contrôle ? J'avais fait beaucoup de tentatives au préalable...
C'est MSComCtl2.DTPicker mais cela aurait pu être :
MS.DTPicker
MSForms.DTPicker
......

Merci De vos éclaircissements éventuels sur le sujet :)

Remarque : bien que cela ne m'a pas gêné dans l'analyse de la réponse, au chargement du fichier TestDTpickerModClasse_pmo, les DTPicker ne se chargent pas : impossibilité de charger l'objet ?!?
 

PMO2

XLDnaute Accro
Dans le VBE affichez l'Explorateur d'objets et vous verrez que Class DTPicker est
Membre de MSComCtl2
Contrôle Microsoft Date and Time Picker
En montant la référence
Library MSComCtl2
c:\windows\System32\MSCOMCT2.OCX
Contrôles communs Microsoft Windows-2 6.0
vous bénéficiez de l'intellisense et vous pouvez vous rendre compte que DTPicker n'a pas de propriété Name.
C'est pour cela que, dans mon code, j'ai inclus des instructions tournant autour de Public DTtab().
Celui-ci est un tableau dynamique de variant dans lequel j'inscris des Objects issus du UserForm . On peut donc utiliser les propriétés du contrôle ou du UserForm. Voir les portions de code :
'/// Le Parent du DTPicker ///
i& = i& + 1
ReDim Preserve DTtab(1 To 2, 1 To i&)
Set DTtab(1, i&) = Ctrl
Set DTtab(2, i&) = Ctrl.Parent


'/// Le Parent du DTPicker ///
Dim i&
For i& = 1 To UBound(DTtab, 2)
If DTtab(1, i&) Is DTPic Then
MsgBox DTtab(2, i&).Name
End If
Next i&
******
Quant au fichier fourni, il fonctionne chez moi aussi bien en Excel 2003 que version 2007.
Je ne peux rien dire si ce n'est que les méandres de l'informatique sont inexplicables.
Je remets un exemple en version 2007 à toute fin.
 

Pièces jointes

  • TestDTpickerModClasse_pmo.xlsm
    20.8 KB · Affichages: 35

Lone-wolf

XLDnaute Barbatruc
Bonjour à tous :)

C:\windows\System32\MSCOMCT2.OCX.

Attention PMO, si il est sous 64 bits, le dossier est C:\Windows\SysWOW64\.

Spinolan, je te remet les ocx si tu en as besoin, il y a aussi un fichier txt pour le mode d'emploi.
 

Pièces jointes

  • MSCOM.zip
    838.2 KB · Affichages: 51
Dernière édition:

Spitnolan08

XLDnaute Barbatruc
Bonsoir Lone-Wolf, PMO2,

Merci pour toutes ces explications. (l'Explorateur d'objets : mais oui mais c'est bien sûr !!!!)
Juste pour info, la propriété name des DTPIcker fonctionne chez moi... !?!
même si elle n'apparait pas dans l'explorateur d'objets.
Elle apparait par contre bien dans les propriétés du contrôle et cela me parait logique : sinon comment pourrait on disposer de plusieurs DTPicker dans un même UF ?

Merci Lone-Wolf. Je suis effectivement en 64bits mais je n'ai pas de pb avec mon fichier ; seulement avec celui de PMO2... Mais encore une fois ce n'est pas grave pour moi : PMO2 a résolu ma problématique puisque j'avais accès à son code et à ses explications.

Un grand merci à vous deux et à tous ceux qui se sont penchés sur le sujet
 

Si...

XLDnaute Barbatruc
re

Le message d’erreur vient de ce que le contrôle en cause ne figure pas dans le formulaire. Il suffit donc d’en rajouter autant que nécessaire dans celui-ci.

Mais (hé oui o_O) je ne comprends toujours pas ce que tu veux en faire ! Où réinjecter leur valeur ?

Dans le fichier modifié, on associe à chacun un contrôle TextBox mais c’est se compliquer la vie pour rien (dixit Lone-wolf ;)).
 

Pièces jointes

  • Copie de TestDTpickerModClasse_pmo.xls
    40 KB · Affichages: 54

Discussions similaires

Réponses
29
Affichages
803

Statistiques des forums

Discussions
312 111
Messages
2 085 400
Membres
102 883
dernier inscrit
jameseyz