XL 2019 macro pour fermer excel en enregistrant

jahjah

XLDnaute Nouveau
Bonjour à Tous !

je vous explique mon problème, j'incrémente un fichier excel via un autre.

le soucis c'est que si celui incrémenté est ouvert par une tierce personne en gardant les filtres mon incrémentations ne va pas marcher ou écraser des données.

ce que je voudrais c'est une macro qui défiltrerai mes colonnes A17 à J17 et que le fichier s'enregistrerai et se fermerai au bout d'un certain temps...

est ce jouable?
 

herve62

XLDnaute Barbatruc
Bonsoir
De chez moi je ne vois pas très bien tes colonnes A17 J7 !!! ma vue doit baisser 😃
Sinon si tu fais :
VB:
ActiveSheet.ListObjects("Tableau2").Range.Select ' J'ai défini un nom de tableau
ActiveSheet.ShowAllData
et que ton tableaui comporte 100 lignes mais que 10 affichées .... avec ce code les 100 vont se re afficher
 

jahjah

XLDnaute Nouveau
Salut,
Je ne vois pas comment le fichier va s’enregistrer et fermer tout seul? Je suis avec mon telephone peut etre que je ne vois pas la macro…

Pour reprendre, je souhaiterai par exemple que les filtres des colonnes a à e soit defiltré puis le fichier s’enregistre et se ferme tout seul au bout de 5 min par exemple, suis je assez clair? Dans ma tete oui hihi🤪
 

herve62

XLDnaute Barbatruc
Je ne vois pas comment le fichier va s’enregistrer et fermer tout seul?
Moi je vais dans l'ordre des choses à faire non ???!!!!
je souhaiterai par exemple que les filtres des colonnes a à e soit defiltré puis le fichier s’enregistre et se ferme tout seul au bout de 5 min par exemple,
Donc ton téléphone est mal connecté .... il commence par la fin !!
Bon comme j'ai dit il faut tout défiltrer , puis enregistrer et fermer ...mais pourquoi au bout de 5min ??? il va falloir mettre un sacré timer !!!
 

Phil69970

XLDnaute Accro
Bonjour @jahjah , Hervé

J'ai retrouvé cette macro de "TI" alias Thierry Pourtier qui permet de fermer après 5 minutes d'inactivité, toute activité relance le timer pour 5 minutes etc....

VB:
 Option Explicit
        Option Private Module
        'Ti
        'Delai est le temps d'inactivité maxi en minutes
        Const Delai = 5 'Donc pour 5 minutes on mets 5

        Sub Programmation()
        Dim Heure As Date
          Heure = Now + TimeValue("00:" & Delai & ":00")
          ThisWorkbook.Names.Add Name:="ChronoTime", RefersTo:=Heure
          ThisWorkbook.Names.Add Name:="Chrono", RefersTo:=0
          Application.OnTime Heure, "Interruption"
        End Sub

        Private Sub Interruption()
          With ThisWorkbook
            If .Sheets(1).Evaluate("Chrono") = 0 Then
              .Save
              .Close
            Else
              Programmation
            End If
          End With
        End Sub

        Sub SupprimeInterruption()
        Dim Heure As Date
         On Error Resume Next
        Heure = ThisWorkbook.Sheets(1).Evaluate("ChronoTime")
         Application.OnTime Heure, "Interruption", schedule:=False
        End Sub

        dans ThisWorkbook
        Option Explicit
        Private Sub Workbook_BeforeClose(Cancel As Boolean)
         SupprimeInterruption
        End Sub

        Private Sub Workbook_Open()
          Programmation
        End Sub

        Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Excel.Range)
          ThisWorkbook.Names("Chrono").Value = 1
        End Sub

Sinon tu as ce code qui ferme le fichier à une heure donnée ici 12H00

VB:
Private Sub Workbook_Open()
'A 12h00, lancement de la procedure fermeture
Application.OnTime TimeValue("12:00:00"), "fermeture"
End Sub

Sub fermeture()
'Message d'alerte
MsgBox "Le fichier va se fermer automatiquement"
'Sauvegarde du fichier
ActiveWorkbook.Save
'Fermeture du fichier
ActiveWorkbook.Close
End Sub

*Ces 2 codes je les ai trouvé sur internet en moins de 1 minute :oops:

@Phil69970
 

jahjah

XLDnaute Nouveau
Bonjour @jahjah , Hervé

J'ai retrouvé cette macro de "TI" alias Thierry Pourtier qui permet de fermer après 5 minutes d'inactivité, toute activité relance le timer pour 5 minutes etc....

VB:
 Option Explicit
        Option Private Module
        'Ti
        'Delai est le temps d'inactivité maxi en minutes
        Const Delai = 5 'Donc pour 5 minutes on mets 5

        Sub Programmation()
        Dim Heure As Date
          Heure = Now + TimeValue("00:" & Delai & ":00")
          ThisWorkbook.Names.Add Name:="ChronoTime", RefersTo:=Heure
          ThisWorkbook.Names.Add Name:="Chrono", RefersTo:=0
          Application.OnTime Heure, "Interruption"
        End Sub

        Private Sub Interruption()
          With ThisWorkbook
            If .Sheets(1).Evaluate("Chrono") = 0 Then
              .Save
              .Close
            Else
              Programmation
            End If
          End With
        End Sub

        Sub SupprimeInterruption()
        Dim Heure As Date
         On Error Resume Next
        Heure = ThisWorkbook.Sheets(1).Evaluate("ChronoTime")
         Application.OnTime Heure, "Interruption", schedule:=False
        End Sub

        dans ThisWorkbook
        Option Explicit
        Private Sub Workbook_BeforeClose(Cancel As Boolean)
         SupprimeInterruption
        End Sub

        Private Sub Workbook_Open()
          Programmation
        End Sub

        Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Excel.Range)
          ThisWorkbook.Names("Chrono").Value = 1
        End Sub

Sinon tu as ce code qui ferme le fichier à une heure donnée ici 12H00

VB:
Private Sub Workbook_Open()
'A 12h00, lancement de la procedure fermeture
Application.OnTime TimeValue("12:00:00"), "fermeture"
End Sub

Sub fermeture()
'Message d'alerte
MsgBox "Le fichier va se fermer automatiquement"
'Sauvegarde du fichier
ActiveWorkbook.Save
'Fermeture du fichier
ActiveWorkbook.Close
End Sub

*Ces 2 codes je les ai trouvé sur internet en moins de 1 minute :oops:

@Phil69970
SAlut Phil,

effetivement je suis tombé sur tes exemples en recherchant, par contre j esuis toujours bloqué sur un point.

sur this workbook => BeforeClose je voudrais qu'il désactive les filtres puis enregistre mais ça ne fonctionne pas, une idée?

Private Sub Workbook_Open()
Délai = TimeValue("00:01:00")
Reste = Délai
ProchainArret
majHeure
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
On Error Resume Next
Application.OnTime HeureArrêt, Procedure:="Fin", Schedule:=False
ProchainArret
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Application.Run "'liste de débit.xlsm'!majHeure"
ActiveSheet.ShowAllData
Application.Run "'liste de débit.xlsm'!majHeure"

ThisWorkbook.Save
On Error Resume Next
Application.OnTime HeureArrêt, Procedure:="Fin", Schedule:=False ' annule événnement
Application.OnTime temps, Procedure:="majHeure", Schedule:=False
End Sub
 

herve62

XLDnaute Barbatruc
Bonsoir tous
@Phil69970 : Moi non plus et qui plus est AUCUNE pour sélectionner des colonnes!!
---
Et donc si l'on connait un peu la philosophie MS qui est une des plus complète en matière de structure de logiciel si certaines instructions que l'on souhaite n'existent pas c'est que cela n'est pas le bon choix et qu'il faut revoir sa pensée !!!! (philosophique si posssibe !:):D)
Comme par exemple : Ayant travaillé en programmation sur des gros systèmes GPAO , on désactivait les accès "clients" on faisait ses MAJ ... tranquille .. on re activait; c'était pas pour 1h que l'usine allait fermer !!!!
Là ce n'est QUE Excel !! donc tu inhibes le partage ( déjà obligé pour modif vba) tu fais tes MAJ revalide et ...