XL 2019 modification macro

Quicksland

XLDnaute Occasionnel
Bonjour @AtTheOne bonjour le forum ,

j'ai un petit soucis ...

Apres quelque temps d'utilisation sans accro j'ai voulu améliorer le projet

Dans un même classeur j'ai voulu insérer le même tableau que dans la feuille 1 dans une autre feuille
mais a l'ouverture la date se modifie dans les deux tableaux mais un seul se remet a zéro

Voici le code :

VB:
Option Explicit

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

'Date de dernière modif enregistrée dans le Nom (déjà créé) "DerModif"
Me.Names("DerModif").RefersTo = Date

End Sub

Private Sub Workbook_Open()

Dim WSh As Worksheet
Set WSh = Feuil1 'Feuil1 : Nom VBA de la feuille contenant les effectifs
'Si la date a changé : remise à blanc de la plage de saisie (plage nommée "PlageEffectifs")
If [DerModif] <> Date Then WSh.[PlageEffectifs].ClearContents

End Sub


Merci pour votre aide ;)
 

Pièces jointes

  • ASTUCE.xlsm
    32.6 KB · Affichages: 8

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir Quicksland,
Votre plage PlageEffectifs réfère à ASTUCE LES ALOUETTES et donc n'est effectif que sur cette page.
Peut être vaut il mieux se passer du nom de plage ainsi :
VB:
Private Sub Workbook_Open()
     Dim WSh As Worksheet
     'Si la date a changé : remise à blanc de la plage de saisie (plage nommée "PlageEffectifs")
     If [DerModif] <> Date Then
        Feuil1.[$C$14:$H$14,$C$22:$H$22,$C$29:$H$29].ClearContents
        Feuil2.[$C$14:$H$14,$C$22:$H$22,$C$29:$H$29].ClearContents
     End If
End Sub
Ensuite s'il y a plein de feuilles on peut le faire avec une boucle comme ceci :
Code:
Private Sub Workbook_Open()
     Dim F As Worksheet
     For Each F In Worksheets
        If [DerModif] <> Date Then
            Sheets(F.Name).[$C$14:$H$14,$C$22:$H$22,$C$29:$H$29].ClearContents
        End If
    Next F
End Sub
 

Pièces jointes

  • ASTUCE.xlsm
    28.5 KB · Affichages: 2

Quicksland

XLDnaute Occasionnel
Bonsoir Quicksland,
Votre plage PlageEffectifs réfère à ASTUCE LES ALOUETTES et donc n'est effectif que sur cette page.
Peut être vaut il mieux se passer du nom de plage ainsi :
VB:
Private Sub Workbook_Open()
     Dim WSh As Worksheet
     'Si la date a changé : remise à blanc de la plage de saisie (plage nommée "PlageEffectifs")
     If [DerModif] <> Date Then
        Feuil1.[$C$14:$H$14,$C$22:$H$22,$C$29:$H$29].ClearContents
        Feuil2.[$C$14:$H$14,$C$22:$H$22,$C$29:$H$29].ClearContents
     End If
End Sub
Ensuite s'il y a plein de feuilles on peut le faire avec une boucle comme ceci :
Code:
Private Sub Workbook_Open()
     Dim F As Worksheet
     For Each F In Worksheets
        If [DerModif] <> Date Then
            Sheets(F.Name).[$C$14:$H$14,$C$22:$H$22,$C$29:$H$29].ClearContents
        End If
    Next F
End Sub
 

laurent950

XLDnaute Accro
Bonsoir.

Dim Wks As Workbook
Set Wks = ThisWorkbook
MsgBox Wks.BuiltinDocumentProperties("Last save time") 'Date de dernière modif enregistrée dans le Nom (déjà créé) "DerModif"


VB:
Option Explicit
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
 ' Date de dernière modif enregistrée dans le Nom (déjà créé) "DerModif"
        Me.Names("DerModif").RefersTo = Date
End Sub

Private Sub Workbook_Open()
 ' Si la date a changé : remise à blanc de la plage de saisie (plage nommée "PlageEffectifs")
 ' [PlageEffectifs].Address = Plage Identique au deux Tableaux 1 et 2
 
 ' Deux Tableau : Soit 1 Date pour chaque tableau = 2 conditions
 
 ' Pour le Tableau 1 (Feuil1 : Renommée "ASTUCE LES ALOUETTES")
 ' Référence Date du jour = CDate([DateDuJour].Value2)
    If CDate([DerModif]) <> CDate([DateDuJour].Value2) Then
        Feuil1.Range([PlageEffectifs].Address).ClearContents 'Feuil1 : Nom VBA de la feuille contenant les effectifs
    End If

 ' Pour le Tableau 2 (Feuil2 : Renommée "ASTUCE JULES FERRY")
 ' Référence Date du jour = CDate(Range("B9").Value2)
    If CDate([DerModif]) <> CDate(Range("B9").Value2) Then
        Feuil2.Range([PlageEffectifs].Address).ClearContents 'Feuil2 : Nom VBA de la feuille contenant les effectifs
    End If
End Sub
 
Dernière édition:

AtTheOne

XLDnaute Impliqué
Supporter XLD
Bonjour @sylvanu, Bonjour @Quicksland , et bonjour à toutes & à tous.
C'est une suite du fil "ce Fil" auquel j'ai participé.
Je réadapte la macro que j'avais proposée :
Dans ta nouvelle feuille créer la nom défini "PlageEffectifs2" qui regroupe les cellules de saisie des effectifs
(j'aime bien les noms)
Accessoirement j'ai renommé "PlageEffectifs" en "PlageEffectifs1" mais se sont des fioritures.
DerModif=44846Mémorisation date dernier enregistrement
PlageEffectifs1='ASTUCE LES ALOUETTES'!$C$14:$H$14;'ASTUCE LES ALOUETTES'!$C$22:$H$22;'ASTUCE LES ALOUETTES'!$C$29:$H$29Zone de saisie 1
PlageEffectifs2='ASTUCE JULES FERRY'!$C$14:$H$14;'ASTUCE JULES FERRY'!$C$22:$H$22;'ASTUCE JULES FERRY'!$C$29:$H$29Zone de saisie 2

Le code devient : (modifs en violet gras)
Enrichi (BBcode):
Option Explicit

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
   
     'Date de dernière modif enregistrée dans le Nom (déjà créé) "DerModif"
     Me.Names("DerModif").RefersTo = Date
   
End Sub

Private Sub Workbook_Open()

     Dim WSh1 As Worksheet, WSh2 As Worksheet
     Set WSh1 = Feuil1 'Feuil1 : Nom VBA de la feuille contenant les effectifs1
     Set WSh2 = Feuil2 'Feuil2 : Nom VBA de la feuille contenant les effectifs2
    
     'Si la date a changé : remise à blanc de la plage de saisie (plages nommées "PlageEffectifs1" et "PlageEffectifs2")
     If [DerModif] <> Date Then
          WSh1.[PlageEffectifs1].ClearContents
          WSh2.[PlageEffectifs2].ClearContents
     End If
   
End Sub

Voir la pièce jointe

Mais si tu dois ajouter d'autres feuilles qui ont la même zone de saisie, et que ton classeur ne contient que ce type de feuille, le deuxième code de @sylvanu est plus efficace, je t'enjoins à l'utiliser.

modif : mise en évidence de ce qui suit
Nota : La zone n'est effacée que si la date change.

Amicalement
Alain
 

Pièces jointes

  • ASTUCE.xlsm
    32.8 KB · Affichages: 2
Dernière édition:

Quicksland

XLDnaute Occasionnel
Bonsoir.

VB:
Option Explicit
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
 ' Date de dernière modif enregistrée dans le Nom (déjà créé) "DerModif"
        Me.Names("DerModif").RefersTo = Date
End Sub

Private Sub Workbook_Open()
 ' Si la date a changé : remise à blanc de la plage de saisie (plage nommée "PlageEffectifs")
 ' [PlageEffectifs].Address = Plage Identique au deux Tableaux 1 et 2
 
 ' Deux Tableau : Soit 1 Date pour chaque tableau = 2 conditions
 
 ' Pour le Tableau 1 (Feuil1 : Renommée "ASTUCE LES ALOUETTES")
 ' Référence Date du jour = CDate([DateDuJour].Value2)
    If CDate([DerModif]) <> CDate([DateDuJour].Value2) Then
        Feuil1.Range([PlageEffectifs].Address).ClearContents 'Feuil1 : Nom VBA de la feuille contenant les effectifs
    End If

 ' Pour le Tableau 2 (Feuil2 : Renommée "ASTUCE JULES FERRY")
 ' Référence Date du jour = CDate(Range("B9").Value2)
    If CDate([DerModif]) <> CDate(Range("B9").Value2) Then
        Feuil2.Range([PlageEffectifs].Address).ClearContents 'Feuil2 : Nom VBA de la feuille contenant les effectifs
    End If
End Sub
Bonsoir @laurent950

Merci pour ta réponse

La date change mais les cellules ne se vide pas

Merci pour ton aide
 

Quicksland

XLDnaute Occasionnel
Bonjour @sylvanu, Bonjour @Quicksland , et bonjour à toutes & à tous.
C'est une suite du fil "ce Fil" auquel j'ai participé.
Je réadapte la macro que j'avais proposée :
Dans ta nouvelle feuille créer la nom défini "PlageEffectifs2" qui regroupe les cellules de saisie des effectifs
(j'aime bien les noms)
Accessoirement j'ai renommé "PlageEffectifs" en "PlageEffectifs1" mais se sont des fioritures.
DerModif=44846Mémorisation date dernier enregistrement
PlageEffectifs1='ASTUCE LES ALOUETTES'!$C$14:$H$14;'ASTUCE LES ALOUETTES'!$C$22:$H$22;'ASTUCE LES ALOUETTES'!$C$29:$H$29Zone de saisie 1
PlageEffectifs2='ASTUCE JULES FERRY'!$C$14:$H$14;'ASTUCE JULES FERRY'!$C$22:$H$22;'ASTUCE JULES FERRY'!$C$29:$H$29Zone de saisie 2

Le code devient : (modifs en violet gras)
Enrichi (BBcode):
Option Explicit

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  
     'Date de dernière modif enregistrée dans le Nom (déjà créé) "DerModif"
     Me.Names("DerModif").RefersTo = Date
  
End Sub

Private Sub Workbook_Open()

     Dim WSh1 As Worksheet, WSh2 As Worksheet
     Set WSh1 = Feuil1 'Feuil1 : Nom VBA de la feuille contenant les effectifs1
     Set WSh2 = Feuil2 'Feuil2 : Nom VBA de la feuille contenant les effectifs2
    
     'Si la date a changé : remise à blanc de la plage de saisie (plages nommées "PlageEffectifs1" et "PlageEffectifs2")
     If [DerModif] <> Date Then
          WSh1.[PlageEffectifs1].ClearContents
          WSh2.[PlageEffectifs2].ClearContents
     End If
  
End Sub

Voir la pièce jointe

Mais si tu dois ajouter d'autres feuilles qui ont la même zone de saisie, et que ton classeur ne contient que ce type de feuille, le deuxième code de @sylvanu est plus efficace, je t'enjoins à l'utiliser.

modif : mise en évidence de ce qui suit
Nota : La zone n'est effacée que si la date change.

Amicalement
Alain
Bonsoir @AtTheOne ;)

J'ai ouvert le fichier la date change mais les cellules ne se vide pas

J'ai au préalable changer la date sur mon ordinateur pour simuler un changement de jour

Il n'y aura pas d'autre feuilles juste 2 maxi

Merci pour ton aide
 

AtTheOne

XLDnaute Impliqué
Supporter XLD
Re Bonsoir
Dans le fichier donné en exemple, les cellules B9 contiennent toutes les deux AUJOURDHUI(), donc sont identiques.
Par contre le fichier enregistre le "N° Date" de la date du jour (Via Date qui renvoie la date système) lors de la sauvegarde.
A l'ouverture on teste si ce nom enregistré ("DerModif") est différent de la date du jour (toujours via Date). Ceci pour permettre à la personne qui saisit les infos de la journée de le faire en plusieurs fois.
Le lendemain, la date a changé et les plages de saisie sont effacées
 
Dernière édition:

Quicksland

XLDnaute Occasionnel
Re Bonsoir
Dans le fichier donné en exemple, les cellules B9 contiennent toutes les deux AUJOURDHUI(), donc sont identiques.
Par contre le fichier enregistre le "N° Date" de la date du jour (Via Date qui renvoie la date système) lors de la sauvegarde.
A l'ouverture on teste si ce nom enregistré ("DerModif") est différent de la date du jour (toujours via Date). Ceci pour permettre à la personne qui saisit les infos de la journée de le faire en plusieurs fois.
Le lendemain, la date à changé et les plages de saisie sont effacées
Re Bonsoir

Ok 👍

Comme avec le premier fichier avec une feuille j'arrivai a vider les cellules en changeant la date sur mon ordinateur je pensai que j'aurai le même résultat

Merci pour ton aide et bonne soirée

Ps Merci également a @sylvanu et a @laurent950 pour leurs participation
 

AtTheOne

XLDnaute Impliqué
Supporter XLD
Bonsoir @AtTheOne ;)

J'ai ouvert le fichier la date change mais les cellules ne se vide pas

J'ai au préalable changer la date sur mon ordinateur pour simuler un changement de jour

Il n'y aura pas d'autre feuilles juste 2 maxi

Merci pour ton aide
J'ai tenté de reproduire ton bug mais sans succès, peut être un pb dans le fichier.
Sort d'EXCEL​
Remets ta date système en mode auto.​
Télécharge la pièce jointe (j'ai simulé un enregistrement le 10/10/22)​
Ouvre la pJ​
Et vois ce que cela donne​

Tiens moi au courant
Amicalement
Alain
 

Pièces jointes

  • ASTUCE.xlsm
    33 KB · Affichages: 3

Quicksland

XLDnaute Occasionnel
J'ai tenté de reproduire ton bug mais sans succès, peut être un pb dans le fichier.
Sort d'EXCEL​
Remets ta date système en mode auto.​
Télécharge la pièce jointe (j'ai simulé un enregistrement le 10/10/22)​
Ouvre la pJ​
Et vois ce que cela donne​

Tiens moi au courant
Amicalement
Alain
Re bonsoir @AtTheOne

C'est toujours pareille la date change mais la première cellule soit "C14" est a 100 et ceci sur les deux feuilles

merci pour ton aide
 

AtTheOne

XLDnaute Impliqué
Supporter XLD
Bonjour à toutes & à tous, bonjour @Quicksland
Je ne comprends pas, comment se comportent les anciennes versions (à une seule feuille) qui fonctionnaient ?
Ceci pour savoir si c'est un problème lié spécifiquement à cette nouvelle version ou externe à ce celle-ci.
(Envoyé avec mon téléphone)
Amicalement
Alain
 
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
J'ai essayé par curiosité, et effectivement sur mon PC ça ne fait rien car il trouve les dates identiques.
En PJ j'ai modifié la macro pour qu'elle donne un message à l'ouverture :
VB:
    If [DerModif] <> Date Then
        MsgBox "La date est différente donc clear feuilles."
          WSh1.[PlageEffectifs1].ClearContents
          WSh2.[PlageEffectifs2].ClearContents
    Else
        MsgBox "La date est identique donc ne rien faire."
    End If
Je ne suis pas allé plus loin dans la recherche du pb. Mais au moins on sait par où passe la macro à l'ouverture.
 

Pièces jointes

  • ASTUCE (1).xlsm
    29.6 KB · Affichages: 4

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 330
Membres
103 185
dernier inscrit
salhit