Répondre "non" automatiquement a un msgbox

Bonjour,

J'ai une macro qui s’exécute lorsque l'onglet est activé. Le problème est que cette macro s'active pendant le calcul que doit faire la macro, car il sélectionne la feuille.

Est ce qu'il y a un moyen pour eviter cela ou bien de répondre "non" automatiquement a un msgbox?

Private Sub Worksheet_Activate()

    If MsgBox("Mise a jour ?", 36, "Confirmation") = vbYes Then

'copie liste 1
    Sheets("Feuil2").Select
    ActiveSheet.Range("B10").Select
    ActiveSheet.Range("B10", ActiveCell.End(xlDown).Offset(1, 0)).Select
    Selection.Copy
    Worksheets("Feuil1").Select
    ActiveSheet.Range("C10").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

'copie liste 2
    Sheets("Feuil2").Select
    ActiveSheet.Range("B10").Select
    ActiveSheet.Range("B10", ActiveCell.End(xlDown).Offset(0, -1)).Select
    Selection.Copy
    Worksheets("Feuil1").Select
    ActiveSheet.Range("B10").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

'copie liste 3
    Sheets("Feuil2").Select
    ActiveSheet.Range("B10").Select
    ActiveSheet.Range("B10", ActiveCell.End(xlDown)).Offset(0, 1).Select
    Selection.Copy
    Worksheets("Feuil1").Select
    ActiveSheet.Range("D10").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

    End If
End Sub

Merci de votre aide

vincent

ps: je bidouille du vba, le code n'est sans doute pas optimisé.

37vincmacro.xlsm (18.06 Ko)

Bonjour,

Place ton code entre ces 2 lignes :

Application.EnableEvents = False ' => désactive les événements

'Code à exécuter sans déclencher d'événements

Application.EnableEvents = True ' => réactive les événements

Cordialement,

Bonjour vinc, sebastien, forum,

La désactivation des évènements est une solution...mais dans la mesure du possible, il faut éviter. Au cas où il y a un plantage.

Ici, contourner ça reste assez simple. Un essai avec le code suivant :

Private Sub Worksheet_Activate()
    Dim temp

    If MsgBox("Mise a jour ?", 36, "Confirmation") = vbYes Then

        Application.ScreenUpdating = False    'désactive la mise à jour écran
        'copie liste
        With Sheets("Feuil2")
            'on met le tableau de la Feuil2 dans une variable appelée temp
            temp = .Range("A10:C" & .Range("B10").End(xlDown).Row).Value
            'on remet le tableau sauvegardé en B10 de la Feuil1
            Worksheets("Feuil1").Range("B10").Resize(UBound(temp, 1), UBound(temp, 2)).Value = temp
        End With

    End If
End Sub

Bonjour à tous,

J'étais justement en train de regarder pour lui proposer un code bien plus adapté que celui de l'enregistreur

Le voici :

Private Sub Worksheet_Activate()

    If MsgBox("Mise a jour ?", 36, "Confirmation") = vbYes Then

        For ligne = 10 To 17
            For colonne = 1 To 3
                Cells(ligne, colonne + 1) = Sheets("Feuil2").Cells(ligne, colonne)
            Next
        Next

    End If

End Sub

Cordialement,

bonjour,

comme cela ,

Par contre je suis pas très sur de l'ordre des colonnes

51liste.zip (13.79 Ko)

Merci a tous pour vos solution, j'ai retenu celle de vba-new, car c'est celle la plus simple et collant le mieux a mon problème!

vincent

Rechercher des sujets similaires à "repondre automatiquement msgbox"