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 suppression de cellule sur plusieurs plages sur la même feuille [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Femme Profil pro
    Assistante de gestion
    Inscrit en
    Novembre 2022
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Assistante de gestion
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2022
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Empêcher suppression de cellule sur plusieurs plages sur la même feuille
    Bonjour à toutes et tous,

    Je cherche à empêcher la suppression de différentes plages de cellules dans ma feuille.
    J'ai utilisé le code suivant :

    Private Sub Worksheet_Change(ByVal Target As Range)
    'Empêcher la suppression de cellule

    If Intersect(Target, Range("J4:R65536")) Is Nothing Then Exit Sub


    On Error GoTo ExitPoint
    Application.EnableEvents = False
    If Not IsDate(Target(1)) Then

    Application.Undo
    MsgBox " Il est INTERDIT de supprimer le contenu de ces cellules " _
    , vbCritical, "AHO)"

    End If

    ElseIf Intersect(Target, Range("A4:I4")) Is Nothing Then Exit Sub

    On Error GoTo ExitPoint
    Application.EnableEvents = False
    If Not IsDate(Target(1)) Then

    Application.Undo
    MsgBox " Il est INTERDIT de supprimer le contenu de ces cellules " _
    , vbCritical, "(AHO)"

    Else

    ExitPoint:
    Application.EnableEvents = True

    End Sub


    J'imagine que cela vient de mon ElseIf - mais je ne vois pas.
    Lorsque que j'essaie avec une seule plage, cela fonctionne :

    Private Sub Worksheet_Change(ByVal Target As Range)
    'Empêcher la suppression de cellule

    If Intersect(Target, Range("J4:R65536")) Is Nothing Then Exit Sub

    On Error GoTo ExitPoint
    Application.EnableEvents = False
    If Not IsDate(Target(1)) Then

    Application.Undo
    MsgBox " Il est INTERDIT de supprimer le contenu de ces cellules " _
    , vbCritical, "AHO)"

    End If


    ExitPoint:
    Application.EnableEvents = True

    End Sub
    Je vous remercie par avance pour le temps que vous me consacrerez

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 380
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 380
    Points : 2 007
    Points
    2 007
    Par défaut
    Ne te casses pas la tête à faire cela via VBA, tu t'y casseras les dents, il y a forcément un truc que tu n'as pas prévu, et qui seras exploité tôt ou tard (j'en voit déjà au moins 2).

    Protège tes cellules, protège ta feuille et protège ton classeur. C'est autrement plus fiable et ne requiert pas de VBA.

  3. #3
    Candidat au Club
    Femme Profil pro
    Assistante de gestion
    Inscrit en
    Novembre 2022
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Assistante de gestion
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2022
    Messages : 4
    Points : 3
    Points
    3
    Par défaut @deedolith
    Bonjour Deedolith,

    C'est une solution simple à laquelle j'avais pensé mais ce n'est pas possible. J'ai des macros et des filtres de données avancés qui s’exécutent aussi avec cette feuille. Cette feuille contient un tableau et je ne veux pas que l'on puisse supprimer les formules dans les cellules mais si je protège ma feuille on ne peut plus ajouter de lignes au tableau.

    Merci quand même de ta suggestion.

    Belle soirée

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 380
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 380
    Points : 2 007
    Points
    2 007
    Par défaut
    Heu,
    Es-tu au courant que l'on peut définir de nombreux droits avec les protections ?

    Quant au macros VBA, il est beaucoup plus facile de déverrouiller une feuille le temps que le code s'exécute pour la verrouiller ensuite, que tenter de verrouiller des cellules par code.

  5. #5
    Candidat au Club
    Femme Profil pro
    Assistante de gestion
    Inscrit en
    Novembre 2022
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Assistante de gestion
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2022
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par deedolith Voir le message
    Heu,
    Es-tu au courant que l'on peut définir de nombreux droits avec les protections ?

    Quant au macros VBA, il est beaucoup plus facile de déverrouiller une feuille le temps que le code s'exécute pour la verrouiller ensuite, que tenter de verrouiller des cellules par code.
    Oui je suis au courant, si tu sais comment protéger une feuille sans empêcher la création de ligne de tableau (je dis bien tableau et non pas plage de cellule) je te serais reconnaissante de m'indiquer comment faire.

    Pour ce qui est de la désactivation de la protection lors de l’exécution de mes macro : c'est ce que j'ai mis en place sur mes feuilles verrouillées.
    Mon problème est justement que je ne peux verrouiller cette feuille mais que je tiens à protéger des plages de cellules qui ne sont pas adjacentes.
    Cela dit les cellules les plus importantes sont protégées par mon code. Ce que je voudrais c'est l'étendre aux autres plages... Même si tu ne peux pas m'aider, je te remercie de ton attention.

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 380
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 380
    Points : 2 007
    Points
    2 007
    Par défaut
    Citation Envoyé par Astarelfe Voir le message
    Même si tu ne peux pas m'aider, je te remercie de ton attention.
    Ce n'est pas avec ce genre d'attitude que tu obtiendras de l'aide
    Qu'on soit bien claire: Nous ne sommes pas à ton service et nous ne te sommes pas redevable, donc garde tes jugements injustifiés pour toi.

    Autre points:
    Elle ressemble à quoi ta feuille ?
    C'est difficile de proposer une solution adaptée quand on a qu'une vague idée du besoin.
    Peux-tu uploader un fichier anonymisé ?

    Utilise la balise code pour poster tes sources (le bouton qui ressemble à #), ce sera autrement plus lisible (on a pas envie de lire du code mal présenté).

    Ton code ne compile pas, avec une indentation correcte tu verras peut-être pourquoi:
    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
    17
    18
    19
    20
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Intersect(Target, Range("J4:R65536")) Is Nothing Then Exit Sub
        'Empêcher la suppression de cellule
     
        On Error GoTo ExitPoint
        Application.EnableEvents = False
        If Not IsDate(Target(1)) Then
            Application.Undo
            MsgBox " Il est INTERDIT de supprimer le contenu de ces cellules ", vbCritical, "AHO)"
        End If
        ElseIf Intersect(Target, Range("A4:I4")) Is Nothing Then Exit Sub
        On Error GoTo ExitPoint
        Application.EnableEvents = False
        If Not IsDate(Target(1)) Then
            Application.Undo
            MsgBox " Il est INTERDIT de supprimer le contenu de ces cellules ", vbCritical, "(AHO)"
        Else
    ExitPoint:
            Application.EnableEvents = True
    End Sub
    Application.EnableEvents, pourquoi estimes-tu avoir besoin de cette instructions ? Produit d'abord du code qui fonctionne, et optimise seulement quand tu auras obtenu le comportement désiré.
    Premature optimisation is the root of all evils in software development (Donald Knuth)

    On Error GoTo ExitPoint: C'est redondant, tu n'en as besoin qu'au debut de ta procédure.

  7. #7
    Candidat au Club
    Femme Profil pro
    Assistante de gestion
    Inscrit en
    Novembre 2022
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Assistante de gestion
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2022
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Bonsoir Deedolith,

    Citation Envoyé par deedolith Voir le message
    Ce n'est pas avec ce genre d'attitude que tu obtiendras de l'aide
    Qu'on soit bien claire: Nous ne sommes pas à ton service et nous ne te sommes pas redevable, donc garde tes jugements injustifiés pour toi.
    Je ne comprends pas bien ta remarque, je te remerciais du temps que tu as pris pour me répondre. Et je n'ai jamais pensé que qui que ce soit était à ma disposition.
    Je rends, moi même, service à un collègue qui a besoin d'un fichier fonctionnel, mais je débute à peine en VBA et ce n'est pas simple de se former seule.

    Je prends sur mon temps perso pour travailler sur ce fichier, je n'avais malheureusement plus de temps alors je n'ai pas insisté et laissé mon code qui fonctionnait avec 1 seule plage de cellule protégée, et j'ai mis un avertissement aux utilisateurs.

    Je te remercie encore toi et tous ceux qui prennent du temps pour apporter leur aide et leurs lumières.

    Belle soirée,

  8. #8
    Membre éclairé Avatar de Valtrase
    Homme Profil pro
    Jeune retraité...
    Inscrit en
    Janvier 2016
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Jeune retraité...
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2016
    Messages : 413
    Points : 725
    Points
    725
    Par défaut
    Salut,
    @Astarelfe, si tu tiens vraiment à passer par ton code :
    1. va jeter un petit coup d'œil sur l'aide de Microsoft concernant l'utilisation de If ElseIf Else. Tu vas vite comprendre ton erreur.



    Si tu ne trouves pas reviens par ici.

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

Discussions similaires

  1. [XL-2016] Outil solveur: définition de plusieurs objectifs sur la même feuille
    Par yoyodc dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/05/2019, 09h21
  2. Enchainer plusieurs macro sur la même feuille
    Par suphappy dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/10/2018, 18h17
  3. [XL-2016] Imprimer plusieurs titres sur une même feuille Excel
    Par ben_diop dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/07/2018, 18h17
  4. [68k] Jeu du Morpion : empêcher plusieurs symboles sur la même case
    Par Sillas dans le forum Autres architectures
    Réponses: 7
    Dernier message: 10/12/2015, 17h58
  5. [XL-2010] recopier n fois fois une plage sur la même feuille
    Par Daniel117 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 09/07/2015, 10h27

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