JOUR appartient à la semaine

Bonjour, merci de m'aider SVP dans ce problème, je veux que si le jour fait partie à la semaine exacte ==> OK sinon NOK ( sachant que S17 est considérée comme date)

vba

Bonjour,
Une proposition !?
Cdlt.

capture d ecran 2022 05 01 040029

Merci Bcp pour ton explication, mais ça marche pas , je sais pas quoi modifier dans le code.

image

Re,
Ma proposition utlise des formules à insérer dans une feuille de calcul.
Elle n'utilise pas VBA.
Cdlt.

ok un grand merci eric. mais moi j'aimerais bien de le faire a l'aide d'une macro.

Re,
Ta demande demandait une proposition VBA ?
Joins un fichier avec des données représentatives.
Cdlt.

en fait le vrai fichier est confidentiel, alors j'ai essayé de vous rapprocher un peu avec celui ci-dessous.

D'avance merci.

image

Bonjour,

La fonction NO.SEMAINE.ISO n'est pas disponible sous VBA.

Vous pouvez utiliser la fonction que j'ai développée pour déterminer le numéro de semaine selon la norme ISO, qui est que le premier jeudi de l'année appartient à la semaine 1 de l'année.

Function No_Semaine(date_s)
    Dim année As Integer, j As Integer, jour As String
    Dim date_j As Date, date_1er_jour_année As Date, date_1er_jour_année_suivante As Date, date_1er_jour_année_précédente As Date
    Dim date_lundi_semaine1_année As Date, date_lundi_semaine1_année_suivante As Date, date_lundi_semaine1_année_précédente As Date, date_lundi_semaine1 As Date

    No_Semaine = ""
    If Not IsDate(date_s) Then Exit Function

    année = Year(date_s)
    'détermination date du premier lundi de la semaine 1 de l'année
    date_1er_jour_année = DateSerial(année, 1, 1)
    For j = 0 To 6
        date_j = date_1er_jour_année + j
        jour = Format(date_j, "dddd", vbMonday)
        If jour = "jeudi" Then
            date_lundi_semaine1_année = date_j - 3
        End If
    Next
    'détermination date du premier lundi de la semaine 1 de l'année suivante
    date_1er_jour_année_suivante = DateSerial(année + 1, 1, 1)
    For j = 0 To 6
        date_j = date_1er_jour_année_suivante + j
        jour = Format(date_j, "dddd", vbMonday)
        If jour = "jeudi" Then
            date_lundi_semaine1_année_suivante = date_j - 3
        End If
    Next
    'détermination date du premier lundi de la semaine 1 de l'année précédente
    date_1er_jour_année_précédente = DateSerial(année - 1, 1, 1)
    For j = 0 To 6
        date_j = date_1er_jour_année_précédente + j
        jour = Format(date_j, "dddd", vbMonday)
        If jour = "jeudi" Then
            date_lundi_semaine1_année_précédente = date_j - 3
        End If
    Next

    'détermination date du lundi de la semaine 1
    Do
        date_lundi_semaine1 = date_lundi_semaine1_année_suivante
        If date_s >= date_lundi_semaine1 Then Exit Do
        date_lundi_semaine1 = date_lundi_semaine1_année
        If date_s >= date_lundi_semaine1 Then Exit Do
        date_lundi_semaine1 = date_lundi_semaine1_année_précédente
        Exit Do
    Loop

    'détermination de la semaine
    No_Semaine = 1 + (date_s - date_lundi_semaine1) \ 7

End Function

Bonjour à tous,

@AGB,
Tu renvoies une image alors que l'on te demande un petit fichier représentatif de tes données.
Que contient ta cellule B2 (donnée en dure, variable) ? Doit-elle contenir le numéro de la semaine courante, car aujoudh'hui on est en semaine 18....

@Thev,
L'object WorksheetFunction comporte la fonction IsoWeekNum et elle est équivalente à la fonction de feuille de calcul.
Un oubli ?

capture d ecran 2022 05 02 120413
L'object WorksheetFunction comporte la fonction IsoWeekNum et elle est équivalente à la fonction de feuille de calcul.
Tout à fait. J'ai répondu trop vite car je suis resté focalisé sur la traduction française de la fonction.

Bonsoir,

de mon côté quand je ne connais pas , j'utilise l'enregistreur de macro et je rentre dans une cellule la formule voulue, et là j'obtiens je crois la syntaxe de la fonction sous VBA :

ActiveCell.FormulaR1C1 = "=ISOWEEKNUM(RC[1])"

Du coup en ajoutant WorksheetFunction. j'ai m'a traduction. Cela marche t il pour tout ? Je ne sais pas. Jean-Eric ? thev ?

@ bientôt

LouReeD

Bonsoir LouReeD,

C'est bien la bonne méthode pour obtenir la syntaxe correcte de la fonction. Mais les habitudes ont la vie dure. Comme je me suis toujours servi de ma fonction personnalisée, je n'y ai pas pensé immédiatement. Le fait est que cette fonction avec la norme ISO est arrivée tardivement dans Excel et n'existait pas quand j'en ai eu besoin.

Mais pas de soucis, ce n'était pas "pour vous"
mais souvent dans les conversations, à la lectures des demandes je me dis que beaucoup ne connaissent pas l'enregistreur !
Alors oui le code issu de ce dernier est "trop" ! Mais avec un peu de logique on arrive à en sortir l'essentiel.

@ bientôt

LouReeD

Le but de l'enregistreur est de donner des indications sur les objets à utiliser mais son code ne doit pas être reproduit en l'état car effectivement très largement superfétatoire.

SUPERFETATOIRE ! Mais qu'est-ce que donc ce truc ?

@ bientôt

LouReeD

Merci beaucoup à vous tous, le prblm est bien résolu.

cdlt

Bonsoir,

merci @ vous pour ce retour !

@ bientôt

LouReeD

Rechercher des sujets similaires à "jour appartient semaine"