Microsoft 365 UserForm heures et minutes afficher à droite de ma cellule

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous :)

Je suis toujours en train de torturer l'excellent calendrier de Rolland_M et je ne parviens pas placer "l'UserForm heures et minutes à droite de ma cellule".

Pour le calendrier, c'est très silmple car Rolland_M l'avait prévu :
VB:
'====================================================================================================
Option Explicit
' Vous pouvez adapter ces paramètres  v (ces paramètres ont été ajouté suite à des demandes du forum.
' ----------------------------------  v
Private Const AffMoisPrecedentSuivant = True ' False)aff.mois sélectionné True)avec précédent+suivant
Private Const NoDuPremJourSem% = 1           ' 1)Lundi à 7)Dimanche
Private Const SensDuCalendrier$ = ">"        ' >)Gauche>Droite(classique)  <)Gauche<Droite
Private Const PlacementCalendrier% = 1       ' 1)à droite 2)en dessous de l'objet
Private Const FormatDateUserSurCell = False  ' True)format ci-dessous appliqué sur cellule  False)Non
Private Const FormatDateUser$ = "dd/mm/yyyy" ' "dd/mm/yyyy" ou "yyyy/mm/dd"
Private Const PaysJourFeries$ = "France"     ' choisir un des pays dispo
'Private Const PaysJourFeries$ = "Belgique"  '
'Private Const PaysJourFeries$ = "Quebec"    '
'Private Const PaysJourFeries$ = "Genève"    '
'Private Const PaysJourFeries$ = "Canada"    '
'====================================================================================================
ligne : PlacementCalendrier% = 1 ' 1)à droite

Mais pour afficher les heures et minutes, je n'y arrive pas Grrrr !
1668172505577.png

Pourriez-vous m'aider ?
En cas, je joins le fichier test et je continue mes tâtonnement lol
Un grand merci à tous,
:)
 

Pièces jointes

  • calendrier3.xlsm
    97.7 KB · Affichages: 9

cp4

XLDnaute Barbatruc
Re :)
Suis-je t'y bête.
C'était prévu aussi :
VB:
'option de placement et position
'sous la cellule(2) ou à droite(1)
Private Const PlacementCalendrier = 1 '1 ou 2
Désolé du dérangement
:oops:
Bonjour,

@Usine à gaz : Pas très abouti ton userform. Pas de moyen de revenir en arrière en cas d'erreur (vider cellule). En effet, dès qu'une cellule concernée par le code est sélectionnée, l'userform s'affiche et là inexorablement une date est ajoutée même en laissant les textboxs hh et mm vides. N'est-ce pas gênant pour les utilisateurs?

Bonne journée.
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour cp4, le Forum :)

Le calendrier de Roland_M est super "abouti"
Dans le fichier test de ce fil, le calendrier est paramétré pour utilisation dans un cadre très précis.
- Le calendrier ne s'affiche pas (la date est mise automatiquement (le jour+7) ).
- Affichage heure et minutes pour rappel.

Voici en pièce jointe le même calendrier dans :
- utilisation libre de sortie en feuille "SuivisAppels",
- utilisation "dirigée" en feuille "SaisieRdV"
:)
 

Pièces jointes

  • calendriers_clicGauche01.xlsm
    214.8 KB · Affichages: 5
Dernière édition:

patricktoulon

XLDnaute Barbatruc
bonjour lionel
je constate que l'on utilise allègrement mes codes ;)
même si ceux ci était a l’époque bien maladroits
et modifié encore plus maladroitement
VB:
Private Sub UserformPosSurCell(ByVal Obj As Range)
Dim SvgScr As Boolean: SvgScr = Application.ScreenUpdating
Application.ScreenUpdating = True
Dim PtoPx#, Z@, L1#, T1#, C#, R#, Vr As Range, H%, V%, I%, Ok As Boolean
With ActiveWindow.ActivePane
 PtoPx = (.PointsToScreenPixelsX(Cells.Width) - .PointsToScreenPixelsX(0)) / Cells.Width
End With
With ActiveWindow
   'exit si la cellule injecté n'est pas vible a l'ecran
   'For I = 1 To .Panes.Count
   ' If Not Intersect(.Panes(I).VisibleRange, Obj) Is Nothing Then Ok = True
   'Next
   'If Ok = False Then Beep: MsgBox " cette cellule n'est pas visible a l'ecran": Unload Me: Exit Sub
   Z = (ActiveWindow.Zoom / 100): Set Vr = .VisibleRange
   L1 = (.ActivePane.PointsToScreenPixelsX(Int(Obj.Left)) / PtoPx) * Z
   T1 = (.ActivePane.PointsToScreenPixelsY(Int(Obj.Top)) / PtoPx) * Z
   With .Panes(1).VisibleRange: C = .Cells(.Cells.Count).Column: R = .Cells(.Cells.Count).Row: End With
   If .SplitRow > 0 Then
     If Obj.Row < R + 1 And .ScrollRow > R Then T1 = ((.ActivePane.PointsToScreenPixelsY(Vr.Cells(1).Top) / PtoPx) * Z) - (Range(Obj, Cells(R, Obj.Column)).Height * Z)
   End If
   If .SplitColumn > 0 Then
     If Obj.Column < C + 1 And .ScrollColumn > C Then L1 = ((.ActivePane.PointsToScreenPixelsX(Vr.Cells(1).Left) / PtoPx) * Z) - (Range(Obj, Cells(Obj.Row, C)).Width * Z)
   End If
End With
'option de placement et position
'Horizontal=0=gauche  1=milieu 2=droite
'Vertical  =0=en haut 1=milieu 2=bas
If PlacementCalendrier = 1 Then 'droite
   H = 2: V = 0
ElseIf PlacementCalendrier = 2 Then 'dessous
   H = 0: V = 2
Else: H = 0: V = 2
End If
L1 = L1 + ((Obj.Width / 2) * Z) * H
T1 = T1 + ((Obj.Height / 2) * Z) * V
'position +test limites écran
Dim EcXY%
EcXY = 4 And Int(Val(Mid(Application.OperatingSystem, InStrRev(Application.OperatingSystem, " ") + 1))) = 6 And Int(Val(Application.Version)) < 15 '<2013
Me.Top = T1 + EcXY: Me.Left = L1 + EcXY
Application.ScreenUpdating = SvgScr
End Sub
a tu plusieurs pane dans ta feuille? -->non
est il plus facile de savoir la pane -->oui

si on reste en pixel le calcul est plus simple

le must c'est ce que j'avais trouvé ca à l'epoque
VB:
EcXY = 4 And Int(Val(Mid(Application.OperatingSystem, InStrRev(Application.OperatingSystem, " ") + 1))) = 6 And Int(Val(Application.Version)) < 15 '<2013
qui un peu plus tard c'est révélé être pas toujours juste sur 2 pc même systeme et même office
alors ca m'arrangeais bien sur 2007
mais apres j'ai vite compris que c’était pas ça 🤣
c'est bien pourça que j'ai abandonné cette piste dans mon principe
chez toi sur ton fichier la chose est simple
ici ton userform travaille sur la cellule que tu a rightcliqué c'est donc l'activecell et par conséquent l'activepane
 

cp4

XLDnaute Barbatruc
Bonjour cp4, le Forum :)

Le calendrier de Roland_M est super "abouti"
Dans le fichier test de ce fil, le calendrier est paramétré pour utilisation dans un cadre très précis.
- Le calendrier ne s'affiche pas (la date est mise automatiquement (le jour+7) ).
- Affichage heure et minutes pour rappel.

Voici en pièce jointe le même calendrier dans :
- utilisation libre de sortie en feuille "SuivisAppels",
- utilisation "dirigée" en feuille "SaisieRdV"
:)
Bonjour @patricktoulon ;), @Usine à gaz ;),

@Usine à gaz : Je n'ai pas parlé du calendrier de @Roland_M mais du tien. Celui où tu saisis (ou insères) des heures et des minutes.

A+
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
bonjour lionel
je constate que l'on utilise allègrement mes codes ;)
même si ceux ci était a l’époque bien maladroits
et modifié encore plus maladroitement
VB:
Private Sub UserformPosSurCell(ByVal Obj As Range)
Dim SvgScr As Boolean: SvgScr = Application.ScreenUpdating
Application.ScreenUpdating = True
Dim PtoPx#, Z@, L1#, T1#, C#, R#, Vr As Range, H%, V%, I%, Ok As Boolean
With ActiveWindow.ActivePane
 PtoPx = (.PointsToScreenPixelsX(Cells.Width) - .PointsToScreenPixelsX(0)) / Cells.Width
End With
With ActiveWindow
   'exit si la cellule injecté n'est pas vible a l'ecran
   'For I = 1 To .Panes.Count
   ' If Not Intersect(.Panes(I).VisibleRange, Obj) Is Nothing Then Ok = True
   'Next
   'If Ok = False Then Beep: MsgBox " cette cellule n'est pas visible a l'ecran": Unload Me: Exit Sub
   Z = (ActiveWindow.Zoom / 100): Set Vr = .VisibleRange
   L1 = (.ActivePane.PointsToScreenPixelsX(Int(Obj.Left)) / PtoPx) * Z
   T1 = (.ActivePane.PointsToScreenPixelsY(Int(Obj.Top)) / PtoPx) * Z
   With .Panes(1).VisibleRange: C = .Cells(.Cells.Count).Column: R = .Cells(.Cells.Count).Row: End With
   If .SplitRow > 0 Then
     If Obj.Row < R + 1 And .ScrollRow > R Then T1 = ((.ActivePane.PointsToScreenPixelsY(Vr.Cells(1).Top) / PtoPx) * Z) - (Range(Obj, Cells(R, Obj.Column)).Height * Z)
   End If
   If .SplitColumn > 0 Then
     If Obj.Column < C + 1 And .ScrollColumn > C Then L1 = ((.ActivePane.PointsToScreenPixelsX(Vr.Cells(1).Left) / PtoPx) * Z) - (Range(Obj, Cells(Obj.Row, C)).Width * Z)
   End If
End With
'option de placement et position
'Horizontal=0=gauche  1=milieu 2=droite
'Vertical  =0=en haut 1=milieu 2=bas
If PlacementCalendrier = 1 Then 'droite
   H = 2: V = 0
ElseIf PlacementCalendrier = 2 Then 'dessous
   H = 0: V = 2
Else: H = 0: V = 2
End If
L1 = L1 + ((Obj.Width / 2) * Z) * H
T1 = T1 + ((Obj.Height / 2) * Z) * V
'position +test limites écran
Dim EcXY%
EcXY = 4 And Int(Val(Mid(Application.OperatingSystem, InStrRev(Application.OperatingSystem, " ") + 1))) = 6 And Int(Val(Application.Version)) < 15 '<2013
Me.Top = T1 + EcXY: Me.Left = L1 + EcXY
Application.ScreenUpdating = SvgScr
End Sub
a tu plusieurs pane dans ta feuille? -->non
est il plus facile de savoir la pane -->oui

si on reste en pixel le calcul est plus simple

le must c'est ce que j'avais trouvé ca à l'epoque
VB:
EcXY = 4 And Int(Val(Mid(Application.OperatingSystem, InStrRev(Application.OperatingSystem, " ") + 1))) = 6 And Int(Val(Application.Version)) < 15 '<2013
qui un peu plus tard c'est révélé être pas toujours juste sur 2 pc même systeme et même office
alors ca m'arrangeais bien sur 2007
mais apres j'ai vite compris que c’était pas ça 🤣
c'est bien pourça que j'ai abandonné cette piste dans mon principe
chez toi sur ton fichier la chose est simple
ici ton userform travaille sur la cellule que tu a rightcliqué c'est donc l'activecell et par conséquent l'activepane
Bonjour Patrick :)
Merci pour ce retour...
Chez moi, tout fonctionne bien.
:)
 

patricktoulon

XLDnaute Barbatruc
re
oui il fonctionne je sais
mais j'ai fait plus simple et plus propre depuis
et vu que tu te sert pas de ecx et tout le toin toin , tu peux donc supprimer tout ça surtout que c'est avéré faux comme raisonnement a part pour 2 seuls cas sur W7 et office 2007 ou 2013
(j'ai pas toujours réfléchi dans le bon sens 😂 )
 

Discussions similaires

Statistiques des forums

Discussions
312 104
Messages
2 085 344
Membres
102 865
dernier inscrit
FreyaSalander