Microsoft 365 Calendrier dynamique avec sauvegarde

samsam2212

XLDnaute Nouveau
Bonjour,

Je sais que cette question est récurrente. Mais je n'arrive pas à ouvrir les fichiers que vous mettez en pièces jointes...

J'ai créé un calendrier pour réserver des véhicules, j'ai créé une liste déroulante pour afficher tous les mois et une liste pour les années. J'ai trouvé le code pour réinitialiser en changeant le mois et l'année : clearcontents. Seulement j'ai besoin que ces informations soit sauvegardées, je sais qu'il faut créer une base de données. Mais je n'arrive pas à trouver le code ? Quelqu'un pour m'aider s'il vous plaît ?

Je vous remercie d'avance,

Sam
 

Staple1600

XLDnaute Barbatruc
Bonjour @samsam2212

Mais je n'arrive pas à ouvrir les fichiers que vous mettez en pièces jointes...
Quel type de fichier ?
Des classeurs ?
Ou des fichiers avec l'extension *.zip ?

Si tu possédes Excel 365, tu dois pouvoir ouvrir tout type de classeur.
(*.xls *.xlsx *.xlsm *.xlsb)

EDITION
Sinon, pour ta question, joins une version anonymisée de ton calendrier en éditant ton premier message pour y ajouter ton fichier.
(en cliquant sur Joindre un fichier en bas à gauche du message)
 
Dernière édition:

samsam2212

XLDnaute Nouveau
Bonjour,

Voici mon fichier, c'est une version test, mais comme vous pouvez le constater, actuellement, lorsqu'une valeur est rentrée dans une cellule pour "réserver", elle disparaît lorsque je change de mois et d'années.

voici à quoi cela ressemble
1682242188078.png


1682242057651.png
1682242081733.png
 

Staple1600

XLDnaute Barbatruc
Re

Une propostion de simplifaction du code de ton userform
Code:
Private Sub CommandButton1_Click()
If ComboBox1.ListIndex >= 0 Then
Sheets(ComboBox1.Value).Activate
Else
MsgBox "Veuillez choisir une valeur!", vbCritical
ComboBox1.SetFocus
End If
End Sub

Private Sub UserForm_Initialize()
ComboBox1.List = Split("M D B A N H F P J")
End Sub
Actuellement, ton userform te sert à choisir une feuille

Mais ensuite ? Que faut-il faire ?

PS: Tu peux donc ouvrir les PJ
Mais tu ne souhaites pas le faire pour des raisons de sécurité
Ce n'est pas la même chose ;)
 
Dernière édition:

samsam2212

XLDnaute Nouveau
Merci je vais recopier ce code. Alors ensuite, lorsque je choisis M, je tombe sur la feuille associé à M, je veux réserver le 9 Avril, mais lorsque je clique sur le mois de Mai, tout disparaît avec le code clearcontents cellule. Je voudrais que mes données ne se réinitialise pas en changeant de mois ou d'années.

Effectivement, je vais me connecter à partir d'un autre PC.
 

Staple1600

XLDnaute Barbatruc
Re

je ne vois pas à quelle action est associée cette macro ?
Code:
Sub TEST()
Range("D10").ClearContents
End Sub

Suggestion:
Une fois, ta réservation effectuée pour un mois donné, je ferai un export PDF de la feuille
(donc une sauvegarde) pour pouvoir ensuite faire une nouvelle réservation.
Qu'en penses-tu ?
 

samsam2212

XLDnaute Nouveau
Oui, c'est une première solution, mais si par mégarde quelqu'un changer de mois, on perdrait tous les données ? il faudrait bloquer le mois en cours, pour qu'on ne puisse pas accéder aux autres mois ?

Pour le sub Test()

C'était un test, cela me supprime les données dans la cellule D10 en changeant de mois. J'ai associé cette macro à la liste défilante qui sert à défiler les mois. C'était un bon début sauf que c'est embêtant, si on sait déjà que le mois prochain on veut réserver, on peut pas passer d'un mois à un autre sans perdre les données.
 

Staple1600

XLDnaute Barbatruc
Re

Dans ce cas, il est possible avec la procédure Activate de faire un truc du genre
(à mettre dans ThisWorkBook)
Code:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If Len(Sh.Name) = 1 Then
Sh.Range("C6") = DateSerial(Year(Now), Month(Now), 1)
End If
End Sub
Avec ce code, quand tu actives une feuille, celle-ci affiche le mois en cours.

Mais dans ce cas, la zone combinée et l'ascenseur doivent être remaniés aussi.
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re,

ensuite il faudra que je puisse faire une export de chaque feuille en PDF de chaque mois

Il suffit de le faire manuellement tout en laissant tourner l'enregistreur de macros
Tu auras ainsi le code VBA de base.

Pour la zone combinée et l'ascenseur à toi de voir.
C'est ton classeur, donc ta conception et ton idée de l'ergonomie de celui-ci.

Tu m'as demandé pour afficher uniquement le mois en cours.
C'est ce que fait le code du message#10.

Qui implique qu'à chaque fois que tu affiches une feuille, celle-ci affichera le mois en cours.
 

Staple1600

XLDnaute Barbatruc
Re,

@samsam2212
Pour l'export en PDF
Si tu veux que ta feuille tienne sur une seule page, il faut choisir
Format du papier : A3
Orientation: Paysage
Ajuster : 1 page(s) en largeur sur 1 page en hauteur

Un exemple basique pour un export en PDF
VB:
Sub Export_PDF()
Dim PDF_Path$, Nom_PDF$
PDF_Path = ThisWorkbook.Path & "\"
Nom_PDF = InputBox("Nom du PDF?", "Export PDF", "test.pdf")
Application.ScreenUpdating = False
    ActiveSheet.PageSetup.PrintArea = "$C$6:$AH$33"
    With ActiveSheet.PageSetup
        .LeftMargin = Application.InchesToPoints(0)
        .RightMargin = Application.InchesToPoints(0)
        .TopMargin = Application.InchesToPoints(0)
        .BottomMargin = Application.InchesToPoints(0)
        .HeaderMargin = Application.InchesToPoints(0)
        .FooterMargin = Application.InchesToPoints(0)
        .PrintHeadings = False
        .PrintGridlines = False
        .PrintComments = xlPrintNoComments
        .PrintQuality = 600
        .CenterHorizontally = True
        .CenterVertically = True
        .Orientation = xlLandscape
        .Draft = False
        .PaperSize = xlPaperA3
        .FirstPageNumber = xlAutomatic
        .Order = xlDownThenOver
        .BlackAndWhite = False
        .Zoom = False
        .FitToPagesWide = 1
        .FitToPagesTall = 1
    End With
Range("$C$6:$AH$33").ExportAsFixedFormat _
                        Type:=xlTypePDF, _
                        Filename:=PDF_Path & Nom_PDF, _
                        Quality:=xlQualityStandard, _
                        IncludeDocProperties:=False, _
                        IgnorePrintAreas:=False, _
                        OpenAfterPublish:=False
End Sub
 

Staple1600

XLDnaute Barbatruc
Re

@samsam2212
N'est-ce pas toi qui à dit:
il faudrait bloquer le mois en cours, pour qu'on ne puisse pas accéder aux autres mois ?
C'est donc ce que s'attache à faire le code du message#10
(uniquement quand on active l'onglet)
Donc une fois sur celui-ci
Deux possibilités
1) saisie d'une réservation pour le mois en cours
2) saisie pour autre mois

Pour ce faire (en gardant la formule en C6 et l'utilisation de l'ascenceur)
Remplacer le code précédent de ThisWorkBook par celui-ci
VB:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If Len(Sh.Name) = 1 Then
Sh.Range("B13") = Month(Now)
End If
End Sub
NB: En C6, la formule était (de mémoire) :=DATE($B$14;$B$13;$B$12)
 

Discussions similaires