Worksheet_Change seulement déclenché par utilisateur

Bonjour à tous !

J'ai créé une macro avec "Worksheet_Change" qui se déclenchera si une certaine valeur est entrée où que ce soit dans la colonne "G" et si l'utilisateur accepte que la macro se lance (via un message auquel l'utilisateur répond "oui" ou "non"). Si oui, alors les lignes 2 à 12 d'un autre onglet devront être copiées puis collées sous la ligne de la cellule "Target". Sauf que ces lignes viennent faire des modification dans la colonne "G", et donc mon message "souhaitez-vous exécuter la macro ?" apparaît une deuxième fois (comme si l'utilisateur avait fait ces changements.

Donc j'aimerais que lorsque c'est la macro qui fait un changement dans la colonne G, les changements soient ignorés (pas de message). Est-ce possible ?

Voici mon code jusque-là :

Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Application.Intersect(Target, Range("G" & Target.Row & "")) Is Nothing Then
    If MsgBox("Do you wish to run the macro ?", vbYesNo, "Confirmation request") = vbYes Then
    Application.ScreenUpdating = False
        If Target = "M9202-63001" Then
            Sheets("Sub Product items details").Rows("2:12").Copy 'Rows corresponding to M9202-63001
            Sheets("NPI cost").Select
            Range("" & Target.Address & "").Offset(1, -6).Select
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
            Application.CutCopyMode = False
        Else: Exit Sub
        End If
    Application.ScreenUpdating = True
    Else: Exit Sub
    End If
End If
End Sub

Merci.

Bonjour,

Essaye comme ça :

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Target, Range("G" & Target.Row & "")) Is Nothing And _
        MsgBox("Do you wish to run the macro ?", vbYesNo, "Confirmation request") = vbYes Then
        Application.ScreenUpdating = False
            If Target = "M9202-63001" Then
                Sheets("Sub Product items details").Rows("2:12").Copy 'Rows corresponding to M9202-63001
                Sheets("NPI cost").Select
                Range("" & Target.Address & "").Offset(1, -6).Select
                Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                :=False, Transpose:=False
                Application.CutCopyMode = False
            Else: Exit Sub
            End If
        Application.ScreenUpdating = True
    Else: Exit Sub
    End If
End Sub

Bonjour

Essaie en intercalant entre ces deux instructions

Range("" & Target.Address & "").Offset(1, -6).Select
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False

la ligne suivante:

Application.DisplayAlerts = False

sans oublier de remettre

Application.DisplayAlerts = True

en fin de Code

Cordialement

Bonjour Cmarchonge, bonjour le forum,

Peut-être comme ça :

Private TEST As Boolean

Private Sub Worksheet_Change(ByVal Target As Range)
If TEST = True Then Exit Sub
If Application.Intersect(Target, Columns(7)) Is Nothing Then Exit Sub
TEST = True
If MsgBox("Do you wish to run the macro ?", vbYesNo, "Confirmation request") = vbYes Then
    If Target = "M9202-63001" Then
        Sheets("Sub Product items details").Rows("2:12").Copy 'Rows corresponding to M9202-63001
        Sheets("NPI cost").Cells(Target.Row + 1, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        Application.CutCopyMode = False
    End If
End If
TEST = False
End Sub

Évite autant que tu le peux les Select inutiles qui ne font que ralentir l'exécution du code...

[Édition]

Bonjour Raja, Amadéus, on s'est croisé...

Merci à tous les deux de vos propositions, mais malheureusement ça n'a rien changé. J'ai essayé chacune de vos proposition individuellement, mais mon message revient toujours une seconde fois.

Y'aurait-il un code pour empêcher le lancement d'une macro un peu du même genre que Application.EnableEvents, mais spécifique au lancement d'une macro ?

Bonjour,

Il te faut désactiver les évènements durant par modif. introduite par macro :

        Application.EnableEvents = False
        Application.ScreenUpdating = False

        [...]

        Application.ScreenUpdating = True
        Application.EnableEvents = True
        [...]

Cordialement

Ferrand

Re,

As-tu essayé ma proposition ?

Bonjour ThauThème !

Nos message se sont croisés ! J'ai testé ton code, et ça fonctionne parfaitement !

Merci à tous les trois pour votre aide. Je suis ravie du résultat, et mon chef le sera aussi !

Une excellente journée à tous,

Cindy


Merci à toi aussi Ferrand, nos message ce sont, eux aussi, croisés.

Très bonne journée à toi.

Cordialement,

Cindy

Rechercher des sujets similaires à "worksheet change seulement declenche utilisateur"