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:

patricktoulon

XLDnaute Barbatruc
re
bon là j'ai remis les region 0,1,2 pour commencer qui sont les principales differentes en terme de format de dates et surtout gérée par excel
j'ai réglé le problème de date de depart sur l'appelant
on approche de la fin il reste plus que le skin (les couleur de base et férié)
testez bien tout
bon pour EcX il faudrait que je revois ca car normalement vous devriez avoir EcX a zero en auto
alors peut être que les elementsrenvoyés par op et operating sytem ne sont pas bon avec les nouvelles version d'excel va savoir :rolleyes:
il faudra donc rattraper tout ca mais ca n'est qu'un detail
pour l'instant il faut tester les dates en us etc... avant ou en reprise etc sur range et dans userform en mode modal et non modal
tout est a portée j'ai tout mis au propre
;)
 

Pièces jointes

  • calendar light.xlsm
    79.2 KB · Affichages: 4

Dudu2

XLDnaute Barbatruc
Je suis en train de tester les positionnements et suis totalement perplexe.
Les positionnements des objets de la feuille les uns par rapport aux autres sont OK. RAS.

Les positionnements de UserForms par rapport aux objets de la feuille ou aux Controls d'un autre UserForm ont besoin d'une correction en points (à quelques décimales près):
Const HCorrection = -5.6
Const VCorrection = -1.2

Admettons !

Le pire ! Incompréhensible !
Je positionne un UserForm sur une cellule bord à bord gauche. OK.
Je retire à son .Left son .Width et le bord droit du UserForm ne match pas le bord gauche de la cellule ! Une marge apparaît.
 

patricktoulon

XLDnaute Barbatruc
heu c'est normal
pour faire ultra precis je te l'ai déjà dit il faut utiliser une api qui te permet de calculer les épaisseurs de cadre
les vrai!!!!!pas ceux que tu vois
apres tu me parle mais je ne sais quel code tu utilise
donne moi un fichier avec un simple userform positionné que je regarde

pourquoi j'utilise pointstosreenpixel
c'est par ce que j'ai la donnée en pixel a partir du bord de l’écran et non d'une fenêtre quelconque
je converti en point apres
après les épaisseur de cadre théorique qui sont en fait appliqué ne correspondent pas a ce que l'on voit
il est donc difficile sans cette api de faire les choses pil poil
donne moi ce code ;)
 

Dudu2

XLDnaute Barbatruc
Les cadres je les calcule de manière simple en faisant la différence entre, par exemple le .Width et le .InsideWidth.

Mon problème ne vient pas des cadres. Il vient du fait que le UserForm.Width et un peu aussi le UserForm.Height est probablement plus grand que le dessin du UserForm, d'où une marge à droite lorsque je décale à gauche du UserForm.Width surtout (et pareil pour le UserForm.Height mais moins).

Il va falloir non seulement introduire un correctif de positionnement absolu:
Const HCorrection = -5.6
Const VCorrection = -1.2

et aussi un correctif de largeur et hauteur du UserForm:
A déterminer.

Je t'envoie mon fichier de test qui ne contient pas encore le correctif de largeur et hauteur du UserForm.
A moins de se satisfaire de l'approximation actuelle qui n'est pas bien méchante.
 

Dudu2

XLDnaute Barbatruc
Au total, j'ai dû appliquer les corrections suivantes:
Const HPosCorrectionUserForm = -5.6 (sujet au zoom si on se repère sur un objet de la feuille)
Const VPosCorrectionUserForm = -1.2 (sujet au zoom si on se repère sur un objet de la feuille)
Const WidthCorrectionUserForm = -10
Const HeightCorrectionUserForm = -5

J'ai la confirmation que le .Width et le .Height d'un UserForm sont plus grands que son dessin.
En effet, en ayant appliqué toutes les corrections sur le UserForm1 à placer, lorsque je le place en bas d'un autre UserForm2 (je décale donc le UserForm1.Top du UserForm2.Height), j'ai encore cette petite marge due au fait que les dimensions du UserForm2 sont plus grande que son dessin.
 

Pièces jointes

  • VBA Positionner un Objet sur un Objet.xlsm
    71.3 KB · Affichages: 4

patricktoulon

XLDnaute Barbatruc
tiens @Dudu2 regarde
appui le sur bouton
regarde je place le label en left et top de la meme épaisseur du cadre
regarde le résultat et regarde surtout la capture dans le userform de l'userform dans VBE
voilà ceci explique cela ;)
j'ai vu que tu a posté je regarde
mais ton correctif n'est valable que chez toi et de cela j'en suis sur
le correctif ne peut absolument pas et en aucun cas etre une valeur numérique en dur

dans cet exemple on vois bien (capture)que le calcul se fait sur la base des dimensions avant affichage
 

Pièces jointes

  • demo dudu2.xlsm
    41.7 KB · Affichages: 5

patricktoulon

XLDnaute Barbatruc
quand je te dis que ton correctif ne peut fonctionner que chez toi
1636649472669.png
 

Statistiques des forums

Discussions
315 098
Messages
2 116 190
Membres
112 679
dernier inscrit
Yupanki