Désactiver 'Private Sub Worksheet_Change

Bonjour,

J'ai besoin d'effectuer une macro pour me recopier des données d'une feuille à une autre.

Or, sur la feuille de destination 'données-substances dangereuses' il existe ce code :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim x%, Plg As Range

   If Not Application.Intersect(Target, Range("b6")) Is Nothing Then
        Application.ScreenUpdating = False
        On Error Resume Next
            ActiveSheet.ShowAllData
        On Error GoTo 0
        If Target.Count > 1 Or Target = "" Then Exit Sub
            Set Plg = Range("a10:aq" & [C65000].End(xlUp).Row)
                Select Case UCase(Target)
                    Case Is = "ARTICLE": x = 3
                    Case Is = "DESIGNATION": x = 5
                    Case Is = "UTILISE": x = 9
                    Case Else:  Exit Sub
                End Select

        '-- tri (x = N°colonne à trier) --
       Plg.Sort Key1:=Cells(10, x), Order1:=xlAscending, Key2:= _
        Cells(10, "i"), Order2:=xlAscending, Header:=xlYes, OrderCustom:=1, _
        MatchCase:=False, Orientation:=xlTopToBottom

               '-- filtre --
        If x = 9 Then
            Range("o2") = "=i11>0"
            Plg.AdvancedFilter Action:=xlFilterInPlace, _
            CriteriaRange:=Range("o1:o2"), Unique:=False
            Range("o2").ClearContents
        End If
    End If
End Sub

Comment à partir d'une macro exécutée a partir de la feuille 'Pas à pas' faire un copier/coller de certaines colonnes sur la feuille ''données-substances dangereuses'.

Il faudrait désactivée cette "Private Sub Worksheet_Change" , exécuter la macro de copie, et réactiver la "Private Sub Worksheet_Change".

Merci

Zyglur

Bonsoir

Une solution (mais pas la seule)

Dans code de recopie

au début

Application.EnableEvents = False

et avant de quitter ta procédure

Application.EnableEvents = True

Bonne journée

Salut le forum

Une autre façon, tu déclares une variable publique dans un module

Public Flag as Boolean

Dans le code de ta Sub tu insères la ligne suivante au début

Flag = True

Et tu le remet False à la fin

Flag = False

Et dans ta macro évenementielle

Private Sub Worksheet_Change(ByVal Target As Range)
Dim x%, Plg As Range

If Flag then Exit Sub

Je ne préconise pas l'utilisation de

Application.EnableEvents = False

Si tu as un plantage de la macro, cette propriété ne se remt pas à True par défaut.

Mytå

Merci à tous les 2.

Je vais tester ca.

Bonne soirée.

Cordialement.

Zyglur

Bonjour à tous,

bonjour Mytå,

If Flag then Exit Sub

J'utilise fréquemment cette méthode

çà marche bien, cependant pour ma "comprenette",

faut-il comprendre If Flag = True Then Exit Sub

et cela revient-il au même ?

En cas de plantage, Flag se remet à False (par défaut) ?

Peux-tu nous préciser ce point ?

Amicalement

Claude

Bonjour,

faut-il comprendre If Flag = True Then Exit Sub

et cela revient-il au même ?

Exact. Mais bon le fait de mettre l'instruction complète facilite aussi la compréhension pour la lecture du code.

En cas de plantage, Flag se remet à False (par défaut) ? Peux-tu nous préciser ce point ?

Pour que la variable soit à True il faut la déclarer dans une procédure. En cas de plantage, si tu as mis une gestion d'erreur (genre On error resume next ou autre) Flag restera à True. Si tu n'as pas prévu de gestion d'erreur et que dans le plantage tu arrêtes le code, Flag sera remis à False par défaut. De même si tu fermes Excel ou ton fichier.

Amicalement

re forum,

Merci Dan, soyons clairs jusqu'au bout,

par exemple:

ici, le Flag = False (à la fin) est-il obligatoire ?, ou se remettra t-il à False par défaut ?

Private Sub Worksheet_Change(ByVal Target As Range)

If Flag = True Then Exit Sub
    If Not Application.Intersect(Target, Range("c3:d3")) Is Nothing Then

        Flag = True
        If Target = Range("c3") Then Range("d3").ClearContents
        Range("c7:g" & [c65000].End(xlUp).Row).AdvancedFilter Action:=xlFilterInPlace, _
        CriteriaRange:=Range("c2:d3"), Unique:=False
        Target.Activate
    End If
Flag = False
End Sub

Bonne journée

Claude

re,

ici, le Flag = False (à la fin) est-il obligatoire ?, ou se remettra t-il à False par défaut ?

Ici le Flag est obligatoire, sans quoi il restera à True et si tu réactives cette macro en changeant C3, tu n'effacera pas D3 puisque la macro s'arretera par l'instruction --> ....exit sub

Attention toutefois que cela suppose que la variable est déclarée Public au niveau d'un module. Si tu la déclares dans la feuille en entête, elle reste valide dans cette feuille uniquement.

Maintenant dans un programme complet avec d'autres codes on pourrait très bien vouloir garder cette variable à True pour l'utiliser ailleurs. A voir car cela peut donner des désagréments aussi.

Amicalement

re,

Merci Dan, c'est bien ce qu'il me semblait,

parfois, il vaut mieux se faire répéter pour être sur d'avoir pigé !

J'espère ne pas avoir trop perturber le poste de zyglur

cela peut l'intéresser aussi.

Amicalement

Claude

Re le forum

Plus rien à ajouter, DAN s'en est occupé.

Sujet clos.

Mytå

Bonsoir à tous.

Au contraire Claude, vos petits débats sont plus qu'enrichissant pour moi, car si vous meme vous vous posez les questions, imaginez moi (non je ne me les posais pas) en train d'essayer d'ecrire ces lignes et de ne pas savoir s'il y a un bug ou pas.

Je decortique un peu tous vos code pour avancer( je les imprime et les classes dans des fichiers texte) réadapter pour de choses qui paraissent si proches les unes des autres mais si difficiles a mettre en oeuvre.

Et là, vos solutions arrivent, tout parait plus clair......ou presque, car il y a toujours des variables ou des parties de codes qu'on ne comprend pas.

Je n'ai pas encore eu le temps de mettre le code en place car on me demande deja d'apporter d'autres options. Ce qui est dur, c'est de se retrouver directement dans la cours des grands sans etre passé par les classes intermediaires.

Mais heureusement, vous etes tous tres serviables, et je vous en remercie.

Zyglur.

Rechercher des sujets similaires à "desactiver private sub worksheet change"