XL 2021 programmation calendrier

  • Initiateur de la discussion Initiateur de la discussion Taratessy
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Taratessy

XLDnaute Nouveau
Bonjour,

Je voudrais automatiser la mise à jour des dates sur mon calendrier, par rapport à l'année indiquer en cellule E2
ex : Samedi 8 février 2025 sera le Samedi 7 février 2026

À savoir que les jours samedi dimanche, mardi, et jeudi, ne doivent pas changer ( journée officiel de nos rencontres)

si vous pouvez m'aider a automatiser cela tous en sachant que je début et ne connais pas la programmation macro ou bva

merci de votre aide
 

Pièces jointes

Bonjour

pas bien compris la contrainte " les samedi dimanche ... ne doivent pas changer..."

à partir de l'année en E2, tu peux calculer le premier samedi de février avec un formule en D11

ensuite, il te suffit de faire +7 pour le samedi suivant en E13, +8 pour le dimanche....

j'ai fait le mois de février

je te laisse finir...
 

Pièces jointes

Bonjour, tout d'abord je tenais à m'excuser pour une réponse aussi tardive. Malheureusement j'étais hospitalisé et n'ai pu vous remercier au plus tot.
Cela fonctionne très bien, et j'ai pu programmer des dates suivantes ainsi que les journées du mardi et du jeudi.
J'ai également essayé de fouiller pour une programmation lorsque je commence à mettre une lettre dans cellule C pour avoir une proposition des noms des clubs ce situant en colonne C à partir de la ligne 761mais sans resultat

pouvez vous encore maider sur ce sujet ?
voici le fichier

merci de votre aide
 

Pièces jointes

Bonjour.
Vous parlez de saisie dans la colonne C (3) ?
Parce que vous avez écrit quelque chose qui marche pas trop mal mais pour la colonne D (4) !
Notez que ça ne peut réagir qu'à la validation.
Pour que ça réagisse dès la frappe il faudrait que celle ci se fasse dans une ComboBox ActiveX qui aurait été positionnée automatiquement sur la cellule au moment de sa sélection …
 
Dernière édition:
Après avoir inséré une ComboBox laissée nommée ComboBox1, et nommé "DébListes" la plage C800:H800, ceci est prometteur:
VB:
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   Dim RngLst As Range
   ComboBox1.LinkedCell = ""
   If Target.CountLarge > 1 Or Target.Row < 12 Then Exit Sub
   Select Case Target.Column
      Case 3, 5 To 8
         Set RngLst = Intersect(Me.[Déblistes], Target.EntireColumn)
         Set RngLst = RngLst.Resize(RngLst.Offset(400).End(xlUp).Row - RngLst.Row + 1)
         ComboBox1.ListFillRange = RngLst.Address
      Case Else: ComboBox1.Visible = False: Exit Sub
      End Select
   ComboBox1.Text = Target.Value
   ComboBox1.LinkedCell = Target.Address
   ComboBox1.Left = Target.Left
   ComboBox1.Top = Target.Top + (Target.Height - ComboBox1.Height) / 2
   ComboBox1.Width = Target.Width + 16
   ComboBox1.Visible = True
   ComboBox1.Activate
   End Sub
Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
   If KeyCode = vbKeyEscape Then
      Application.EnableEvents = False
      Range(ComboBox1.LinkedCell).Select
      Application.EnableEvents = True
      ComboBox1.Visible = False: End If
   End Sub
 
Bonjour Taratessy, le forum,

Je n'avais pas vu ce fil et je trouve que la solution de Bernard par Function est belle mais bien compliquée.

Avec cette procédure Sub c'est nettement plus simple à mettre en œuvre :
VB:
Sub MAJ_Dates()
    Dim An%, tablo, i&, dat, jour, sem, j%,, ds
    With [E2]
        If .Value < 1900 Or .Value > 9999 Then .Value = Year(Date)
        An = .Value
    End With
    With Range("B11", Range("B" & Rows.Count).End(xlUp))
        tablo = .Value 'matrice, plus rapide
        For i = 1 To UBound(tablo)
            dat = tablo(i, 1)
            If IsDate(dat) Then
                jour = Weekday(dat)
                sem = Application.IsoWeekNum(dat)
                For j = j + 1 To 366
                    ds = DateSerial(An, 1, j)
                    If Weekday(ds) = jour And Application.IsoWeekNum(ds) = sem Then tablo(i, 1) = ds: Exit For
                Next j
            End If
        Next i
        .Value = tablo 'restitution
    End With
End Sub
Avec ajout dans la Worksheet_Change :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Intersect(Target, [E2]) Is Nothing Then MAJ_Dates 'lance la macro
A+
 

Pièces jointes

Dernière édition:
Je joins le classeur muni des deux dispositifs, la ComboBox1 et la mise en place lors d'une saisie de date en B de la fameuse formule rectifiant automatiquement toutes les dates lorsqu'on change l'année en E2.
On pourrait se passer de la fonction DateAnSemJS au prix d'une formule un tout petit plus compliquée et de deux ou trois noms dans la feuille basés sur l'année en E2. Mais à quoi bon, vu que je considère que la complexité ni la taille d'un module n'a d'importance du moment que ces trois conditions sont réunies :
1) — Ses procédures et fonctions sont faciles à utiliser grâce à un paramétrage simple, intuitif et documenté,
2) — Elles n'ont plus jamais à être retouchées une fois mises au point,
3) — Elles sont d'une performance satisfaisante.
 

Pièces jointes

Bonjour @Taratessy.
Une chose m'intrigue depuis le début dans vos vagues allusions à des jours particuliers, alors je vous pose carrément la question :
Lors du changement d'année, certaines dates devraient elles être corrigées selon une autre règle que leur numéro de semaine et de jour, genre date anniversaire ou décalage en jours par rapport à la date de Pâques ? Si c'était le cas, comment reconnaître d'après la saisie qu'elle doit être reformulée selon cette règle différente ?
 
Bonsoir Taratessy, Bernard,

Ma macro du post #8 supposait de vraies dates en colonne B or dans le fichier du post #1 ce sont des textes.

J'ai donc revu la macro pour que les dates soient des textes, on notera qu'elle ignore les dates calculées par formules * :
VB:
Sub MAJ_Dates()
    Dim An, AncienneAnnee, tablo, i&, dat, jour, sem, j%, ds
    With [E2]
        If .Value < 1900 Or .Value > 9999 Then .Value = Year(Date)
        An = Int(.Value)
    End With
    AncienneAnnee = [memAn] 'nom défini
    ThisWorkbook.Names.Add "memAn", An 'nouvelle année mémorisée
    With Range("B11", Range("B" & Rows.Count).End(xlUp))
        tablo = .Formula 'matrice, plus rapide
        For i = 1 To UBound(tablo)
            dat = tablo(i, 1)
            If Left(dat, 1) <> "=" Then 'ignore les formules
                dat = Mid(dat, InStr(dat, " ") + 1) & " " & AncienneAnnee
                If IsDate(dat) Then
                    dat = CDate(dat)
                    jour = Weekday(dat)
                    sem = Application.IsoWeekNum(dat)
                    For j = j + 1 To 366
                        ds = DateSerial(An, 1, j)
                        If Weekday(ds) = jour And Application.IsoWeekNum(ds) = sem Then _
                            tablo(i, 1) = Application.Proper(Format(ds, "dddd")) & Format(ds, " d mmmm"): Exit For
                    Next j
                End If
            End If
        Next i
        .Formula = tablo 'restitution
    End With
End Sub
* En B342 c'est le lundi de Pentecôte et en B457 c'est le jour férié du 14 juillet, les dates sont calculées par formules.

Bien sûr quand on change d'année ces dates ne sont plus à la bonne place dans le calendrier.

A+
 

Pièces jointes

Dernière édition:
Bonjour à tous je tenais déjà principalement à vous remercier car j'ai plus modifier ce calendrier en y apportant certaines modifications vos conseils ont été de bonnes factures
Ceci dit je bloque encore sur certaines choses comme vous pouvez le constater dans ce classeur j'ai 3 feuilles je voudrais que lorsque je modifie calendrier général ma feuille 2 calendrier arbitre se modifie aussi tout en gardant la colonne I intact avant changement dans la mesure du possible je voudrais que celle-ci s'adapte dès lors que je modifie avec une insertion ou une suppression de lignes dans calendrier En vous remerciant par avance pour l'aide que vous pourrez m'apporter
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
12
Affichages
1 K
Retour