Date automatique et manuel

Bonjour tout le monde,

c'est mon premier message sur le forum j'espère que vous serez indulgent avec moi

J’essaie d'automatiser les dates de la feuille de pointage de l'entreprise malheureusement je débute en VBA et j'aurai besoin de votre aide !

Alors pour vous expliquer les différentes cellules et leurs relations :

F6 : renvoie le mois en fonction de L6

I6 : l'année en fonction de L6

L6 : le numéro de semaine

N6 : le premier jour de la semaine (dd/mm) en fonction de L6

P6 : le jour du vendredi en fonction de L6

B13, B18, B23, B28, B33 : les différents jours du lundi au vendredi sous la forme (dddd dd) en majuscule

la cellule L6 affiche la semaine en cours si la cellule R3 n'est pas renseigné, si R3 est renseignée L6 (et toutes les autres cellules en relation) s'adapte pour par exemple entrer une semaine précédentes

J'ai tout d'abord réaliser cette opération sans passer par le VBA mais aujourd'hui je coince car je cherche a archiver les feuilles automatiquement, je dois donc avoir une valeur dans la cellule et non plus une formule.

Je cherche donc a renseigner ces cellules en VBA j'ai réussi a renseigner certaines cellules, par exemple pour L6 :

Range("L6") = Format(Now(), "ww", 2)

mais le problème c'est que je cherche également a utiliser R3 comme cellule de gestion et la je bloque totalement... Avez-vous une idée, je pense qu'il serait plus simple de renseigner les différentes cellules directement en fonction de R3 en changeant juste le format ?

par exemple pour l'année

 if R3="" then Range("I6") = Format(Now(), "yyyy") Else (code pour calculer l'année en fonction du numéro de semaine présent en R3 

Merci de votre aide !

Bonjour,

Je ne suis pas certain d'avoir réellement cerné la totalité du problème.

Ce que vous voudriez faire c'est une macro qui réalise ce que vous avez déjà inscrit au sein des cellules pour que celles-ci ne soient plus composées de formules?

Ne serait-il pas plus simple de copier toute la feuille et la coller en valeur sur une autre, et automatiser l'archivage à partir de cette copie en valeur?

Il serait plus simple, afin de mieux cibler le problème, d'avoir un fichier joint, sans les données sensibles du document initial bien sûr.

Oui c’est éxactement ce que j’aimerai faire !

Non ce n’est pas plus simple pour moi car j’archive une fois dans un autre classeur pour le salarié et une fois sur le serveur commun pour l’administration en pdf avec un nom dynamique juste en fonction de ces cellules.

De plus mon tableau est personnalisé (largeur colonne, style d’écriture etc) je suis donc obligé de passeur par une double copie (valeur puis mise en forme). J’envisage de passer sur une copie façon transfert qui est plus rapide une fois ce problème de date réglé.

Merci de ton aide

Bien, je commence à comprendre.

En revanche, comment l'année est-elle déduite du numéro de semaine?

Si je comprends bien, les cellules L6 et R3 varient entre 1 et 52?

Encore une fois, il serait plus simple d'avoir un fichier vierge comprenant les formules actuelles.

Avec cette formule :

=TEXTE(7*L6+DATE(ANNEE(AUJOURDHUI());1;3)-JOURSEM(DATE(ANNEE(AUJOURDHUI());1;3))-5;"aaaa")

Oui la cellule R3 est soit vide (semaine actuelle) soit renseignée entre 1 et 52. La L6 se réfère à la cellule R3.

Bien, tout s'éclaircit! Tentez une macro avec ce code, j'ai essayé de la commenter au mieux pour en partager le déroulement, et dites-moi si ça correspond à ce que vous vouliez. C'est pas tellement optimisé, il y aura peut-être de meilleurs réponses que moi par l'avenir mais ça a l'air de fonctionner

En revanche, la cellule I6 conserve l'année en cours, si j'ai bien compris? Ou est-ce qu'il arrive qu'il y ait une case S3 qui contienne l'année de la semaine ciblée?

Sub Macro2()
    If IsEmpty(Range("R3")) Then        ' Nous testons si la cellule R3 est vide
        Range("L6").Value = Format(Now(), "ww", 2) ' L6 devient le n° de la semaine actuelle
        Range("I6").Value = Format(Now(), "yyyy")  ' I6 devient l'année actuelle
        Range("I6").NumberFormat = "General" ' Indispensable si I6 est en format date
    Else
        Range("L6").Value = Range("R3").Value ' L6 prend la valeur de R3
        Range("I6").Value = Format(Now(), "yyyy") ' !!!!!! I6 garde l'année actuelle, modifier cette ligne si l'année ciblée n'est pas l'année en cours !!!!!!
        Range("I6").NumberFormat = "General"
    End If

    ' la suite est en dehors de la condition du fait que L6 ait pris la valeur de R3

    jlundi = 7 * Cells(6, 12).Value + DateValue("01/01/" & Cells(6, 9)) - Weekday("01/01/" & Cells(6, 9), vbMonday) - 6
    ' la variable jlundi comporte la date en dd/mm/yyyy du lundi de la semaine ciblée par L6 et I6

    Range("F6") = UCase(Format(jlundi, "mmmm")) 'F6 devient le mois de jlundi
    Range("N6").Value = " " & Day(jlundi) & "/" & Month(jlundi)
    Range("P6").Value = " " & Day(jlundi + 4) & "/" & Month(jlundi + 4) ' P6 est la concatenation du jour et mois de jlundi+4 (donc du vendredi)
    Range("C11").Value = Day(jlundi) ' C11 prend la valeur du jour de jlundi
    Range("C16").Value = Day(jlundi + 1) ' C12 prend la valeur de jlundi+1 donc du Mardi de la semaine cible
    Range("C21").Value = Day(jlundi + 2) ' ...
    Range("C26").Value = Day(jlundi + 3)
    Range("C31").Value = Day(jlundi + 4)
End Sub

Merci pour ton aide Aterik !

j'ai donc repris ton code en le modifiant un peu afin qu'il s'incorpore avec le Worksheet Change !

Concernant l'année je pense l'intégrer plu tard, je réfléchi encore au bon moyen : si je fais un classeur pour chaque année, si je l'intègre à une base de donnée.. En attendant elle marchera sur 2019, j'aurai une année pour mettre en place un système durable.

Sub dateauto()
    If Not IsNumeric(Range("Q3")) Then
        Range("K6").Value = Format(Now(), "ww", 2)
        Range("H6").Value = Format(Now(), "yyyy")
        Range("H6").NumberFormat = "General"
    Else
        Range("K6").Value = Range("Q3").Value
        Range("H6").Value = Format(Now(), "yyyy")
        Range("H6").NumberFormat = "General"
    End If

    jlundi = 7 * Cells(6, 11).Value + DateValue("01/01/" & Cells(6, 8)) - Weekday("01/01/" & Cells(6, 8), vbMonday) - 6

    Range("E6") = Format(jlundi, "mmmm")
    Range("M6").Value = " " & Day(jlundi) & "/" & Month(jlundi)
    Range("O6").Value = " " & Day(jlundi + 4) & "/" & Month(jlundi + 4)
    Range("B11").Value = WorksheetFunction.Proper(Format(jlundi, "dddd d"))
    Range("B16").Value = WorksheetFunction.Proper(Format(jlundi + 1, "dddd d"))
    Range("B21").Value = WorksheetFunction.Proper(Format(jlundi + 2, "dddd d"))
    Range("B26").Value = WorksheetFunction.Proper(Format(jlundi + 3, "dddd d"))
    Range("B31").Value = WorksheetFunction.Proper(Format(jlundi + 4, "dddd d"))
End Sub

Voici le Worksheet Change :

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
  If Target.Address = "$Q$3" And Target.Count = 1 Then
    If Target = "" Then
        [Q3] = "Veuillez entrer le numéro de semaine à saisir."
        Call dateauto
      On Error Resume Next
        Sheets("S" & Sheets("Pointage").[K6].Value & " - " & Sheets("Pointage").[H6].Value).Range("C11:O35").Copy Destination:=Sheets("Pointage").Range("C11")
    Else
        Call dateauto
      On Error Resume Next
        Sheets("S" & Sheets("Pointage").[K6].Value & " - " & Sheets("Pointage").[H6].Value).Range("C11:O35").Copy Destination:=Sheets("Pointage").Range("C11")
    End If
  End If
End Sub

Effectivement je pense qu'il peut y avoir un code plus "avancé" on va dire, mais au moins il fait le taff, encore une fois merci !

PS : j'aurai une dernière question pour toi Aterik, tu as vu mon classeur sur le coté j'ai une une cellule compteur heure supplémentaire.Jj'aimerai faire en sorte qu'elle affiche la synthèse de toutes les feuilles sauf de la feuille modèle, du genre somme de la colonne heure supp - somme colonne recup et qu'il affiche il vous reste x heures à récupérer si le résultat est positif ou il vous reste x heures a donner si négatif, selon toi qu'elle est la meilleure solution ? j'ai vu le FillAcrossSheets, mais ca ne me semble pas adapté, as-tu une piste à me suggérer ?

Merci !

Rechercher des sujets similaires à "date automatique manuel"