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 :

Que puis-je ajouter dans cette macro pour éviter de la modifier? [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre très actif
    Homme Profil pro
    Moi, je ne fais que passer, excusez le dérangement
    Inscrit en
    Mars 2013
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Moi, je ne fais que passer, excusez le dérangement

    Informations forums :
    Inscription : Mars 2013
    Messages : 660
    Par défaut Que puis-je ajouter dans cette macro pour éviter de la modifier?
    Bonjour le forum

    Dans la macro ci-dessous
    Pour modifier le commentaire il faut mettre false
    Si on met True s'affiche ceci
    Nom : aaaa.JPG
Affichages : 210
Taille : 27,7 Ko

    Modifier Commentaire dans Cellules H2:H4 fusionnées
    1er Clic droit supprime 1 & affiche couleur
    2ème Clic droit affiche 1 & supprime couleur

    Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) 'macro pour click droit cellules colonne H
    Cancel = True
    If Not Application.Intersect(Target, Range("H6:H36")) Is Nothing Then
    If Target.Value = "" Then
    Target.Value = 1
    Else
    Target.Value = ""
    End If
    End If
    Cancel = True ' False pour modifier le commentaire
    End Sub

    Merci pour vos éventuels retours
    Cordialement

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    Si vos cellules sont fusionnées, il faut lui indiquer la 1ère cellule de cette fusion, comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
           If Target.Cells(1, 1).Value = "" Then
    Maintenant pour compléter votre code et le rendre plus sûr, je ferai 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
    Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) 'macro pour click droit cellules colonne H
        On Error GoTo Sortie
        Application.EnableEvents = False
        Cancel = True
        If Not Application.Intersect(Target, Range("H6:H36")) Is Nothing Then
            If Target.Cells(1, 1).Value = "" Then
                Target.Cells(1, 1).Value = 1
            Else
                Target.Cells(1, 1).Value = ""
            End If
        End If
        Cancel = True ' False pour modifier le commentaire
    Sortie:
        Application.EnableEvents = True
    End Sub
    Cdlt

  3. #3
    Membre très actif
    Homme Profil pro
    Moi, je ne fais que passer, excusez le dérangement
    Inscrit en
    Mars 2013
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Moi, je ne fais que passer, excusez le dérangement

    Informations forums :
    Inscription : Mars 2013
    Messages : 660
    Par défaut
    Citation Envoyé par ARTURO83 Voir le message
    Bonjour,

    Si vos cellules sont fusionnées, il faut lui indiquer la 1ère cellule de cette fusion, comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
           If Target.Cells(1, 1).Value = "" Then
    Maintenant pour compléter votre code et le rendre plus sûr, je ferai 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
    Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) 'macro pour click droit cellules colonne H
        On Error GoTo Sortie
        Application.EnableEvents = False
        Cancel = True
        If Not Application.Intersect(Target, Range("H6:H36")) Is Nothing Then
            If Target.Cells(1, 1).Value = "" Then
                Target.Cells(1, 1).Value = 1
            Else
                Target.Cells(1, 1).Value = ""
            End If
        End If
        Cancel = True ' False pour modifier le commentaire
    Sortie:
        Application.EnableEvents = True
    End Sub
    Cdlt
    Bonjour ARTURO 83
    Voici le fichier ça sera plus facile pour toi
    Merci de t’intéresser à cette macro
    Cordialement
    Fichiers attachés Fichiers attachés

  4. #4
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    Je ne comprends pas, pourquoi n'avez-vous pas recopié la macro modifié? je l'ai essayé et ça marche bien, y a t-il un autre problème?
    La macro répond bien à votre demande, suite à un clic droit sur une cellule fusionnée, elle affiche 1 ou rien et change la couleur de fond d'une cellule.

    Question: Quelle est votre version d'excel? Si pas trop ancienne, pourquoi l'avoir enregistrée avec l'extension.xls?
    ici, votre fichier enregistré avec l'extension xlsm (prend en charge les macros)

    Un internaute_Que puis-je ajouter dans cette macro pour éviter de la modifier.xlsm

    Cdlt

  5. #5
    Membre très actif
    Homme Profil pro
    Moi, je ne fais que passer, excusez le dérangement
    Inscrit en
    Mars 2013
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Moi, je ne fais que passer, excusez le dérangement

    Informations forums :
    Inscription : Mars 2013
    Messages : 660
    Par défaut
    Bonjour ARTURO83
    Je pense qu'on s'est pas compris ou je me suis mal exprimé
    Ce n'est pas les cellules fusionnées H2:H4 qui posent problème
    Lorsque je mets True à la fin de ma macro, dans H2:H3 (cellules fusionnées) je ne peux pas modifier les commentaires
    Il faut mettre False. Et si je met False j'ai la Pièce jointe 631628
    C'est pour éviter de passer de False à True souvent (si je veux modifier les commentaires mais ce n'est pas sans arrêt non plus) mais pour le programme ce n'est pas un souci
    Tous les commentaires ne peuvent-être modifiés[/U][/B] => Normal la macro est dans ThisWorkbook
    Oui je suis encore sous Excel 2003 comme le vieux nonagénaire que je suis

    Merci à toi
    Bien cordialement

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 174
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    L'argument Cancel avec comme valeur True sert à éviter que le menu contextuel ne s'affiche lorsque l'on fait un clic droit. C'est pour cette raison d'ailleurs que cette procédure événementielle se nomme BeforeRightClic

    On utilise ce type d'événement pour justement utiliser le clic droit pour faire une action ou lancer une procédure en évitant au retour d'avoir le menu contextuel qui s'affiche.

    Votre explication dans la discussion fil #5 est très confuse. Si vous expliquiez clairement ce que vous voulez-faire exactement, sans parler de VBA ni de True et de False, ce serait peut-être plus simple pour vous aider

    Pour en savoir plus sur les procédures événementielles, je vous conseille un peu de lecture
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #7
    Membre très actif
    Homme Profil pro
    Moi, je ne fais que passer, excusez le dérangement
    Inscrit en
    Mars 2013
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Moi, je ne fais que passer, excusez le dérangement

    Informations forums :
    Inscription : Mars 2013
    Messages : 660
    Par défaut
    Bonjour Philippe Tulliez
    Dans le fichier joint Essai joint je voudrais avec la macro ci-dessous pouvoir modifier les commentaires dans tout le classeur
    Merci
    Bien cordialement à vous


    Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
    Cancel = False
    If Not Application.Intersect(Target, Range("H6:H36")) Is Nothing Then
    If Target.Value = "" Then
    Target.Value = 1
    Else
    Target.Value = ""
    End If
    End If
    Cancel = True
    End Sub

  8. #8
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Alors 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
    Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) 'macro pour click droit cellules colonne H
        On Error GoTo Sortie
        Application.EnableEvents = False
        If Not Application.Intersect(Target, Range("H6:H36")) Is Nothing Then
            Cancel = True
            If Target.Cells(1, 1).Value = "" Then
                Target.Cells(1, 1).Value = 1
            Else
                Target.Cells(1, 1).Value = ""
            End If
        Else
            Cancel = False
        End If
    Sortie:
        Application.EnableEvents = True
    End Sub

    Cdlt

  9. #9
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 174
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je vous demandais d'expliquer sans jargon informatique, comme vous l'expliqueriez à quelqu'un qui devrait le programmer.
    Pourquoi voulez-vous passer par une procédure événementielle ?

    Pour modifier tous les commentaires d'un classeur, une simple procédure écrite dans un module standard pourrait faire l'affaire mais comme vous n'expliquez pas exactement ce que vous voulez, il n'y a pas de solution.
    Vous voulez changer quoi dans les commentaires ?
    Les titres, la mise en forme, y a t'il des conditions, des textes à récupérer depuis des cellules, etc., etc. ?

    On vit dans une société de communication et on communique de plus en plus mal
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  10. #10
    Membre très actif
    Homme Profil pro
    Moi, je ne fais que passer, excusez le dérangement
    Inscrit en
    Mars 2013
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Moi, je ne fais que passer, excusez le dérangement

    Informations forums :
    Inscription : Mars 2013
    Messages : 660
    Par défaut
    Citation Envoyé par ARTURO83 Voir le message
    Alors 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
    Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) 'macro pour click droit cellules colonne H
        On Error GoTo Sortie
        Application.EnableEvents = False
        If Not Application.Intersect(Target, Range("H6:H36")) Is Nothing Then
            Cancel = True
            If Target.Cells(1, 1).Value = "" Then
                Target.Cells(1, 1).Value = 1
            Else
                Target.Cells(1, 1).Value = ""
            End If
        Else
            Cancel = False
        End If
    Sortie:
        Application.EnableEvents = True
    End Sub

    Cdlt
    re ARTURO83
    SUPER
    Excuse moi si je me suis mal exprimé ( je suis un spécialiste on me le reproche souvent sur les forums!!!)
    Encore un grand merci
    Bonne fin de journée
    Très cordialement

  11. #11
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 174
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je suis heureux pour vous que vous ayez reçu la réponse que vous attendiez mais je reste perplexe entre le fait que vouliez modifier tous les commentaires du classeur alors que le code que vous avez retenu efface la valeur ou écrit 1 (plage H6:H36)

    Je dois sans doute ne pas comprendre ce que je lis.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  12. #12
    Membre très actif
    Homme Profil pro
    Moi, je ne fais que passer, excusez le dérangement
    Inscrit en
    Mars 2013
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Moi, je ne fais que passer, excusez le dérangement

    Informations forums :
    Inscription : Mars 2013
    Messages : 660
    Par défaut
    Bonjour Philippe Tulliez
    Je voulais exactement ça et non modifier tous les commentaires du classeur
    C'était pouvoir faire un clic droit sans afficher le menu contextuel et pourvoir modifier mes commentaires sans modifier la macro à chaque modifs des commentaires
    Pour copier tous les commentaires dans un classeur j'ai des programmes ou les déplacer j'ai des macros dans fichier Essai et modules divers
    J'ai fait ARTURO83 EST SUPER Cellule A3
    Merci à toi et Bonne Année 2023
    Cordialement
    Fichiers attachés Fichiers attachés

  13. #13
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 174
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Désolé si j'ai mal interpreté vos explications.

    Petites remarques tout de même.
    Je ne vois pas la raison de placer un On Error Goto Fin ni de placer l'instruction Application.EnableEvents = False et j'ajouterais un test (voir ligne 4) car si vous faites une sélection de plusieurs cellules par exemple G6:I7 vous allez écrire 1 ou "" dans la cellule G6
    Une dernière remarque. Vous utilisez la procédure Workbook_SheetBeforeRightClick, cela signifie donc que cela doit fonctionner sur toutes les feuilles de votre classeur sans exception ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) 'macro pour click droit cellules colonne H
      If Not Application.Intersect(Target, Range("H6:H36")) Is Nothing Then
         With Target
           If ActiveCell.Column = 8 Then
            .Cells(1, 1).Value = IIf(.Cells(1, 1).Value = 1, "", 1)
             Cancel = True
           End If
         End With
      End If
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

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

Discussions similaires

  1. [XL-2007] Problème dans une macro pour ajouter une date
    Par INFINITY100 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/05/2015, 20h28
  2. [AC-2003] Insérer un paramètre dynamique dans une macro pour l'appel d'une fonction
    Par OphyTe dans le forum Macros Access
    Réponses: 11
    Dernier message: 10/02/2015, 15h01
  3. [XL-2010] Apparitions valeurs fantomes dans TCD (macro pour les empêcher)
    Par Alasgard dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/04/2014, 19h50
  4. Réponses: 6
    Dernier message: 20/11/2009, 13h07
  5. Réponses: 2
    Dernier message: 25/09/2009, 12h03

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