XL 2010 Afficahcage d'un Calendrier dans une cellule

noel33

XLDnaute Occasionnel
Bonjour à tous,

je vais sans doute faire rire les initiés, mais je me casse les dents sur un point qui doit être très facile:

J'aimerai soit:

_ Faire apparaitre un calendrier de sélection quand je clique dans certaines cellules,

_ Soit à l'aide de 2 boutons faire apparaitre un calendrier de sélection pour le premier bouton et le faire disparaitre avec le deuxième bouton (Solution moins appréciable..)

Quelqu'un a une idée?

D'avance merci pour votre aide!

Bon dimanche,

N.
 

Pièces jointes

  • Test Calendrier.xlsx
    30.1 KB · Affichages: 11

patricktoulon

XLDnaute Barbatruc
j'ai vu aussi avec cette discussion et celle de Arthour973 que vous avez améliorer ma fonction ptpx avec les freezpane et tout le toutim
je vais etudier ca
Attention tout de meme je l'ai dis dans l'autre discussion
ca c'est pas bon

Code:
 FPtToPx = ((ActiveWindow.ActivePane.PointsToScreenPixelsX(ActiveSheet.[A1].Width) - ActiveWindow.ActivePane.PointsToScreenPixelsX(0)) / ActiveSheet.[A1].Width) / (ActiveWindow.Zoom / 100)

ca c'est plus proche


VB:
FPtToPx = ((ActiveWindow.ActivePane.PointsToScreenPixelsX(ActiveSheet.Cells.Width) - ActiveWindow.ActivePane.PointsToScreenPixelsX(0)) / ActiveSheet.cells.Width) / (ActiveWindow.Zoom / 100)

un peu decu pour le placement dans les userform avec des mesures numerique en dur
par exemple 30 et 18 et 12

Code:
HautBarPt = 30 - (10 And Int(Val(Application.Version)) < 12)
ScrWpt = Application.Width - 12: ScrHpt = Application.Height + 18
ces mesure la ne sont pas pareille pour tout les windows

dans mon model je me sert aussi de PointsToScreenPixelsX même pour l'userform
 

Dranreb

XLDnaute Barbatruc
Bonjour.
La méthode de positionnement de mon UFmCalend :
VB:
Public Sub Posit(ByVal Obj As Object, Optional ByVal X As Double, Optional ByVal Y As Double)
Rem. ——— Vous pouvez au préalable positionner l'UserForm par rapport à quelque chose.
'     Obj: Ce par rapport à quoi vous voulez le positionner. X et Y indiqueront comment :
'     X: -1: Collé au coté gauche, 0: Centré horizontalement, 1: Collé au coté droit.
'     Y: -1: Collé au bord supérieur, 0: Centré verticalement, 1: Collé juste en dessous.
'     D'autres valeurs entraineront un recouvrement partiel ou un certain éloignement.
'     Mais rien ne vous empêche de rectifier encore ensuite la propriété Left ou Top
'     de l'UFmCalend pour ajouter un interstice en points au bord de l'objet. Mais toujours
'     avant le Show, donc avant utilisation de la méthode Saisie.
'     X et Y sont facultatifs et assumés = 0. Il est donc centré sur l'objet Obj si non précisés.
   Dim G As Double, D As Double, H As Double, B As Double, U As Object, K As Double, Z As Double
   If TypeOf Obj Is MSForms.Control Then
      G = Obj.Left: H = Obj.Top: Set U = Obj.Parent
      Do: K = (U.Width - U.InsideWidth) / 2
         G = G + U.Left + K: H = H + U.Top + U.Height - U.InsideHeight - K
         If Not TypeOf U Is MSForms.Frame Then Exit Do
         Set U = U.Parent: Loop
      D = G + Obj.Width: B = H + Obj.Height
   Else
      Z = ActiveWindow.Zoom / 100
      K = GetDeviceCaps(GetDC(0), 88) / 72
      G = ActiveWindow.PointsToScreenPixelsX(Obj.Left * K * Z) / K
      D = ActiveWindow.PointsToScreenPixelsX((Obj.Left + Obj.Width) * K * Z) / K
      K = GetDeviceCaps(GetDC(0), 90) / 72
      H = ActiveWindow.PointsToScreenPixelsY(Obj.Top * K * Z) / K
      B = ActiveWindow.PointsToScreenPixelsY((Obj.Top + Obj.Height) * K * Z) / K
      End If
   Me.Left = (X * (D - G + Me.Width + 6) + G + D - Me.Width - 6) / 2 + 3
   Me.Top = (Y * (B - H + Me.Height + 6) + H + B - Me.Height - 6) / 2 + 3
   End Sub
Elle gère donc si le contrôle à coupler est contenu dans un Frame, voire dans plusieurs imbriqués.
 

Pièces jointes

  • MonCalendrier.xlsm
    76.8 KB · Affichages: 15

Roland_M

XLDnaute Barbatruc
re

tu ne demandes pas trop, ce sont des questions tout à fait justifiées, simples et claires !

alors, ça se passe dans Thisworkbook, ici:
'-----------------------------------------------------------------------------------------
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
' test l'endroit des saisies dates autorisées
'1' test feuille ok saisie
If Sh.Name <> "Feuil2" Then Exit Sub '< à toi de voir pour le nom
'2' test cellules ok saisie
If Intersect(Target, Range("L5:L30")) Is Nothing Then Exit Sub 'sortie si pas cellule L5 à L30
'...
'-------------------------------------------------------------------------------------------------

'avec plages de cell.différentes et feuil.différentes
'tu supprimes les tests ci-dessus et tu utilises ceci, exp:
'rem: pour tester une autre plage dans une même feuille tu sépares par virgule exp Range("C5:C30, L5:L30")
'en simple et clair pour toi comprendre:
Ok = 0
If Sh.Name = "Feuil2" And Not Intersect(Target, Range("L5:L30")) Is Nothing Or _
Sh.Name = "Feuil3" And Not Intersect(Target, Range("C5:C30")) Is Nothing Then
Ok = 1
End If
If Ok = 0 Then Exit Sub
 

noel33

XLDnaute Occasionnel
re

tu ne demandes pas trop, ce sont des questions tout à fait justifiées, simples et claires !

alors, ça se passe dans Thisworkbook, ici:
'-----------------------------------------------------------------------------------------
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
' test l'endroit des saisies dates autorisées
'1' test feuille ok saisie
If Sh.Name <> "Feuil2" Then Exit Sub '< à toi de voir pour le nom
'2' test cellules ok saisie
If Intersect(Target, Range("L5:L30")) Is Nothing Then Exit Sub 'sortie si pas cellule L5 à L30
'...
'-------------------------------------------------------------------------------------------------

'avec plages de cell.différentes et feuil.différentes
'tu supprimes les tests ci-dessus et tu utilises ceci, exp:
'rem: pour tester une autre plage dans une même feuille tu sépares par virgule exp Range("C5:C30, L5:L30")
'en simple et clair pour toi comprendre:
Ok = 0
If Sh.Name = "Feuil2" And Not Intersect(Target, Range("L5:L30")) Is Nothing Or _
Sh.Name = "Feuil3" And Not Intersect(Target, Range("C5:C30")) Is Nothing Then
Ok = 1
End If
If Ok = 0 Then Exit Sub
Super, merci! je crois avoir compris!!! merci beaucoup!
 

Discussions similaires

Réponses
21
Affichages
1 K

Statistiques des forums

Discussions
312 074
Messages
2 085 066
Membres
102 770
dernier inscrit
mathieu.lemaitre