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 SubBonjour,
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 SubBonjour 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 = FalseBonsoir 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 SubCode 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