wenders frédéric
XLDnaute Nouveau
Bonjour,
J'aimerais compiler 2 macros dans un seul fichier excel. Les macros fonctionnent bien individuellement mais lorsque j'essaie de les mettre dans le même fichier excel, ça bug.
Voici les 2 macros :
MACRO 1 (pour empêcher les copier-coller et glisser-déplacer):
Dans thisworkbook :
Dans Feuil1 :
MACRO 2 (sauvegarde+fermeture fichier excel après 1 minute d'inactivité):
Dans thisworkbook :
Dans un module:
Remarque : Je suis une clinche en VBA
Ce que je faisais, c'était copier chaque code au bon endroit. Par contre, comme il y a plusieurs code à encoder dans thisworkbook, je les copiais à la suite l'un de l'autre et c'est là que ça foirait.
Il me semble que si ça foire, c'est qu'il y a plusieurs "Private Sub Workbook_Open()" et plusieurs "Private Sub Workbook_SheetSelectionChange" dans le même "thisworkbook".
Quelqu'un peut-il m'aider please?
J'aimerais compiler 2 macros dans un seul fichier excel. Les macros fonctionnent bien individuellement mais lorsque j'essaie de les mettre dans le même fichier excel, ça bug.
Voici les 2 macros :
MACRO 1 (pour empêcher les copier-coller et glisser-déplacer):
Dans thisworkbook :
Code:
Private Sub Workbook_SheetActivate(ByVal sh As Object)
Application.CutCopyMode = False
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal sh As Object, _
ByVal Target As Range)
Application.CutCopyMode = False
End Sub
Private Sub Workbook_Open()
Dim Sht As Worksheet
Set Sht = ActiveSheet
With Application
.ScreenUpdating = False
.EnableEvents = False
' Remplacer Feuil1 par le nom de module de la feuille à bloquer
Feuil1.Activate
Feuil1.Init ActiveWindow.RangeSelection
Sht.Activate
.ScreenUpdating = True
.EnableEvents = True
End With
End Sub
Dans Feuil1 :
Code:
Dim P As Range
Dim A As String
Private Sub Worksheet_Change(ByVal Target As Range)
If P.Address <> A Then
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Init Target
End Sub
Public Sub Init(T As Range)
Set P = T
A = P.Address
End Sub
MACRO 2 (sauvegarde+fermeture fichier excel après 1 minute d'inactivité):
Dans thisworkbook :
Code:
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
Dans un module:
Code:
Option Explicit
Option Private Module
'Ti
'Delai est le temps d'inactivité maxi en minutes
Const Delai = 1
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
Remarque : Je suis une clinche en VBA
Ce que je faisais, c'était copier chaque code au bon endroit. Par contre, comme il y a plusieurs code à encoder dans thisworkbook, je les copiais à la suite l'un de l'autre et c'est là que ça foirait.
Il me semble que si ça foire, c'est qu'il y a plusieurs "Private Sub Workbook_Open()" et plusieurs "Private Sub Workbook_SheetSelectionChange" dans le même "thisworkbook".
Quelqu'un peut-il m'aider please?