désactiver et réactiver macro

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous :)
Encore besoin de vous,

J'ai dans le le code de ma feuille 1 les macros suivantes :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect([E6:N1001], Target) Is Nothing Then
        If Valeur <> "" Then
             Application.EnableEvents = False
                Target = Valeur
            Application.EnableEvents = True
        End If
    End If
    If Not Intersect([O6:BA1001], Target) Is Nothing Then
        If Target = "" Then
            Application.EnableEvents = False
                Target = Valeur1
            Application.EnableEvents = True
        End If
    End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Intersect([E6:N1001], Target) Is Nothing Then
        If Target.Count > 1 Then
            Application.EnableEvents = False
                ActiveCell.Select
            Application.EnableEvents = True
        End If
        Valeur = ActiveCell.Value
    End If
    If Not Intersect([O6:BA1001], Target) Is Nothing Then
        If Target.Count > 1 Then
            Application.EnableEvents = False
                ActiveCell.Select
            Application.EnableEvents = True
        End If
        Valeur1 = ActiveCell.Value
    End If
End Sub

Je voudrais désactiver ces deux macros pendant l'exécution d'une autre macro et j'ai fait cela dans mon module :

Code:
' EffTout Macro
'

'
    Application.EnableEvents = False
    Private Sub Worksheet_Change(ByVal Target As Range)
    'ton code

    Sheets("Base").Select
    ActiveSheet.Unprotect
    Range("E6:CZ1001").Select
    Range("CZ1001").Activate
    Selection.ClearContents
    
    Range("A6:CZ1001").Select
    ActiveWorkbook.Worksheets("Base").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Base").Sort.SortFields.Add Key:=Range("E6:E1001"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Base").Sort
        .SetRange Range("A6:CZ1001")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Range("B6").Select
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True

    Application.EnableEvents = True
    Private Sub Worksheet_Change(ByVal Target As Range)
    'ton code
End Sub

Evidemment LOL, ça ne marche pas.

Le message suivant s'affiche : Erreur de compilation - Non ambigu détecté : Worksheet_Change

Si vous pouviez m'aider, cela m'arrangerait grandement,

Vous m'avez tellement donné de solutions que je ne sais plus comment vous remercier.
Alors, simplement, je vous souhaite un très bon dimanche et je vous remercie de toutes mes forces.

Amicalement,
Lionel,
 
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re : désactiver et réactiver macro

Bonjour Pierrot, bonjour à tous,

Merci pour cette réponse hyper rapide :)
Mais je ne comprends pas.

La macro qui est dans le code de la feuille 1 fonctionne très bien et ne génère aucun message d'erreur.
En revanche, c'est dans la macro "EffTout" Macro que ça me génère le message et pourtant, j'ai bien mis "True" à la fin.

Encore merci d'être là,
Amicalement,
Lionel,
 

Pierrot93

XLDnaute Barbatruc
Re : désactiver et réactiver macro

Re, bonjour Hasco:)

le 2ème code que tu montres me parait pas être opérationnel en l'état... des instructions hors "sub", peut être mettre le code entier dans un petit fichier, plus facile pour t'aider
 

Staple1600

XLDnaute Barbatruc
Re : désactiver et réactiver macro

Bonjour à tous

arthour93
Ta macro Effout ainsi modifiée doit fonctionner sans messages d'erreur non ?
PS1: En sus, je me suis permis un tout léger toilettage au niveau d'un Select.

PS2: L'autodépréciation ne permet pas de corriger les bugs d'un code VBA, même en mode Option Explicit ;)

Code VBA:
Sub Efftout()
' EffTout Macro
'
Application.EnableEvents = False
'/REM/Private Sub Worksheet_Change(ByVal Target As Range)
'ton code

Sheets("Base").Select
ActiveSheet.Unprotect
Range("E6:CZ1001").ClearContents

Range("A6:CZ1001").Select
ActiveWorkbook.Worksheets("Base").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Base").Sort.SortFields.Add Key:=Range("E6:E1001"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Base").Sort
.SetRange Range("A6:CZ1001")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("B6").Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True

Application.EnableEvents = True
'/REM/Private Sub Worksheet_Change(ByVal Target As Range)
'ton code
End Sub
 
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re : désactiver et réactiver macro

Bonjour JM,

j'ai pas tout compris LOl mais ça marche super. Un grand méga merci :)

ce que je pense avoir compris :
Ton code "Application.EnableEvents = False" désactive toutes les autres macros ...
Alors que moi, j'ai voulu désactiver les macros de la feuille 1 et les deux portent le même nom !!!

Mais puisqu'elles portent toutes les deux le même nom (même si elle n'ont pas le même effet), pourquoi ça marche en exécution et qu'il n'y a pas de message d'erreur du même genre que celui que je vous ai signaler ?

Encore merci,
Amicalement,
Lionel,
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re : désactiver et réactiver macro

Re
merci de m'avoir répondu ......

Mais pourtant, ces deux la ont le même nom et ça marche ...
Code :
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect([E6:N1001], Target) Is Nothing Then
If Valeur <> "" Then
Application.EnableEvents = False
Target = Valeur
Application.EnableEvents = True
End If
End If
If Not Intersect([O6:BA1001], Target) Is Nothing Then
If Target = "" Then
Application.EnableEvents = False
Target = Valeur1
Application.EnableEvents = True
End If
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect([E6:N1001], Target) Is Nothing Then
If Target.Count > 1 Then
Application.EnableEvents = False
ActiveCell.Select
Application.EnableEvents = True
End If
Valeur = ActiveCell.Value
End If
If Not Intersect([O6:BA1001], Target) Is Nothing Then
If Target.Count > 1 Then
Application.EnableEvents = False
ActiveCell.Select
Application.EnableEvents = True
End If
Valeur1 = ActiveCell.Value
End If
End Sub
 

Discussions similaires