XL 2019 Calendrier pour macro...

fanfan38

XLDnaute Barbatruc
Bonjour
Je viens de faire ma 1ère macro complémentaire que je vous soumet (rien n'est protégé)
fonctionne sous 64 bits...

enregistrer le fichier Calendar.xlsm sous : type : complément Excel (*.xlam)

Dans Excel cliquer sur Développeur
Choisir complément Excel
cocher calendar

Dans l’userform1 mettre un textbox
Double clic pour visualiser le code
Copier la macro ci-dessous :

Private Sub TextBox1_Enter()
If IsDate(Me.TextBox1.Value) Then
Workbooks("Calendar.xlam").Sheets("Feuil1").Range("A1").Value = CDate(Me.TextBox1.Value)
Else
Workbooks("Calendar.xlam").Sheets("Feuil1").Range("A1").Value = Date
End If
Application.Run "Calendar.xlam!calendrier"
Me.TextBox1.Value = Workbooks("Calendar.xlam").Sheets("Feuil1").Range("A1").Value
Me.TextBox2.SetFocus
End Sub

La dernière ligne peut être changée le but étant de quitter textbox1…
Exemple : Me.BoutonOk.SetFocus

A+ François
 

Pièces jointes

  • Calendar.xlsm
    32.4 KB · Affichages: 43

Staple1600

XLDnaute Barbatruc
Re

•>fanch55
La plupart des sites dédiés à Excel déconseille d'installer un Excel 64 bits.
Microsoft le premier si on lit entre les ligne ;)
Voir le chapitre: Raisons pour lesquelles choisir la version 32 bits

PS: C'est Staple avec un seul p
(comme dans fanch55 avec un seul h ;))
 

fanch55

XLDnaute Barbatruc
Stapple,
C'est vrai actuellement, mais le futur ira toujours de l'avant. Je ne pense pas devoir côtoyer de système 128 bits ni d'application associée. Les entreprises n'installent que des Offices 32 bits non pas pour suivre les préconisations de Microsoft, mais pour conserver tous les développements déjà effectués ...
 

fanch55

XLDnaute Barbatruc
Patrick,
Testé ton fichier, fonctionne correctement, il ne te reste plus qu'à indiquer visuellement le jour d'origine sur le calendrier et en bonus de le placer à coté ou autour de la cellule appelante (ça je suis preneur et en recherche d'un code fiable et universel) .
Le peu de code est intéressant visuellement, mais je remarque qu'il y a pas mal de lignes "compressées". Ce n'est pas interdit puisque c'est autorisé , mais c'est ch... à tester et à maintenir par la suite . Ce n'est pas un reproche, je l'emploie dans des développement express (comme toi qui développe au quart de tour), mea culpa. ;)

Staple,
Je rejoins ce que tu dis . Je pense que Fanfan voulait partager son code avec la communauté .
C'est peut-être pour cela qu'il ne réagit plus. :rolleyes:

A tous,
L'exemple que j'avais joint n'a aucune spécificité 32 ou 64 bits .... :cool:
 

patricktoulon

XLDnaute Barbatruc
re
voila j'ai tout enlevé
la discussion est ouverte avec la ressource faut il encore faire les recherches et cliquer sur l'onglet discussion
ce message s’autodétruira dans 5 minutes
votre mission si vous l'acceptez sera d'aller voir dans les ressources
 

fanfan38

XLDnaute Barbatruc
Bonjour
Fanch55 je voulais partager mon fichier: OUI
M'améliorer OUI
L'améliorer: OUI
Ton exemple est très sympa mais comment l'adapter pour changer un textbox dans un userform?
Patricktoulon le tien me plait bien mais c'est une vrai usine à gaz...
J'ai fait une demande pour avoir le 32 bits car là c'est une version 64 bits (pas de choix)
Je ne réagit plus ... Ce matin mon fils, cette AM balade avec madame et vote, tu verras quand tu serras en retraite...PAS LE TEMPS...lol...
ps: aucun message d'erreur avec les différents fichiers....

Merci à tous pour vos commentaires.
Bonne journée... A+ François
 

patricktoulon

XLDnaute Barbatruc
re
Patricktoulon le tien me plait bien mais c'est une vrai usine à gaz...
usine a gaz???? le quel ?
si c'est la ressource bien Evidemment il est complet
gère les positions sur range et activeX
gère les positions sur figé freezpanne etc
gère 3 regions (0,1,2)(us,fr,ca)
gère l'annulation
gère les couleurs des jour féries pour les 3 régions
etc..etc...

le tiens n'a rien de tout ca ;)
aucune sécurité quand a une eventuelle mauvaise manip

et pour info si je réécrit le tiens avec au moins la gestion d'annulation(fermeture par la croix) et la gestion de la combo année avec même sub
voila ce que ça donne
VB:
Option Explicit
Public WithEvents BtJour As msforms.CommandButton
Dim cls(1 To 38) As New Calendar1
Public CellRef As Range

Private Sub Resultat_Change(): Me.Hide: End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode = 0 Then Cancel = True: Me.Hide
End Sub
Private Sub UserForm_Deactivate()
    If Not IsDate(Me.Resultat.Value) Then Me.Resultat.Value = CellRef.Value
End Sub

Private Sub UserForm_Initialize()
    Dim i&, dat As Date
    Set CellRef = ActiveCell    ' ici tu met ton [A1] du xlam si tu veux!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    For i = Year(Date) - 50 To Year(Date) + 10: Me.ComboBox1.AddItem i: Next  ' les années pas en dur!!!!
    For i = 1 To 12: Me.ComboBox2.AddItem Format(DateSerial(2020, i, 1), "mmmm"): Next
    'gestion du non date en celref!!!!!!
    If IsDate(CellRef.Value) Then dat = CDate(CellRef.Value) Else dat = Date
    Me.ComboBox1.Value = Year(dat)
    Me.ComboBox2.ListIndex = Month(dat) - 1
End Sub

Private Sub UserForm_Activate()
    Dim i&
    For i = 1 To 38: Set cls(i).BtJour = Me.Controls("CommandButton" & i): Next  'classification des 38 boutons pour evenement unique
End Sub

Private Sub BtJour_Click(): Reponse (BtJour.Caption): End Sub    ' evenement unique pour les 38 boutons

Private Sub ComboBox1_Change(): repaintDays: End Sub
Private Sub ComboBox2_Change(): repaintDays: End Sub

Private Sub repaintDays()    'des que tu change l'une ou l'autre ca te réinitialise le calendrier
    Dim i&, j&, q&, X&, z&
    If ComboBox2.Value = "" Or ComboBox1.Value = "" Then Exit Sub
    X = Weekday(DateSerial(Me.ComboBox1.Value, Me.ComboBox2.ListIndex + 1, 1), vbUseSystemDayOfWeek)
    z = Day(DateSerial(Me.ComboBox1.Value, Me.ComboBox2.ListIndex + 2, 0))
    For i = 1 To 38
        q = (i >= X) And (j < z)    'q est true si i>=(x) au jour de semaine du 1er du mois et si j< que le dernier jour du mois
        With Me.Controls("CommandButton" & i)
                       .Visible = q    'utilisation de q pour true/false
            If q Then j = j + 1: .Caption = j
        
        End With
    Next
End Sub

Sub Reponse(monjour)
'On Error Resume Next'inutile il ne peut pas y avoir d'erreur puisque les combos sont jamais vides
    Calendar1.Resultat.Value = CDate(DateSerial(Calendar1.ComboBox1.Value, Calendar1.ComboBox2.ListIndex + 1, monjour))
End Sub


pour le lancer ca change pas beaucoup
VB:
With Calendar1
        .Show
        If IsDate(.Resultat.Value) Then Target = CDate(.Resultat.Value)
    End With
    Unload Calendar1

c'est le quel l'usine a gaz maintenant ;)
et si tu veux je te le donne avec la couleur des jours fériés l'adaptation pour celui ci est prête
 

Pièces jointes

  • Calendar fanfan réécrit patricktoulon.xlsm
    28.4 KB · Affichages: 14

patricktoulon

XLDnaute Barbatruc
re
bonsoir franch55
je reconnais certaine partie de mes codes des version 1.0 a 2.7 de mes calendrier même les variables ont le même nom ;)
c'est pas ce que j'ai fait de mieux entre nous
dans la 4.1 tu trouvera les deux activx et range dans deux fonctions séparées bien plus précises et sans api windows ou gdi

je vois bien le mélange de rolland dranreb et moi dans ce fichier
fanfan parlais d'usine a gaz ben la ....
fractionne ta feuille et teste le placement tu verra ça ne marche plus o_O
après il en faut pour tout les gouts, souhaitons que l'on ai pas a le déboguer un jour ;)

un module classe pour 5 ou 6 ligne et pour renvoyer sur un pseudo events de l'userform en plus

je t'avouerais qu'ayant travailler des heures dessus avec rolland et dranreb je suis déçu de voir sortir des ersatz de nos ébauches

si tu retrouve la discussion tu y trouvera les next versions de nous 3 éprouvées chacun avons choisi des choses différentes c'est ce qui fait la richesse de cette discussion mais c'est largement plus complet que ça et en terme de code c'est beaucoup plus clair et plus abordable

je le dis parce que vraiment tout les 3( Rolland dranreb et moi) avons passé beaucoup de temps sur ce projet
Rolland et dranreb orienté vers form applicatif
et moi vers dialog modal
 
Dernière édition:

Discussions similaires

Réponses
1
Affichages
534

Membres actuellement en ligne

Statistiques des forums

Discussions
315 111
Messages
2 116 340
Membres
112 721
dernier inscrit
Ulricn