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 :

VBA - Griser les commande "Inserer" (dans menu contextuel) / Inserer-Supprimer lignes et colonnes


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 17
    Points : 11
    Points
    11
    Par défaut VBA - Griser les commande "Inserer" (dans menu contextuel) / Inserer-Supprimer lignes et colonnes
    Bonjour,

    Je viens vers vous car je rencontre un problème que je ne réussi pas à résoudre.

    J'ai un classeur Excel dans lequel j'ai fait un peu de VBA. Mais pour que mon code reste entièrement fonctionnel il ne faut absolument pas que soit supprimer/ajouter une cellule, une ligne ou une colonne

    Pour griser la commande "Supprimer" du menu contextuel (clic droit sur une cellule) j'ai utiliser le code suivant (code trouvé après moultes recherches sur ce forum ):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Workbook_Activate()
        'Désactivation de la commande 'Supprimer'
        ' (Ne pas oublier de rétablir la commande au moment de la désactivation du classeur -> Workbook_Deactivate)
            'dans le menu principal
            Application.CommandBars(1).Controls("Edition").CommandBar.Controls("Supprimer...").Enabled = False
            'dans le menu contextuel
            Application.CommandBars("Cell").Controls("Supprimer...").Enabled = False
    End Sub
    Avec ce code ci-dessous pour ré-activer la commande "Supprimer" (sur une cellule) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Workbook_Deactivate()
        'Ré-activation de la commande 'Supprimer'
            'dans le menu principal
            Application.CommandBars(1).Controls("Edition").CommandBar.Controls("Supprimer...").Enabled = True
            'dans le menu contextuel
            Application.CommandBars("Cell").Controls("Supprimer...").Enabled = True
    End Sub
    Ca fonctionne super bien.

    Par contre, je ne réussis pas à faire la même chose pour la commande "Insérer" du menu contextuel (clic droit sur une cellule). Y a-t-il une solution svp ?

    De plus, l’icône "Supprimer" (dans le bandeau"Accueil") permet toujours de supprimer une cellule/ligne/colonne.
    Y a-t-il une solution pour griser cette icône (et le dé-griser en sortant du Woorkbook) ?

    De même l’icône "Insérer" (dans le bandeau"Accueil") permet d'insérer une cellule/ligne/colonne.
    Y a-t-il une solution pour griser cette icône (et le dé-griser en sortant du Woorkbook) ?

    Enfin, est-il possible de griser les commandes "Supprimer" et "Insertion" du menu contextuel qui apparait lorsque l'on clic droit sur une entête de colonne ou une entête de ligne ?

    A noter que je ne peux pas utiliser "Protect" car j'ai besoin que les cellules soient modifiables à tous moment ^^

    Bref.... Au secours !!!

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Points : 5 901
    Points
    5 901
    Par défaut
    Bonjour,

    En lisant ceci, tu trouveras peut-être une solution.
    Ce n'est pas simple travailler avec les menus depuis 2007...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Merci du tuyau, je vais jeter un œil attentif à tous ça

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Points : 1 219
    Points
    1 219
    Par défaut
    Bonjour,

    Pour version Excel 2007 et plus, une piste avec la démarche suivante.

    1) CODE VBA - copiez le code suivant dans la fenêtre de code de ThisWorkbook

    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
    Private Sub Workbook_Activate()
    With Application.CommandBars("Cell")
      .FindControl(ID:=3181).Enabled = False
      .FindControl(ID:=292).Enabled = False
    End With
    With Application.CommandBars("Column")
      .FindControl(ID:=3183).Enabled = False
      .FindControl(ID:=294).Enabled = False
    End With
    With Application.CommandBars("Row")
      .FindControl(ID:=3183).Enabled = False
      .FindControl(ID:=293).Enabled = False
    End With
    End Sub
     
    Private Sub Workbook_Deactivate()
    With Application.CommandBars("Cell")
      .FindControl(ID:=3181).Enabled = True
      .FindControl(ID:=292).Enabled = True
    End With
    With Application.CommandBars("Column")
      .FindControl(ID:=3183).Enabled = True
      .FindControl(ID:=294).Enabled = True
    End With
    With Application.CommandBars("Row")
      .FindControl(ID:=3183).Enabled = True
      .FindControl(ID:=293).Enabled = True
    End With
    End Sub
    2) CODE XML - copiez le code suivant dans "Custom UI Editor For Microsoft Office" (voir le lien obligeamment fourni par parmi)

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
       <!-- Désactive les boutons -->
      <commands> 
       <!--## Supprimer ##-->
        <command idMso="CellsDeleteSmart" enabled="false" /> 
        <command idMso="CellsDelete" enabled="false" /> 
        <command idMso="SheetRowsDelete" enabled="false" /> 
        <command idMso="SheetColumnsDelete" enabled="false" /> 
        <command idMso="SheetDelete" enabled="false" /> 
       <!--## Insérer ##-->
        <command idMso="InsertCellstMenu" enabled="false" />
      </commands>
    </customUI>

    Si vous êtes en Excel 2010, adaptez la 1ère ligne du code XML.

    Le code 1 désactive des boutons du menu contextuel.
    Le code 2 désactive les éléments Cellules/Insérer et Cellules/Supprimer du menu "Accueil" du ruban.

    Je mets un classeur exemple pour que vous puissiez vous rendre compte.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Merci de votre aide, j'avance à grands pas

    J'ai un peu galérer pour implémenter le code N°2 mais après avoir étudié l'article linké par Parmi et fait plusieur tests avec "Custom UI Editor For Microsoft Office" ça fonctionne

    C'est exactement ce que je souhaitais : Les options grisées dans les menus contextuels et les bouton grisés dans le ruban "Accueil". Et ceci, uniquement pour le document en question.

    Merci beaucoup de votre aide

  6. #6
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    Bonsoir,
    Il y a peu y avoir insertion ou suppression par de nombreuses méthodes et notamment les raccourcis claviers

    "ctrl"+"shift"+"=" pour insèrer
    "ctrl"+"-" pour supprimer

    le mieux c'est d'utiliser "protéger la feuille" pour éviter la suppression des lignes, colonnes etc... ( en décochant les cases adéquates)
    et lorsque tu executes ta macro tu supprimes cette protection si besoin puis tu la remets à la fin.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
        ActiveSheet.Unprotect ("toto")
     
        'TON CODE
     
        ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _
            False, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
            AllowFormattingRows:=True, AllowSorting:=True, AllowFiltering:=True, _
            AllowUsingPivotTables:=True, Password:="toto"
    où avec les événements sur la feuille par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Worksheet_Change(ByVal Target As Range)
     If Not Intersect(Target, [a2:a30]) Is Nothing Then
      Application.EnableEvents = False
     If Target.Address = Target.EntireRow.Address Then
     
           Application.Undo
           MsgBox "Interdit"
        End If
      End If
     Application.EnableEvents = True
    End Sub

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    L'idée est bonne (elle m'avait même traversée la tête) mais il est nécessaire de pouvoir faire des saisies manuelles, des suppression de contenu de cellule, de commentaire, et des changement manuel de couleur... donc c'est pas trop possible.

    Quoi que... à moins de dé-protéger dés le début de chaque événement et re-protéger ensuite... mais dans ce cas la il faudrait alors griser le bouton "Ôter la protection de la feuille" du ruban "Révision"...

    Pourquoi pas...

    Je verrais ça dans une V2

    En tous cas, merci du conseil

  8. #8
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    si tu mets un mot de passe il faut juste proteger ton VBE, l'utilisateur qui voudra désactiver la protection de la feuille devra connaitre ce mdp, et selon les options de .protect tu peux faire presque tout (regarde l'aide sur Référence du développeur Excel
    Worksheet.Protect, méthode )

    tu peux aussi pour éviter l'insertion d'une ligne , colonne ajouter du contenu à la dernière cellule de ta feuille soit range("IV65536") soit range("XFD1048576") en xlsx.
    c'est sans programmation par contre cela n'empeche pas la suppression.
    edit : pour éviter l'insertion d'1 cellule il faudrait du contenu dans toutes les cellules de la dernière ligne et dernière colonne

Discussions similaires

  1. [PR-2010] Inserer des commandes dans menu contextuel clic droit
    Par SwissEngineer dans le forum Project
    Réponses: 0
    Dernier message: 08/01/2013, 11h37
  2. les commande nyy et ndd dans vi
    Par sami117 dans le forum Linux
    Réponses: 2
    Dernier message: 20/05/2009, 15h00

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