Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2010 compiler 2 macros en une seule

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 :
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?

 

herve62

XLDnaute Barbatruc
Supporter XLD
Bonsoir
OUH !! c'est de la grosse cuisine , on rajoute et on mélange !
Comme dit Cathodique , il faut faire le ménage : This workbook > A supprimer (vider)
Workbook Open > va dans un MODULE en Sub auto_open ()
Code:
Sub auto_open()
Worksheets("Start").Select
toto.Show
End Sub
ensuite les "sub_change" et autres , les mettre dans les feuilles avec comme catégorie : worksheet et pas (général)
et tout ce qui est SUB autre que action > ca Va Dans un MODULE
déjà cela devrait aller mieux !
 

wenders frédéric

XLDnaute Nouveau
voici les 2 fichiers. Finalement le code pour la fermeture auto est différent de celui que j'ai copié + haut...
Celui ou celle qui pourra me compiler les 2 codes dans le même fichier aura une grosse bise (numérique)
 

Pièces jointes

  • stop auto.xls
    46.5 KB · Affichages: 34
  • pas de copier coller ni glisser deplacer.xls
    46.5 KB · Affichages: 30

cathodique

XLDnaute Barbatruc
Je suis sur excel 2007. Il s'arrête de fonctionner.
Fais un test sur ta machine. Je t'avais dis qu'il était impossible d'avoir 2 procédures portant le même nom.
Dans fichier joint, j'ai fusionné les procédures de tes 2 fichiers. Le copier couper coller semble fonctionner.
Mais ensuite, Mon logiciel excel s'arrête de fonctionner. Je pense que c'est dû à cette procédure
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Excel.Range)

En effet, dans le fichier stop auto, elle porte le nom ci-dessus mais dans fichier pas de copier coller ni glisser deplacer, elle porte le nom "
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)"

Ces 2 procédures sont considérées comme identiques.
Mes compétences en la matière étant limitées, je ne saurai t'expliquer le pourquoi de la chose.
J'espère que quelqu'un te viendra en aide. Parmi la communauté, il y a des très calés en VBA.
 

Pièces jointes

  • Copie de pas de copier coller ni glisser deplacer v2.xls
    53 KB · Affichages: 27

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…