Fermeture automatique d'un classeur et filtre à zéro

Bonjour à tous

J'ai un souci avec le code de fermeture automatique, il m'envoi un message d'incompatibilité de type sur cette ligne 'R = TimeValue("00:" & M & ":" & S).

Pourtant, lorsque j'ai inséré la macro au classeur la première fois la première, elle marchait sans problème!

Je prévoyais aussi ajouter un code qui permettrait de remettre le filtre automatique à zéro à la fermeture. Le filtre se trouve à la ligne 4 des cellules A:H, mais pour l'heure, c'est sans résultat. Sans doute que je n'insère pas au bon endroit dans le code la mise par défaut du filtre.

Merci d'avance pour vos lanternes de génie.

'Code dans un module:

Option Explicit

Public Durée As Date
Public Arrêt As Boolean
Public Laps As Double

Sub Départ()

Dim D As Date
D = Now + TimeValue(Durée)
Application.OnTime D, "FermerLeClasseur"
Durée = TimeValue("00:10:00")
End Sub

Sub FermerLeClasseur()

Dim M As Integer
Dim S As Integer
Dim R As String

If Arrêt = False Then
    'Ferme et enregistre le classeur.
    ThisWorkbook.Close True
Else
    Laps = Timer - Laps
    M = Int(Laps / 60)
    S = Int(Laps)
    R = TimeValue("00:" & M & ":" & S)******provoque une incompatibilité de type******
    Durée = TimeValue(Durée) - TimeValue(R)
    Arrêt = False
    Départ
End If

End Sub

'Code dans ThisWorkBook

Private Sub Workbook_Open()
'ouverture
'Activer le filtre à l'ouverture
'Me.AutoFilterMode = True
'If Sheets("Demandes").Activate Then
    'Range("A4:H4").Select
    'Selection.AutoFilter
    'Range("A4").Select
'End If

MsgBox ("Ceci est un démo!") 

Arrêt = False: Laps = Timer
'Le temps pendant lequel le fichier n'est pas activé
'Heures:Minutes:Secondes
' à ajuster ici c'est réglé sur 10 minutes !
Durée = TimeValue("00:10:00")
Départ

End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
'Remarque : cette macro événementielle détecte les clics dans une cellule du classeur.
'Vous pouvez bien entendu utiliser un autre événement pour décider qu'un classeur est inactif
'Pas de clic dans une cellule donnée, pas de saisie dans un userform, pas de changement de feuille...
Arrêt = True
Laps = Timer
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Fermeture - remettre le filtre à zéro (par défaut)
ActiveSheet.AutoFilterMode = False
End Sub

Bonjour,

proposition de correction pour l'incompatibilité de type

Sub FermerLeClasseur()

Dim M As Integer
Dim S As Integer
Dim R

If Arrêt = False Then
    'Ferme et enregistre le classeur.
   ThisWorkbook.Close True
Else
    Laps = Timer - Laps
    M = Int(Laps / 60)
    S = Int(Laps)
    R = TimeValue("00:" & M & ":" & S)******provoque une incompatibilité de type******
    Durée = TimeValue(Durée) - R
    Arrêt = False
    Départ
End If

End Sub

Bonjour h2so4

malheureusement, votre proposition de correction ne fonctionne pas. Erreur13, incompatibilité de type persiste!

Merci de votre intétêt

bonjour

l'erreur est-elle sur la même ligne ? as-tu bien remplacé le dim R as string par dim R tout court ?

Bonjour h2so4

Oui, tout à fait. L'incompatibilité est sur la même ligne et j'ai exactement appliqué le code tel que vous me l'avez suggérer.

J'ai fait un test avec un délai 01:00 minute et ça fonctionne, mais dès que je remets le délai à 10 minutes l'incompatibilité de type revient.

merci encore pour votre aide.

Bonjour,

tu reçois ce message d'erreur quand s est > 59. Ta formule pour calculer s n'est pas correcte.

elle devrait être (à tester)

S=int(Laps-M*60)

pour désactiver le filtre à la fermeture voici l'instruction

If ActiveSheet.AutoFilterMode = True Then ActiveSheet.AutoFilterMode = False

Bonsoir h2so4

j'ai faite une tentative de modification à propos de votre dernière suggestion, et l'incompatibilité persiste sur cette ligne R = TimeValue("00:" & M & ":" & S).

Merci pour votre dévouement.

Ré-édité

Oups, désolé je n'avais pas vu le message précédent...

Bonsoir h2so4

Effectivement, le problème venait de la règle de calcul.

Merci infiniment.

Bonjour le forum

je reviens à vous pour ce poste. J'ai bien suivi les indications de h2so4, mais la macro ne semble pas tenir compte s'il y a ou non une activité dans le classeur. J'ai l'impression que le compte à rebours se déclenche quand même.

Merci

Re-voici le code dans le module

Option Explicit

Public Durée As Date
Public Arrêt As Boolean
Public Laps As Double

Sub Départ()

Dim D As Date
D = Now + TimeValue(Durée)
Application.OnTime D, "FermerLeClasseur"
Durée = TimeValue("00:05:00")
End Sub

Sub FermerLeClasseur()

Dim M As Integer
Dim S As Integer
Dim R

If Arrêt = False Then
    'Ferme et enregistre le classeur.
  ThisWorkbook.Close True

Else
    Laps = Timer - Laps
    M = Int(Laps / 60)
    S = Int(Laps - M * 60)
    R = TimeValue("00:" & M & ":" & S)
    Durée = TimeValue(Durée) - R
    Arrêt = False
    Départ
End If

End Sub

Code dans le Workbook

Private Sub Workbook_Open()
'ouverture
If Sheets("Demandes").Activate Then
    Range("A4:C4").Select
    Selection.AutoFilter
End If

MsgBox ("Ce classeur est en version BÉTA!") & vbCrLf & vbCrLf & "Si le fichier s'ouvre en LECTURE SEULE, vous ne pouvez pas enregistrer de demandes. Fermez le fichier et revenez plus tard." & vbCrLf & vbCrLf & "Si le fichier n'est pas en LECTURE SEULE." & vbCrLf & vbCrLf & "Enregistez vos demandes." & vbCrLf & vbCrLf & vbCrLf & "Pour tout commentaire, communiquez avec Michel Langlois au 514-872-2726 ou michelmlanglois@ville.montreal.ca.", vbInformation, "ATTENTION!"

Arrêt = False: Laps = Timer
'Le temps pendant lequel le fichier n'est pas activé
'Heures:Minutes:Secondes
' à ajuster ici c'est réglé sur 05 minutes !
Durée = TimeValue("00:05:00")
Départ

End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
'Remarque : cette macro événementielle détecte les clics dans une cellule du classeur.
'Vous pouvez bien entendu utiliser un autre événement pour décider qu'un classeur est inactif
'Pas de clic dans une cellule donnée, pas de saisie dans un userform, pas de changement de feuille...
Arrêt = True
Laps = Timer
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Fermeture
If ActiveSheet.AutoFilterMode = True Then ActiveSheet.AutoFilterMode = False
End Sub
Rechercher des sujets similaires à "fermeture automatique classeur filtre zero"