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 :

Tester la commande insertion dans le menu contextuel [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 159
    Points : 62
    Points
    62
    Par défaut Tester la commande insertion dans le menu contextuel
    Bonjour

    Je cherche depuis quelques jours à pouvoir tester la fonction insertion ,(ou suppression) du menu contextuel par un utilisateur.

    Pour être plus précis, je veux tester si l utilisateur clique droit sur la référence d une ligne sur une feuille Excel et choisit la commande insertion dans la barre de menu qui apparait.

    Quelle code dois je utiliser?

    J essaye de trouver via commandbars sans succès.

    Merci par avance pour votre aide

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Pourrais-tu développer un peu ? En fonction du résultat du test, que souhaites-tu faire ? Préremplire la ligne ? Empêcher l'insertion ? Autre ?
    En fonction du besoin, il peut peu être y avoir des solutions mais elles seront différentes suivant les cas.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 159
    Points : 62
    Points
    62
    Par défaut
    Bonjour Menhir,

    merci beaucoup pour ton retour.

    EN fait, mon besoin est le suivant :

    si l'utilisateur clique droit sur la référence de la ligne et ensuite choisit la commande insertion pour ajouter une ligne, je souhaite réaliser la déprotection de toute la ligne, sachant que la feuille est complètement protégée. Une fois que l'utilisateur a complété saisi ses informations dans certaines cellules, j'ai un bouton qui permet de faire des calculs.

    Pour l'instant, l'utilisateur insère une ligne mais pour compléter ses cellules sur une ligne, il est nécessaire qu'il appuie une première fois sur le bouton pour la dé protection et une 2ème fois pour les calculs en fonction des informations saisies.

    Je souhaitais éviter qu'il appuie sur le bouton pour la déprotection des cellules ( ou suppression de la ligne ) et d'utiliser les sheetchange fonction pour récupérer l'action de l'utilisateur qui effectue les 2 actions "clique droit sur la référence ligne" + "clique sur la commande insertion"

    Merci pour ton aide.

    Bonjour à tous,
    souhaitez vous d'autres informations pour répondre à mon besoin?
    je pensais utiliser la fonction Workbook_SheetBeforeRightClick pour tester le clique droit lorsque l'utilisateur sélectionne la référence de la ligne mais ensuite il faudrait arriver à déterminer qu'il a sélectionné la commande "insertion" et là je n'ai pas encore trouvé dans les forums comment tester cette commande.
    Merci pour votre aide.

  4. #4
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut



    Bonjour,

    avec une feuille protégée, juste prévoir un bouton pour l'insertion, un autre pour la supression, etc …



    _________________________________________________________________________________________________________
    Je suis Paris, Nice, Bruxelles, Charlie, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 159
    Points : 62
    Points
    62
    Par défaut
    Bonjour
    Merci beaucoup. J y avais pensé mais je souhaitais éviter d alourdir les actions de l utilisateur et le laisser libre de saisir ses données après que j aurai capté ses actions de "selection de la ligne en référence + insertion". Merci bcp pour vos idées de code.

  6. #6
    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,

    s'il s'agit de l'insertion d'une ligne entière il suffit de cocher cette option lors de la protection de la feuille.
    eric

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 159
    Points : 62
    Points
    62
    Par défaut
    Bonjour eriic
    Merci beaucoup pour ta reponse.
    En effet j ai deja aujourd hui lors de la protection par defaut de la feuille coché la case insertion de ligne et suppression de ligne. Ainsi l utilisateur pourra inserer ou supprimer une ligne sur la feuille protégée.
    Mon besoin est de pouvoir par code vba determiner quand il a realise cette action pour pouvoir, de maniere transparente, pour lui deprotegee la ligne automatiquement qu il a insere.
    Merci pour votre aide

  8. #8
    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,

    tu pourrais faire ainsi :
    Dans un module Standard :
    Dans ThisWorbook :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_Open()
        nblig = Feuil1.Cells.Find("*", , , , xlByRows, xlPrevious).Row
    End Sub
    Dans le module de ta feuille :
    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 Worksheet_Change(ByVal Target As Range)
        Dim lig As Long
        lig = Target.Row
        If lig = nblig + 1 Then
            ' ajout en fin de tableau
            '... suite du code
        ElseIf Cells.Find("*", , , , xlByRows, xlPrevious).Row > nblig Then
            'ligne insérée en lig
            '... suite du code
        ElseIf Cells.Find("*", , , , xlByRows, xlPrevious).Row < nblig Then
            'ligne supprimée en lig
            '... suite du code
        End If
        nblig = Cells.Find("*", , , , xlByRows, xlPrevious).Row
    End Sub
    eric

  9. #9
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 159
    Points : 62
    Points
    62
    Par défaut
    Bonjour Eric,

    merci beaucoup pour ta proposition que je vais tester tout de suite.
    Mon cas particulier supplémentaire est que je génère automatiquement la feuille où l'utilisateur va rajouter des lignes
    Donc je vais intégrer dans le Thisworkbook le code du module feuille que tu me proposes.

    Je fais un retour sur ta proposition
    Merci encore

    Marc

  10. #10
    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
    Bon ça va, tu as plus que des rudiments ;-)

  11. #11
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 159
    Points : 62
    Points
    62
    Par défaut
    Re,
    Je viens d essayer ta très bonne idée.
    Il y a encore une difficulté.
    Le worksheetchange réagit des la 1ère action de l utilisateur c est à dire la selection de la référence ligne où il veut ajouter une ligne. Mais pas sur la 2ème action qui est l insertion de la ligne par la commande du menu contextuel. Donc les calculs sur le nblig ne se fait pas. Et donc la gestion de la deprotection de la ligne non plus.
    Il faudrait pouvoir connaitre le code de la commande insertion.

  12. #12
    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
    Heuuuu, bizarre. Quelle version d'excel ?
    Tu n'as pas pris Workbook_SheetSelectionChange au lieu de Workbook_SheetChange des fois ?
    eric

    PS : une chose à laquelle je viens de penser aussi, une insertion de ligne entraine également un Calculate.
    Si tu n'as pas besoin de détecter l'ajout d'une ligne en fin de tableau ça peut être intéressant.
    Fichiers attachés Fichiers attachés

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    473
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 473
    Points : 493
    Points
    493
    Par défaut
    Une autre solution:

    Tu créer un menu dans ton clic droit!

    Dans la feuil concerné de ton Michrosoft excel objets si dans feuil1 ou autre tu place ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Option Explicit
     
    Private Sub Worksheet_Activate()
     
    CreationMenuContext
     
    End Sub
     
    Private Sub Worksheet_Deactivate()
    delMenuContext
    End Sub
    Puis dans un module ceci:

    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
    Option Explicit
     
    Sub InserLigneActive()
    Dim ligne As Variant
     
    ActiveSheet.Unprotect 'déprotection
     
     
    ligne = ActiveCell.Row
     
     
    Sheets("feuil1").Range("a" & ligne).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    ActiveSheet.Protect 'protection
     
     
    End Sub
     
     
    'Création d 'un menu contextuel (Click droit)
     
    Sub CreationMenuContext()
     
     
    With Application.CommandBars("Cell").Controls.Add(msoControlButton)
    .Caption = "Insersion ligne active au dessous"
    .BeginGroup = True
    .OnAction = "InserLigneActive"
    End With
     
    End Sub
     
    'Réinitialise le menu contextuel
     
    Sub delMenuContext()
    Application.CommandBars("Cell").Reset
    End Sub
    ainsi lorsque tu active ta feuille tu trouveras dans ton clique droit un nouveau menu qui te donne la possibilité d'insérer une ligne tout en déprotégeant et en reprotégeant

    A adapter bien-sur !
    Cordialement,

    Jijie

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    473
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 473
    Points : 493
    Points
    493
    Par défaut
    J'avais oublié qu'il fallait entrer des éléments ds la ligne alors

    ds le thisworkbook :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Option Explicit
     
    Private Sub Workbook_Open()
     
    If ActiveSheet.Name = "Feuil1" Then CreationMenuContext 'adapte le nom de la feuille concernée
     
    End Sub
    dans la feuille:
    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
    Option Explicit
     
    Private Sub Worksheet_Activate()
     
    CreationMenuContext
     
    End Sub
     
     
    Private Sub Worksheet_Deactivate()
    delMenuContext
    End Sub
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     
    If LiGne <> "" Then
     
        If ActiveCell.Row <> LiGne Then
     
          Select Case MsgBox("Avez-vous terminé de modifier la ligne ?", vbYesNo Or vbQuestion Or vbMsgBoxRtlReading Or vbDefaultButton1, "")
     
            Case vbYes
            LiGne = ""
            ActiveSheet.Protect 'protection de la feuille
     
              Exit Sub
            Case vbNo
            ActiveSheet.Range("a" & LiGne).Select
     
          End Select
        End If
    End If
    End Sub
    et enfin dans un module:
    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
    Option Explicit
    Public LiGne As Variant
     
    Sub InserLigneActive()
     
    ActiveSheet.Unprotect 'déprotection
     
     
    LiGne = ActiveCell.Row
     
     
    Sheets("feuil1").Range("a" & LiGne).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
     
     
    End Sub
     
     
    'Création d 'un menu contextuel (Click droit)
     
    Sub CreationMenuContext()
     
     
    With Application.CommandBars("Cell").Controls.Add(msoControlButton)
    .Caption = "Insersion ligne active au dessous"
    .BeginGroup = True
    .OnAction = "InserLigneActive"
    End With
     
    End Sub
     
    'Réinitialise le menu contextuel
     
    Sub delMenuContext()
    Application.CommandBars("Cell").Reset
    End Sub
    ainsi avec un clic droit tu pourras insérer une ligne en déprotégeant, puis modifier la ligne concernée et à partir du moment ou tu quitte cette ligne il te demande si les modification sont terminées si OUI alors protection de la feuille et si NON retour en colonne A et la ligne concernée!
    Cordialement,

    Jijie

  15. #15
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 159
    Points : 62
    Points
    62
    Par défaut
    Bonjour à tous,
    merci encore à Eric et jijie pour ces excellentes idées.
    J'ai enfin réussi à faire fonctionner la gestion de l'insertion (et suppression) de ligne grâce à vos idées.
    Un grand merci

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/12/2014, 11h41
  2. Ajouter une commande dans le menu contextuel
    Par Tenguryu dans le forum C++Builder
    Réponses: 2
    Dernier message: 02/04/2006, 12h43
  3. Réponses: 15
    Dernier message: 12/08/2005, 15h06
  4. Visibilité commande dans un Menu contextuel
    Par Hamdi dans le forum IHM
    Réponses: 3
    Dernier message: 20/01/2005, 12h29

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