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 :

Code VBA pour interdire d'insérer ou de supprimer des lignes dans une plage de données


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur
    Inscrit en
    Décembre 2014
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2014
    Messages : 46
    Par défaut Code VBA pour interdire d'insérer ou de supprimer des lignes dans une plage de données
    Bonjour le forum,

    Dans une feuille Excel, dans une plage de données (lignes 18 à 82) je souhaiterai avec un code, interdire qu'on insère ou qu'on supprime des lignes.

    Merci pour votre aide.

  2. #2
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Salut, pourquoi un code alors que tu peux simplement verrouiller les cellules ?

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur
    Inscrit en
    Décembre 2014
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2014
    Messages : 46
    Par défaut
    Bonjour Franc,

    Merci de t'intéresser à mon problème. En fait, ce que je voudrai c'est qu'on ne puisse pas insérer ou supprimer de lignes jusqu'à la ligne 82, mais qu'on puisse éventuellement le faire après la ligne 82.

  4. #4
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Tu veux empêcher l'insertion ou suppression de lignes tout en continuant à encoder des valeurs dans les cellules de cette zone (lignes 18 à 82), c'est bien ça ?

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur
    Inscrit en
    Décembre 2014
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2014
    Messages : 46
    Par défaut
    Franc,
    Oui, c'est bien ça.
    Comme cette feuille Excel, est utilisée par plusieurs personnes et que certains suppriment ou insèrent des lignes alors qu'ils ne devraient pas le faire, ce que je voudrais c'est que les utilisateurs ne puissent pas supprimer ou insérer des lignes jusqu'à la ligne 82, mais qu'ils puissent quand même modifier le contenu des cellules.
    Encore merci pour ton aide

  6. #6
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Voilà comment je résous en partie ton problème.
    D'abord j'empêche l'utilisateur de sélectionner une ligne complète pour éviter de la supprimer ou insérer une nouvelle ligne.
    Pour ce faire, si on fait un clic gauche sur un numéro de ligne pour la sélectionner, la sélection est renvoyée vers la cellule A17 (tu peux changer).
    Si on sélectionne une cellule ou plage de cellules dans la zone de lignes A18 à A82, dans le clic droit j'ai désactivé le menu "Insérer" et "Supprimer".
    Il reste un point faible que je ne sais pas résoudre c'est empêcher les choix "Insérer" et "Supprimer" via le clic droit sur le numéro de ligne, ça doit être faisable via les API windows mais je n'y connais rien.

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
        ' Remplacez 9 et 10 par les index des éléments de menu "Insérer" et "Supprimer" fournis par la sub ShowContextMenuControlNamesAndIndexes()
        Const InsertMenuItemIndex As Integer = 9
        Const DeleteMenuItemIndex As Integer = 10
     
        If (Target.Row >= 18 And Target.Row <= 82) Then
            ' Désactive les éléments de menu "Insérer" et "Supprimer" du menu contextuel
            CommandBars("Cell").Controls(InsertMenuItemIndex).Enabled = False
            CommandBars("Cell").Controls(DeleteMenuItemIndex).Enabled = False
        Else
            ' Réactive les éléments de menu "Insérer" et "Supprimer" du menu contextuel
            CommandBars("Cell").Controls(InsertMenuItemIndex).Enabled = True
            CommandBars("Cell").Controls(DeleteMenuItemIndex).Enabled = True
        End If
    End Sub
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        ' Remplacez 9 et 10 par les index des éléments de menu "Insérer" et "Supprimer" fournis par la sub ShowContextMenuControlNamesAndIndexes()
        Const InsertMenuItemIndex As Integer = 9
        Const DeleteMenuItemIndex As Integer = 10
     
        If (TypeOf Selection Is Range) Then
            If (Selection.Columns.Count = Columns.Count) And (Selection.Row >= 18 And Selection.Row <= 82) And (Selection.Rows.Count = 1) Then
                ' Annule la sélection d'une ligne dans la plage des lignes 18 à 82
                ' en sélectionnant une autre cellule en dehors de cette plage
                Range("A17").Select
            End If
        End If
     
        If (Target.Row >= 18 And Target.Row <= 82) Then
            ' Désactive les éléments de menu "Insérer" et "Supprimer" du menu contextuel
            CommandBars("Cell").Controls(InsertMenuItemIndex).Enabled = False
            CommandBars("Cell").Controls(DeleteMenuItemIndex).Enabled = False
        Else
            ' Réactive les éléments de menu "Insérer" et "Supprimer" du menu contextuel
            CommandBars("Cell").Controls(InsertMenuItemIndex).Enabled = True
            CommandBars("Cell").Controls(DeleteMenuItemIndex).Enabled = True
        End If
    End Sub
    Lance la sub ci-dessous pour trouver le numéro d'index des éléments "Insérer" et "Supprimer" et éventuellement les changer dans les sub ci-dessus.
    Ces numéros varient en fonction de la version Excel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub ShowContextMenuControlNamesAndIndexes()
        Dim ctrl As CommandBarControl
        For Each ctrl In CommandBars("Cell").Controls
            Debug.Print ctrl.Caption & " - " & ctrl.Index
        Next ctrl
    End Sub

Discussions similaires

  1. Réponses: 6
    Dernier message: 06/07/2016, 16h09
  2. [XL-2007] Aide VBA Ajouter/Supprimer des lignes d'une base de données
    Par 31alex31 dans le forum Excel
    Réponses: 3
    Dernier message: 09/03/2016, 11h48
  3. Réponses: 3
    Dernier message: 16/12/2015, 14h00
  4. [VBA-E] Problème pour insérer des lignes dans une feuille Excel
    Par skystef dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/04/2007, 14h13
  5. [VBA] Supprimer des lignes dans une table
    Par shadockgreg dans le forum Access
    Réponses: 6
    Dernier message: 22/11/2006, 09h58

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