XL 2013 Problème avec Class Module

karinette

XLDnaute Occasionnel
Bonjour aux experts.
Voila mon soucis, j'ai des calendriers intégrés dans un classeur.
Lorsque je clique sur une cellule de la colonne B ou L, mon calendrier se lance.
Pour avoir une meilleure ergonomie, j'ai fais 2 Userform pour qu'il se place correctement à l'ouverture (dans le UserForm_Activate)
Du coup, celui de la colonne B fonctionne bien (la date s'affiche dans la cellule), mais pour le deuxième, rien ne fonctionne.
J'ai vu que les fonctions dans le "class module" ne concerne que le Userform1 (celui qui marche).
Maintenant, j'aimerais attribuer les mêmes fonction au Userform2, mais je suis un peu perdue.

J'ai mis mon classeur en PJ pour être plus claire.
Merci à vous.
 

Pièces jointes

  • STD4A Action Tracker_V1.xlsm
    56.3 KB · Affichages: 11

ChTi160

XLDnaute Barbatruc
Bonsoir Karinette
je pense (si j'ai bien compris ! ) que tu peux utiliser un seul Calendrier pour les deux colonnes .
voir proposition perfectible Lol
en mettant dans le ThisWorkbook de ton Classeur
VB:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If Sh.Name Like "AT Global" Then
If Not Application.Intersect(Target, Union(ActiveSheet.Columns("B"), ActiveSheet.Columns("L"))) Is Nothing Then
UserForm1.StartUpPosition = 0
UserForm1.Show
End If
End If
End Sub
jean marie
 

karinette

XLDnaute Occasionnel
Bonjour à tous.
Vos propositions utilisent un seul USF, mais dans mon cas il y en a deux car le positionnement est très important.
J'ai ce code dans dans le Userform 1 :

Private Sub UserForm_Activate()
With Application
LargeurFenetre = .Width
HauteurFenetre = .Height
PositionGauche = .Left
PositionHaut = .Top
End With
With Me
.Left = (PositionGauche + LargeurFenetre) - ((LargeurFenetre + .Width) / 1.2)
.Top = (PositionHaut + HauteurFenetre) - ((HauteurFenetre + .Height) / 2)
End With
End Sub

et celui ci dans le Userform 2:

Private Sub UserForm_Activate()
With Application
LargeurFenetre = .Width
HauteurFenetre = .Height
PositionGauche = .Left
PositionHaut = .Top
End With
With Me
.Left = (PositionGauche + LargeurFenetre) - ((LargeurFenetre + .Width) / 4)
.Top = (PositionHaut + HauteurFenetre) - ((HauteurFenetre + .Height) / 2)
End With
End Sub

En cherchant un peu, j'ai utilisé cette méthode :

Sub lance_usf1()
With UserForm1
.StartUpPosition = 0
.Left = 30
.Top = 100
.Show
End With
End Sub

Sub lance_usf2()
With UserForm1
.StartUpPosition = 0
.Left = 800
.Top = 100
.Show
End With
End Sub

ça me permet de n'utiliser qu'un seul USF.

Merci à vous de m'avoir aidé.
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Même si vous aviez besoin de les afficher en même temps ce dont je doute, un seul suffirait.
C'est automatique avec mon calendrier.
Il n'y a qu'une instruction à prévoir dans la Sub TexBoxX_Enter de chacune UFmCalend.Coupler "désign", TextBoxX.
Il se charge de s'afficher de lui même en dessous et de la garnir avant de se fermer.
C'est pareil pour un positionnement par rapport à une cellule. Le code est un peu différent :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   If Target.CountLarge <> 1 Then Exit Sub
   If Not Application.Intersect(Target, Range("B2:B30000")) Is Nothing Then
      UFmCalend.Posit Target, 1, 0.9
      Target.Value = UFmCalend.Saisie("Date", _
         DInit:=IIf(IsEmpty(Target.Value), Date, Target.Value), Défaut:=Target.Value)
   ElseIf Not Application.Intersect(Target, Range("L2:L30000 ")) Is Nothing Then
      UFmCalend.Posit Target, 1, 0.9
      Target.Value = UFmCalend.Saisie("Due", _
         DInit:=IIf(IsEmpty(Target.Value), Date, Target.Value), Défaut:=Target.Value)
      End If
   End Sub
Pas besoin de UFmCalend.Show: sa méthode Saisie le fait d'elle même.
 
Dernière édition:

Discussions similaires

Réponses
2
Affichages
280
Réponses
3
Affichages
207

Statistiques des forums

Discussions
312 304
Messages
2 087 064
Membres
103 450
dernier inscrit
bernardmortensen