Ne commence pas le 06 janvier 2024

Bonsoir à toutes et à tous,

Feuille accueil : jour variable : Taper 06/01/2024. Cellule H4 : choisir 06, cellule I4 : choisir janvier, Cellule J' : choisir 2024 puis cliquer sur le bouton de commande Générer année 2024.

Feuille Une journée de jeu : la première date est celle du samedi 29 juin 2024, tout ce qui précède (seuls les samedi et dimanche sont autorisés) ce samedi n'apparaît pas. Merci de m'aider à régler ce problème.

Nota : ce programme a été créé à partir de celui D'ALS35 qui lui concernait toute l'année mais du lundi au vendredi (les samedi et dimanches n'étaient pas autorisés).

bonjour,

utilisez la macro "générerAnnée" et modifiéz, si nécessaire, ces 2 derniers chiffres pour le mois (premier 1) et le jour (2ième 1)

DateDébut = DateSerial(Range("AnnéeCréation").Value, 1, 1) '01 janvier

Sub GénérerAnnée()

Dim DateDébut As Date, DateFin As Date
Dim Jour As Date

Dim I As Long
Dim DerLigne As Long

    Application.ScreenUpdating = False

    With shUJDJ

        'Effacer les colonnes de la feuille UJDJ
        Call EffacerUJDJ

        DateDébut = DateSerial(Range("AnnéeCréation").Value, 1, 1) '01 janvier
        DateFin = DateSerial(Range("AnnéeCréation").Value, 12, 31)  '31 décembre

        'Pour tous les jours de l'année
 

Bonjour,

j'ai crû comprendre qu'il fallait générer l'année à partir de la date demandée et non l'année entière, si c'est bien le cas alors:

Sub GénérerAnnée()
    Dim DateDébut As Date, DateFin As Date
    Dim Jour As Date
    Dim I As Long
    Dim DerLigne As Long
    Dim Mois As Integer
    Jour = Sheets("Accueil").Range("H4").Value
    Mois = Month(Sheets("Accueil").Range("I4").Value & "/1")
    Application.ScreenUpdating = False
    EffacerUJDJ
    With shUJDJ
        Call EffacerUJDJ        'Effacer les colonnes de la feuille UJDJ
        DateDébut = DateSerial(Range("AnnéeCréation").Value, Mois, Jour)
        DateFin = DateSerial(Range("AnnéeCréation").Value, 12, 31)

        'Pour tous les jours de l'année
        For Jour = DateDébut To DateFin
            'Si c'est un jour du lundi au vendredi
            'If Weekday(Jour, vbSaturday) <= 2 Then
                'Calculer le décalage à utiliser ensuite pour la copie
                DerLigne = .Range("A" & Rows.Count).End(xlUp).Row
                If DerLigne = 1 Then
                    I = 0
                Else
                    I = DerLigne
                End If
                'Copier la plage modèle avec un décalage de I lignes à partir de A1 dans la feuille UJDJ
                Range("PlageModèleUJDJ").Copy .Range("A1").Offset(I, 0)
                'Renseigner la date de la journée du jeu
                .Range("A2").Offset(I, 0).Value = Jour
            'End If
        Next Jour
    End With
    Call GénérerSautsPageUJDJ
    With shUJDJ
        'Afficher la feuille Saisie UJDJ
        .Visible = xlSheetVisible
        .Activate
    End With
    Application.ScreenUpdating = True
End Sub

j'ai aussi apporté quelques modifications sur les macros suivantes:

-"Worksheet_Change" de la feuille "Accueil"

-"GénérerJour" du module "ModuleBoutonsJour"

-"GénérerAnnée" du module "ModuleBoutonsJour"

-"GénérerSautsPageUJDJ" du module "ModuleCDLDC"

Cdlt

re,

j'avais vu tout ça, mais je n'osais pas supprimer la moitié du code VBA, parce que c'est plusieurs fois la même chose. Avec 20-30 lignes, tout est fait, mais ce serait trop compliqué pour le TS.

Bonjour à tous,

Merci, c'est beaucoup mieux à une exception près : tous les lundi, mardi, mercredi, jeudi et vendredi ne devraient pas apparaître (fichier d'Arturo). Je n'ai pas encore testé la solution proposée par BsAlv

Bonjour,

Et comme ça ?

Bonjour BeGood, (celui qui porte bien son pseudo),

C'est parfait.

Bonjour à tous,

Merci, c'est beaucoup mieux à une exception près : tous les lundi, mardi, mercredi, jeudi et vendredi ne devraient pas apparaître (fichier d'Arturo). Je n'ai pas encore testé la solution proposée par BsAlv

Dans la demande initiale:

Nota : ce programme a été créé à partir de celui D'ALS35 qui lui concernait toute l'année mais du lundi au vendredi (les samedi et dimanches n'étaient pas autorisés).

Partant de cette dernière remarque, j'avais compris qu'il fallait tous les jours de l'année. Mauvaise interprétation de ma part.

Cdlt

Pour Arturo83 : ce n'est pas grave. L'erreur est humaine.

Pour BsAlv : dans votre dernier fichier, l'exécution sort une erreur : Propriété ou méthode non gérée par cet objet. d = WorksheetFunction.WorkDay_Intl(d, 1, "1111100")

Je clôture ce fil en prenant la solution de BeGood. Maintenant, je vais retourner sur le fichier ArticlesBudgets de BeGood afin de travailler sur la suite comme il me l'a suggéré.

J'ai omis involontairement de vous remercier tous pour votre participation à résoudre mon problème.

re,

WorkDay_Intl est connu par excel et VBA depuis excel2010, donc avez-vous vraiment 2010 ? Cette macro, le msgbox vous donne quoi ?
Sub test()
     Dim d
     On Error Resume Next
     d = 0
     d = WorksheetFunction.WorkDay_Intl(Date, 1, "1111100")
     On Error GoTo 0

     MsgBox "type : " & VarType(d) & vbLf & Format(d, "ddd dd-mm-yy")
End Sub

Propriété ou méthode non gérée par cet objet. d = WorksheetFunction.WorkDay_Intl(d, 1, "1111100")

re,

le problème avec vous, c'est qu'on se situe à 2 niveaux différents de connaissance, votre feedback sert à rien et le nôtre n'est pas compris.

Je ne comprends pas ce que vous voulez et ce que je dois faire de votre macro Sub Tests.

re,

voir ma réaction de hier 19:22

Rechercher des sujets similaires à "commence pas janvier 2024"