Message de sécurité

Bonjour,

voici ma demande:

Lorsque j'appuie sur un bouton de commande VBA, je veut que un message s'affiche "Voulez-vous vraiment exécuter cette commande" avec OUI ou NON comme proposition.

En effet, ça concerne un bouton de commande qui à des lourdes conséquences sur mon classeur si je clique dessus. Je ne voudrais donc pas cliquer dessus par erreur, c'est pour cela que j'aimerais que ce message s'affiche pour éviter de cliquer dessus par inadvertance.

Merci d'avance

Bonjour,

En ajoutant par exemple quelque chose du genre dans le code :

If MsgBox("Etes vous sûr de vouloir exécuter la macro ?", vbExclamation + vbYesNo, "Confirmation exécution") = vbYes Then
    'Le reste de ta macro
End If

Bonjour ArthurB, Pedro22

Perso je préfère sortir de la Sub si on clique sur NON, plus lisible

If MsgBox("Etes vous sûr de vouloir exécuter la macro ?", vbExclamation + vbYesNo, "Confirmation exécution") = vbNo Then Exit Sub
' Suite du code

A+

Merci, excellent, c'est exactement ce que je voulais. :)

Ha non, je retire ce que j'ai dit, il y a un hic: lorsque je clique sur non, la macro du bouton de commande s'effectue quand même comme si j'avais cliqué sur oui

Re,

IMPOSSIBLE !
Merci de nous donner votre code entier ou mieux votre fichier

Je vous joint le fichier ci-dessous.

Ducoup, c'est le bouton "erase" en E6 de la feuill "Centre de contrôle" qui est concerné. Je l'utilise pour effacer toute les lignes des tableaux de la feuill "Tableau10", excepté la ligne 0. Quand j'appuie sur "erase", c'est là que j'ai le message avec oui ou non et il est affecté au module12 et comme nom de macro: eraseee.

Si vous voulez remplir les tableaux à nouveau après qu'ils aient été effacé, spammé le bouton "Tableau(10)" en D17.

Merci d'avance

3k-copie.zip (217.78 Ko)

Bonjour,
@BrunoM45
Pour ma part je privilégie la proposition de pedro22.
Pas d'exit sub !
Cdlt.

Salut Jean-Eric et tu peux me dire pourquoi, je serais curieux

Re,

@ArthurB, vous lisez correctement quand on vous donne le code

image

Ce n'est pas ce que vous à dis Pedro22, ni moi vous auriez suivi... aucun souci

If MsgBox("Etes vous sûr de vouloir exécuter la macro ?", _
  vbExclamation + vbYesNo, "Confirmation exécution") = vbNo Then Exit Sub
' On continue
With Sheets("Tableau(10)")

De plus, c'est quoi ce code

With Sheets("Tableau(10)")
    Sheets("Tableau(10)").Select
    Range("C10:E2009").Select
    Selection.ClearContents

C'est comme cela que ça s'utilise

With Sheets("Tableau(10)")
    .Range("C10:E2009").ClearContents
'...

Et en l'occurrence comme cela se répète, selon ma conception pour le IF

Sub eraseee()
  Dim Ind As Integer, Tablo() As String
  ' eraseee Macro
  '
  If MsgBox("Etes vous sûr de vouloir exécuter la macro ?", _
            vbExclamation + vbYesNo, "Confirmation exécution") = vbNo Then Exit Sub
  ' Si OUI, on continue
  Tablo = Split("Tableau(10),Tableau(20),Tableau(40),Tableau(60)", ",")
  For Ind = 0 To UBound(Tablo) - 1
    With Sheets(Tablo(Ind))
      .Range("C10:E2009").ClearContents
      .Range("H10:J2009").ClearContents
      .Range("M10:O2009").ClearContents
      .Range("R10:T2009").ClearContents
      .Range("W10:Y2009").ClearContents
      .Range("AB10:AD2009").ClearContents
      .Range("AG10:AJ2009").ClearContents
      .Range("AM10:AP2009").ClearContents
      .Range("AS10:AV2009").ClearContents
      .Range("AY10:BC2009").ClearContents
      .Range("BF10:CE2009").ClearContents
    End With
  Next Ind
End Sub

Selon celle de Pedro22 ou Jean-Eric

Sub eraseee()
  Dim Ind As Integer, Tablo() As String
  ' eraseee Macro
  '
  If MsgBox("Etes vous sûr de vouloir exécuter la macro ?", _
            vbExclamation + vbYesNo, "Confirmation exécution") = vbYes Then
    ' Si OUI, on continue
    Tablo = Split("Tableau(10),Tableau(20),Tableau(40),Tableau(60)", ",")
    For Ind = 0 To UBound(Tablo)
      With Sheets(Tablo(Ind))
        .Range("C10:E2009").ClearContents
        .Range("H10:J2009").ClearContents
        .Range("M10:O2009").ClearContents
        .Range("R10:T2009").ClearContents
        .Range("W10:Y2009").ClearContents
        .Range("AB10:AD2009").ClearContents
        .Range("AG10:AJ2009").ClearContents
        .Range("AM10:AP2009").ClearContents
        .Range("AS10:AV2009").ClearContents
        .Range("AY10:BC2009").ClearContents
        .Range("BF10:CE2009").ClearContents
      End With
    Next Ind
  End If
End Sub

A+

Re,
Bonjour BunoM45,
Dans l'idée, je n'aime pas les procédures, qui commencent par énumérer les conditions de non-exécution (utilisation de exit sub à répétition, de plus en plus courante).
Je considère que c'est une bonne pratique de penser l'inverse...
Suis je clair ?
Cordialement

Re,

Oui Jean-Eric, tu es clair
mais beaucoup moins dans le problème que cela te pose

J'ai souvent vu des procédure avec des IF de IF de IF... et des problèmes de End If
Supprimer ce End If ne fait que palier à la problématique et n'en entraine aucune autre

Et je pense que c'est une bonne pratique

A+

Effectivement c'est plus clair maintenant. Merci de m'avoir expliqué, car je suis vraiment une "bite" en VBA.

Cependant, il subsiste un problème, c'est que votre macro fonctionne très bien pour les feuilles 10, 20 et 40 mais pas pour la 60. Auriez-vous fait une erreur dans la formule?

Merci d'avance

Re,

Désolé, il faut enlever le "- 1" qui traine derrière

For Ind = 0 To UBound(Tablo)

A+

Super cette fois ci ça marche pour de bon, je valide ton commentaire

Rechercher des sujets similaires à "message securite"