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 la suppression d'une valeur, ajouter un bouton de suppression de ligne


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2019
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2019
    Messages : 1
    Par défaut Empêcher la suppression d'une valeur, ajouter un bouton de suppression de ligne
    Bonjour,

    Je viens à vous car je galère un peu avec VBA pour créer une fonction, je m'explique.

    L'idée serait que n'importe qui puisse, dans les cellules non verrouillées, ajouter des entrées, voire les modifier, mais lorsque la cellule est remplie, qu'ils ne puissent plus en supprimer le contenu. D'autre part, les personnes possédant le code protégeant la feuille auraient accès à un bouton "Supprimer la ligne", qui leurs permettrait de supprimer les entrées.

    Pour exemple concret entre un Cadre et un employé:
    > Employé rempli une ligne avec des informations. Pour éviter que ces informations ne soient détruites par un autre employé, par mégarde, les employés ne peuvent pas supprimer les valeurs contenues dans les cellules.
    > Cadre désactive la protection de la feuille, de peut supprimer les lignes obsolètes via le bouton.

    J'avais tenté ma chance avec les codes suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim Valeur As Variant
     
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Not Intersect(Target, Range("A3:K9999")) Is Nothing Then
            Application.EnableEvents = False
            If Target = "" Then Target = Valeur
            Application.EnableEvents = True
        End If
    End Sub
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Valeur = Target.Value
    End Sub
    Qui me permettait d'empêcher la suppression des valeurs, et avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub sbVBS_To_Delete_Active_Rows()
    Rows(ActiveCell.Row).Delete
    End Sub
    Affecté à un bouton, qui me permettait de supprimer une ligne. Malheureusement, lorsque je tente de supprimer une des lignes concernées par le premier code, une erreur survient avec une proposition de débogage (VBA n'arrive pas à gérer le fait de garder le contenu ET de vouloir supprimer une ligne, vu que ce sont des instruction contradictoires).

    Si quelqu'un peut m'aider, ce serait vraiment cool !

  2. #2
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour Daalberith et bienvenu sur le Forum,

    1 - Pour la distinction des autorisés (cadres), s'ils ne sont pas nombreux, tu peux récupérer mes identifiants des intervenants.

    Au sein du VBE, sur chaque poste de travail,
    Affiche la fenêtre Exécution (CTRL + G)
    Ecris sans oublier le point d'interrogation
    Puis touche Entrée.

    Il sera dès lors aisé de coder une fonction booléenne (Is_Autorisé)
    Nous pourrons y revenir.

    L'affichage du bouton y serait lié

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Shapes("Btn_Suppresion").Visible = Is_Autorisé
    2 - Pour le blocage
    Tu peux créer une procédure ayant pour objet la protection de la feuille et le verrouillage des cellules modifiées (non vides).
    L'évènement Change de la feuille entraînerait cette procédure.

    Voici les grandes lignes.

  3. #3
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Pour éviter l'effacement de cellules individuelles (une à la fois).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    If Target.Count = 1 Then
        If Not Intersect(Target, Range("A3:K9999")) Is Nothing Then
            Application.EnableEvents = False
            If Target = "" Then Application.Undo
            Application.EnableEvents = True
        End If
    End If
    End Sub
    Pas besoin de ta variable Valeur

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/11/2013, 18h19
  2. Réponses: 2
    Dernier message: 09/12/2009, 22h54
  3. [E-07]ajouter une valeur avec un bouton
    Par choutben dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 31/03/2009, 20h09

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