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 :

Autre methode que "Worksheet_Change(ByVal Target As Range)


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2019
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2019
    Messages : 12
    Par défaut Autre methode que "Worksheet_Change(ByVal Target As Range)
    Bonjour,

    Habituellement j'utilise cette méthode pour lancer des macros

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("K21:K22")) Is Nothing Then
    Call oppriskact
    End If
    Mais, corrigez moi si je me trompe; cette méthode ne marche que si il y a "une action" sur la cellule ?

    Donc, est il possible de lancer une macro dès la modification "automatique" de cellule ? Si la valeur de la cellule est actualisée j'aimerai que ma macro se déclenche.

    Merci

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 407
    Par défaut
    Bonjour.

    De mon expérience (limitée) il m'est apparu que sauf si tu as désactivé les événements si tu modifies une cellule, cela déclenche les macros associées.

    La désactivation des événements se fait par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.EnableEvents=false
    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    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 114
    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 114
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si tu lconsultes 'aide sur la méthode Intersect tu verras qu'elle renvoie un objet Range représentant l'intersection rectangulaire de deux ou plusieurs plages et si une ou plusieurs plages d'une feuille de calcul différente sont spécifiées, une erreur est renvoyée.
    Donc .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Intersect(Range("A1:A2"), Range("A1:A3"))
    renverra l'objet Range des cellules A1:A2
    alors que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Intersect(Range("B1"), Range("A1:A3"))
    ne renverra rien soit Nothing

    et de fait on utilise cette méthode bien souvent au sein d'une procédure événementielle pour vérifier si l'"action" (on parlera plutôt d'événement puisque l'action est effectuée par une méthode) pour vérifier si la cellule ou plage de cellules où a eu lieu cet événement se situe à un endroit précis de la feuille.
    Mais rien ne t'empêche d'utiliser cette même méthode par exemple dans une boucle.
    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

  4. #4
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2019
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2019
    Messages : 12
    Par défaut
    @marot_r De mon expérience ( très limité ); non

    Mais les explications détaillées de @philippe me font surtout prendre conscient que je dois mal utiliser/comprendre cette méthode. Je retourne bucher/expérimenter. Merci de votre réactivité!

  5. #5
    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 114
    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 114
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Voici un cas très concret de l'utilisation de la méthode Intersect que j'utilise régulièrement.
    Afin de pouvoir sélectionner une ou plusieurs listes l'utilisateur peut faire un double clic qui provoquera l'apparition d'une croix ou sa disparition.
    Donc pour éviter des erreurs je dois vérifier si l'utilisateur effectue bien son double clic dans la bonne colonne (ici la colonne Selected)

    Nom : 190716 Intersect.png
Affichages : 1370
Taille : 4,3 Ko

    Le code dans la procédure événementielle
    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_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
      ' Déclaration
      Dim oListManager As ListObject
      ' Affectation
      Set oListManager = Me.ListObjects(1)
      With Application
        If Target.Count = 1 Then
          If Not Application.Intersect(Target, oListManager.ListColumns("Selected").DataBodyRange) Is Nothing Then
             Target = IIf(LCase(Target) = "X", "", "X")
             Cancel = True
          End If
        End If
      End With
      Set oListManager = Nothing
    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

  6. #6
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour,

    Donc, est il possible de lancer une macro dès la modification "automatique" de cellule ? Si la valeur de la cellule est actualisée j'aimerai que ma macro se déclenche.
    Une remarque :
    L’événement Worksheet.change se produit quand l'utilisateur (ou un lien externe) modifie des cellules de la feuille de calcul. Cet événement ne se produit pas lorsque les cellules sont modifiées pendant un recalcul.
    Pour reprendre ton exemple, si la cible K1 contient la formule =C1, la modification de la valeur de C1 va modifier la valeur de K1 mais ne va pas lancer la procédure évènementielle Worksheet.change.

    Cordialement.

  7. #7
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 364
    Par défaut
    Bonjour

    @Philippe : ton exemple (très peu optimisé*) est une autre façon de procéder.
    Pour en revenir à l’évènement Change, je rejoins totalement gFTZ82 en ajoutant que si, avec la macro appelée, la cellule Target est modifiée, il y a récursivité source de blocage intempestif (définitif pour certaines versions) !

    * Je ne vois pas l‘utilité de With Application … End With.
    Je ne comprends pas le LCase. Pour un effet bascule, je pencherais plutôt pour UCase.

    Si par inadvertance un titre visé est modifié (Selected avec un espace final invisible) …

    Il est toujours très intéressant de passer par des noms !

    Si ton Tableau (ListObjects) est nommé Tb (par exemple), le code suivant, pour basculer, suffit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
        If Not Intersect(Target, [Tb].Columns(1)) Is Nothing Then
            Target = IIf(UCase(Target) = "X", "", "X")     ‘ si X : vide, si vide : X
            Cancel = True
        End If
    End Sub
    Nota : le DoubleClick ne concerne toujours qu’une cellule donc le test If Target.Count= 1 … est superflu.

Discussions similaires

  1. quoted string not properly terminated & autres
    Par gRRosminet dans le forum SQL
    Réponses: 14
    Dernier message: 17/01/2013, 14h17
  2. [Langage/Algorithme] une autre methode que opendir?
    Par Xavier dans le forum C++Builder
    Réponses: 2
    Dernier message: 20/11/2011, 12h34
  3. une autre methode que opendir?
    Par Xavier dans le forum Langage
    Réponses: 1
    Dernier message: 11/11/2011, 18h13
  4. [langage] connaissez-vous autre chose que -d
    Par Sébastien dans le forum Langage
    Réponses: 4
    Dernier message: 05/08/2002, 20h13

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