IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Empêcher apparition d'un message d'erreur


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2014
    Messages : 58
    Points : 35
    Points
    35
    Par défaut Empêcher apparition d'un message d'erreur
    Bonjour tout le monde,

    Je viens de finir de mettre en place le système de protection de mon classeur excel (système d'identification avec pseudo et mot de pass). En temps normal, le classeur est protégé. Je peux donc faire des copier (sélection) mais pas de coller (pas de modifs). Jusque là, super.

    Mais là, petit souci. Dès que j'essaye de modifier une cellule sans en avoir l'autorisation, il apparait un message d'erreur :
    La cellule ou le graphique est protégé et en lecture seule.

    Pour modifier une cellule ou un graphique protégé, otez la protection avec la commande Oter la protection de la feuille (onglet révision, groupe modification).
    Vous devriez peut-être taper un mot de pass.
    Comment faire pour empecher l'apparition de ce message ? J'avais cru comprendre que l'utilisation de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.DisplayAlerts = False
    aurait résolu l'affaire mais sa n'est pas le cas...

    Merci pour votre aide

  2. #2
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Si c'est une erreur récupérable, tu peux utiliser l'instruction On Error. Consulte l'aide sur :
    On Error, instruction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub InitializeMatrix(Var1, Var2, Var3, Var4)
        On Error GoTo ErrorHandler
        . . .
        Exit Sub
    ErrorHandler:
        . . .
        Resume Next
    End Sub
    Cordialement

    Docmarti.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2014
    Messages : 58
    Points : 35
    Points
    35
    Par défaut
    Je ne suis pas sur d'avoir bien compris. Après avoir lu le descriptif de On Error, je dirais qu'il faudrait écrire On Error Go To 0 pour empecher l'apparition du message d'erreur, si c'est une erreur récupérable.
    Mais ou inscrire ce code et sous quelle condition ? Car ce message d'erreur est généré par excel automatiquement lors de la sélection d'une cellule et d'une tentative de modification.

    Il faudrait peut-être faire qq chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub ThisSheet_change()
     
    If ('si la feuille est protégé) then
        On error Go To 0
    Else
    End If
     
    End Sub

  4. #4
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Non. Tu n'as pas bien compris. Au contraire, l'instruction On Error Goto 0 supprime toute gestion d'erreur dans la procédure.

    Je te suggère de faire des tests (en utilisant la touche F8 ) avec les différentes instructions On ERROR .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Private Sub CommandButton1_Click()
     
        On Error GoTo ErrorHandler
        Dim x As Long
        x = 100
        Worksheets("Feuil1").Activate
        Worksheets("Feuil2").Cells(1, 1) = x
        Worksheets("Feuil2").Cells(1, 1).Select
     
        Exit Sub
    ErrorHandler:
        MsgBox Error
        Stop:    Resume 'Pese sur F8 pour que la commande RESUME te retourne a l'instruction qui a provoque l'erreur
     
    End Sub
    Où mettre les instructions ON ERROR ? Tu peux en mettre une dans chacune des procédures SUB, FUNCTION. Ca ne peut pas nuire.
    Cordialement

    Docmarti.

  5. #5
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonsoir Forum, Docmarti, bonsoir le forum,

    Application.DisplayAlerts = False ne s'applique, je pense, qu'aux actions faites par VBA. Je viens de tester sur un classeur le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_Open()
    Application.DisplayAlerts = False
    End Sub
    Quand j'ouvre ce classeur et que je demande la suppression d'un onglet j'ai bien le message d'alerte...

    • Si tu agis directement dans un onglet protégé sur une cellule verrouillée, je ne pense pas que tu aies d'autre alternative que le message d'alerte !

    • Si tu agis par code VBA tu peux, déprotéger l'onglet, agir sur une cellule verrouillée, puis protéger à nouveau...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    With Sheets("Feuil1")
        .Unprotect "Toto"
        .Range("A1").Value = "cequetuveux"
        .Protect "Toto"
    End With
    Avec l'inconvénient majeur d'afficher le mot de passe (Toto) dans le code...

    • Si tu agis à partir d'une UserForm, tu peux alors protéger un onglet tout en laissant la possibilité à l'Userform de modifier une cellule verrouillé par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Feuil1").Protect "Toto", UserInterfaceOnly:=True
    Il est alors recommandé de mettre cette ligne de code à l'ouverture du classeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_Open()
    Sheets("Feuil1").Protect "Toto", UserInterfaceOnly:=True
    End Sub
    Même inconvénient majeur... Mais le bouton Valider (par exemple) de cette UserForm pourra, sans problème, modifier la cellule A1 sans déprotéger au préalable...
    À plus,

    Thauthème

    Je suis Charlie

  6. #6
    Membre chevronné
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 036
    Points : 1 917
    Points
    1 917
    Billets dans le blog
    5
    Par défaut
    bonjour,

    En effet je ne me souviens pas aussi de la possibilité d'empêcher le message d'avertissement sur une feuille protégée.
    A moins d'aller sous la forteresse Excel pour supprimer ce message.

    La solution habituelle qu'on adopte quand on a une feuille protégée, est d'empêcher la sélection des cellules protégées dans les propriétés de la feuille. Là encore, on n'est obligé de gérer l'évènement du double-clic.

    Et si pour une autre raison la sélection des cellules protégés doit rester possible, on ruse avec VBA sans protection dans le gestionnaire de feuille.

    Par exemple, le code suivant empêche l'utilisateur d'écrire dans les cellules protégées sans que la protection de feuille soit activée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Dim prem_valeur
     
    Private Sub Worksheet_Change(ByVal Target As Range)
     
        If Target.Locked Then
            MsgBox "Changement refusé!", vbCritical, "Feuille protégée!"
            Application.EnableEvents = False
            Target.Formula = prem_valeur
            Application.EnableEvents = True
        End If
     
    End Sub
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        prem_valeur = Target.Formula
    End Sub
    Ousmane


    Quand on tombe dans l'eau, la pluie ne fait plus peur.

  7. #7
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Bonjour à tous,

    NVCfrm, sur ta dernière proposition il est peut-être intéressant d'utiliser application.undo :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Locked Then
            MsgBox "Changement refusé!", vbCritical, "Feuille protégée!"
            Application.EnableEvents = False
            Application.Undo
            Application.EnableEvents = True
        End If
    End Sub
    eric

  8. #8
    Membre chevronné
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 036
    Points : 1 917
    Points
    1 917
    Billets dans le blog
    5
    Par défaut
    Bien vu eric. Je n'avais pas pensé à l'appel d'undo. Cela simplifie beaucoup la solution.
    Ousmane


    Quand on tombe dans l'eau, la pluie ne fait plus peur.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Binjour,
    quand on utilise un formulaire de login c'est il me semble pour accorder des drois a l'application!

    Dans ce cas on masque les onglet qui ne sont pas autorisé et si la personne n'a pas les drois le bouton annuler du formulaire de login referme le classeur!

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2014
    Messages : 58
    Points : 35
    Points
    35
    Par défaut
    Super tout sa ! J'ai bien compris les différentes alternatives, merci bc ! Je vais utiliser le code de NVCfrm complété par Eriiic !

    Merci à tous en tout cas !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Message d'erreur avec apparition bizarre
    Par membreComplexe12 dans le forum MATLAB
    Réponses: 2
    Dernier message: 16/05/2010, 21h44
  2. Réponses: 14
    Dernier message: 03/04/2008, 13h55
  3. [PostGreSQL] Empêcher l'affichage de message d'erreur
    Par FapInfo dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 10/04/2007, 11h27
  4. [CR] Message d'erreur
    Par nono1 dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 11/09/2002, 14h54
  5. Réponses: 2
    Dernier message: 27/05/2002, 19h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo