Autres toutes version excel tester le calendar en mode modal et non modal sur range ou control dans userform

patricktoulon

XLDnaute Barbatruc
Bonjour a tous
j'ai pris le temps ce matin de voir un peu ce que je pourrais faire pour mon calendar
en effet il m'est souvent venu des demandes quand au fait que quand l'object appelant et fils d'un userform non modal
et effectivement mon calendar qui est en mode responsif(MODAL)(se comporte comme un msgbox) n'est pas compatible forcement
le conflit d'affichage d'un usf modal par dessus un usf non modal est déclenché
j'ai donc ici recommencé tout a zero (c'est une ébauche)mais il est parfaitement fonctionnel
dites moi ce que vous en pensez
on verra après pour les couleurs et les fériés les langue et region et tout le tointoin
merci pour les retours et suggestion a venir
 

Pièces jointes

  • calendar light.xlsm
    34.4 KB · Affichages: 42
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
dans mon château Office365 :
1637236791899.png
 

patricktoulon

XLDnaute Barbatruc
un dernière tentative pour différencier les handles
dans un userform avec 2 textboxs nommés "h1" et "h2"
VB:
Public cel As Range
Public Function WindowXYFromPoint(x, y): WindowXYFromPoint = ExecuteExcel4Macro("CALL(""user32"",""WindowFromPoint"",""JJJ""," & x & ", " & y & ")"): End Function

Function placeOnRange(RNG As Range)
    Dim PtPx#, EcX&, Ecy&, BL#, BH#, q1$, q2$, Lh&, th&
    With ActiveWindow.ActivePane
        PtPx = (.PointsToScreenPixelsX(72) - .PointsToScreenPixelsX(0)) / 72    'coeff pixel
        If Not RNG Is Nothing Then x = .PointsToScreenPixelsX(RNG.Left): y = .PointsToScreenPixelsY(RNG.Top)
        Lh = .PointsToScreenPixelsX([A1].Left + 10)
        th = .PointsToScreenPixelsY([A1].Top + 10)
    End With
    h1.Value = WindowXYFromPoint(Lh, th)    'le handle sous un point precis  dans la cellule A1
    With Me
        .StartUpPosition = 0
        .Left = (x / PtPx * ActiveWindow.Zoom / 100)    ' + 50      ' je deregle la position exemple je le met à +50 de left
        .Top = (y / PtPx * ActiveWindow.Zoom / 100)    ' - 50    ' je deregle la position exemple je le met à -50 de top

    End With
    h2.Value = ExecuteExcel4Macro("CALL(""user32"",""GetActiveWindow"",""JCC"")")         'handle fenetre active


End Function
Private Sub UserForm_Activate()

   Set cel = [D5]
    placeOnRange cel
End Sub
 

patricktoulon

XLDnaute Barbatruc
bon ben là on peut en déduire windowfrompoint est inopérant chez vous ou tombe dans les choux du terrain du voisin
c'est une des api user32 des plus basique
il faudra que je cherche une autre solution n'ayant pas 365 ça risque d’être long
ça va retarder ma mise a dispo de la nouvelle version du calendar çà
 

patricktoulon

XLDnaute Barbatruc
a h oui mais là non c'est pas possible d'utiliser cette stratégie
tu te rends compte
9 versions différente W10/2016
sans compter avec les autre versions excel
et pour finir avec 2007 , lui fonctionne très bien sans api avec le me.width-me.insidwidth
non il faut trouver quelque chose de plus générique
il est hors de question que je mette en place un truc comme ça dans mon calendar
au pire je met pas de correction pour W10
bien que je sache que c'est left-5.7 et top-0.8
 

Membres actuellement en ligne

Statistiques des forums

Discussions
312 489
Messages
2 088 854
Membres
103 975
dernier inscrit
denry