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
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
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
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"
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
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
=44846
Mé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$29
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 effectifs1Set 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.
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
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
=44846
Mé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$29
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 effectifs1Set 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.
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
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
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
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
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.