Fixer une date sur Excel

Bonjour je suis tout nouveau ici,

J'ai un petit problème sur un classeur Excel de suivi de stock. Je souhaiterais créer une macro qui efface une partie des données présente sur chacune des feuilles (ce que j'ai réussi à faire) et qui affiche les dates de la semaine en cours. J'ai d'abord pensé à utiliser la fonction Aujourd'hui() sauf que celle-ci s'actualise chaque jour. J'ai ensuite voulu enregistré la commande Ctrl + ; sauf qu'en me rendant dans le code de la macro je me rends compte qu'il ne prends pas en compte la commande clavier mais qu'il affiche la date du jour "19/10/2021"(voir photo). Pour résumer et faire très simple j'aimerais que un utilisateur lance une macro via un bouton et que cette macro lui permettent de retirer les données de la semaine précédente et que la date ne s'actualise uniquement quand celui-ci lance la macro.

Cordialement

3s-42.xlsm (129.65 Ko)

Antoine

capture vba

Bonjour

Voyez ce lien --> Date figée

Cordialement

Bonjour Dan, j'ai copier-coller le résultat 2.2 (méthode code VBA) que tu m'as envoyé dans l'onglet développeur. Cependant je ne comprends pas le code il m'est donc compliqué de l'adapter à ma situation ... Peux-tu m'expliquer son fonctionnement ?

Cordialement

Bon en fonction du titre j'ai peut être été trop vite pour vous répondre.

Je dois comprendre votre fonctionnement. Lorsque vous lancez le code depuis le bouton, le code inscrit la date du 19/10 dans la cellule active de la feuille Synthèse.

Puis, lorsque vous dites

que cette macro lui permettent de retirer les données de la semaine précédente et que la date ne s'actualise uniquement quand celui-ci lance la macro.

que voulez-vous dire par retirer les données ?

En fait cette fonction "d'effacer les données " n'est pas en lien direct avec la date. Je m'exprime peut-être mal aussi. Nous avons un fichier qui permet de suivre le stock et de calculer le taux d'occupation maximum en fonction des zones de stockage. Ce fichier est copier-coller en fonction du précédent chaque début de semaine. Mon objectif à travers ma macro est donc de supprimer toutes les quantités entrées la semaine précédente "le fameux effacer les données" et mon second objectif est de mettre la date à jour lorsque ma macro se lance. J'ai mis en PJ les dates que je souhaite changer seulement lorsque je lance ma macro est pas dès l'ouverture du fichier comme c'est le cas actuellement.

Cordialement

capture

Donc en gros, vous voulez uniquement réinitialiser toutes les feuilles de votre fichier (sauf la feuille Synthèse) chaque Lundi, ce qui implique les actions :

- effacer les données entre D2 et H dernière ligne
- remettre la date du Lundi en D1 (avec le critère que si on n'est pas un lundi, on ne peut exécuter le code -- dixit indication sur votre bouton)

Une chose m'intrigue cependant lorsque vous écrivez

Ce fichier est copier-coller en fonction du précédent chaque début de semaine.

Vous dupliquez le fichier chaque semaine et refaites un nouveau avec le code ?

Oui c'est tout à fait ça que j'essaye de mettre. Comme je l'expliquais dans mon premier post je suis parti de la fonction "Aujourd'hui()" en pensant que celle-ci ne s'actualiserait que lorsque la macro sera lancé mais ce n'est pas le cas. Je voulais ensuite mettre en place avec VBA un moyen d'utiliser la commande CTRL + ; pour les cellules sélectionné. Mais je ne connais pas la façon de programmé il me semble avoir vu SendKeys comme commande...

Essayez le code comme ceci

Sub MAJ_debut_semaine()
' MAJ_début_semaine Macro
If Weekday(Format(Date, "dd-mm-yyyy"), 2) <> 1 Then
    MsgBox "Vous ne pouvez exécuter cette commande que le lundi !": Exit Sub
End If

Dim i As Byte, dlg As Byte

For i = 1 To Sheets.Count
    If Sheets(i).Name <> "Synthèse" Then
        With Sheets(i)
            dlg = .Range("B" & Rows.Count).End(xlUp).Row
            .Range("D2:H" & dlg).ClearContents
            .Range("D1") = Format(Date, "dd-mm-yyyy")
        End With
    End If
Next i
End Sub

Réassociez le code à votre bouton (j'ai enlevé l'accent sur le mot "debut")

Le code va faire ceci :
- Vérifier que vous n'êtes bien un Lundi
- Balayer toutes les feuilles pour effacer les données et mettre la date en D1

Evitez les accents dans les codes et aussi dans le nom de vos feuilles si vous faites appel à VBA. Idem pour les espaces. C'est toujours source d'erreur.
Pour le test, j'ai laissé l'accent sur Synthèse mais vous pourriez aussi l'enlever du nom de votre onglet et adapter dans le code

Dites moi si ok

Cordialement

Cela semble en effet fonctionner correctement. Même si j'ai du changer le code pour réaliser le code le mardi. Je vais me pencher très sérieusement sur le code pour comprendre les manipulations qui sont réalisées...

Je vous remercie énormément pour votre aide et pour vos réponses rapides et claires.

J'ajouterai juste qu'il manquait un Next dans votre programme après le "End if".

Même si j'ai du changer le code pour réaliser le code le mardi

Faut juste changer le chiffre 1 par 2 dans la ligne Weekday -->

If Weekday(Format(Date, "dd-mm-yyyy"), 2) <> 2 then

Ensuite adapter le message bien entendu --> Msgbox ......

il manquait un Next dans votre programme après le "End if"

Oui désolé. Je l'ai ajouté dans mon post précédent

Cordialement

Rechercher des sujets similaires à "fixer date"