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 :

Private Sub Worksheet_Change ne se déclenche pas


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Directrice des finances
    Inscrit en
    Juin 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Directrice des finances
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2017
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Private Sub Worksheet_Change ne se déclenche pas
    Bonjour à tous,

    Je prépare un fichier pour la gestion de la location de matériel dans la collectivité où je travaille.
    Il y a un 1er tableau (A4:AG57) où on enregistre les demandes des différentes associations et un 2ème tableau (A60:AG102) qui calcule si cette ressource est disponible à la date souhaitée. Je souhaite que quand l'utilisateur rempli la demande dans le 1er tableau un message l'avertisse si la réservation est possible ou non en fonction du 2ème tableau.
    Voici le code que j'ai rédigé pour le moment.
    Le problème c'est que le code ne se déclenche pas. Pouvez-vous m'éclaircir sur mes erreurs?
    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column >= 3 And Target.Column <= 33 And Target.Row >= 63 And Target.Row <= 102 Then Reservation
    End Sub
     
     
    Sub Reservation()
    If Target < 0 Then MsgBox "Réservation impossible.La ressource n'est pas disponible." Else: If Target > 0 Then MsgBox "Réservation possible. Pensez à enregistrer."
     
    End Sub

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 764
    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 : 12 764
    Points : 28 622
    Points
    28 622
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Le problème c'est que le code ne se déclenche pas. Pouvez-vous m'éclaircir sur mes erreurs?
    Tu es certaine que le code ne se déclenche pas ?
    As-tu mis un arrêt (F9) à la ligne 2 ou 3 de ta procédure ?

    Sauf erreur de ma part, ton problème vient de ta deuxième procédure nommée Reservation qui ne connaît pas la variable Target.
    Cela t'aurais sauté aux yeux directement si tu avais placé en tête de module la ligne Option Explicit
    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

  3. #3
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

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

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Bonjour et bienvenue au forum !
    Quand on veut appeler une fonction, normalement on utilise Call.
    De plus, tu ne peux pas utiliser Target dans une méthode. Target est une ARGUMENT de Worksheet_Change, il faut que tu mettes une argument aussi à Reservation :

    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 Target.Column >= 3 And Target.Column <= 33 And Target.Row >= 63 And Target.Row <= 102 Then Call Reservation(Target)
    End Sub
     
    Sub Reservation(maCellule As Range)
    If maCellule.Value < 0 Then 
        MsgBox "Réservation impossible.La ressource n'est pas disponible." 
    Else
        If maCellule.Value > 0 Then MsgBox "Réservation possible. Pensez à enregistrer."
    End If
    End Sub

  4. #4
    Nouveau Candidat au Club
    Femme Profil pro
    Directrice des finances
    Inscrit en
    Juin 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Directrice des finances
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2017
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour à tous, j'ai essayé de faire des changements sur ma formule mais même avec le code suivant ça ne se déclenche pas.
    Est-ce que le problème vient du fait que la modification de la cellule vient du formule et non d'une saisie?
    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column >= 3 And Target.Column <= 33 And Target.Row >= 63 And Target.Row <= 102 Then MsgBox "Réservation impossible. La ressource n'est pas disponible."
    End Sub

  5. #5
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

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

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Est-ce que le problème vient du fait que la modification de la cellule vient du formule et non d'une saisie?
    Oui, la modification d'une cellule par formule ne délenche pas Worksheet_Change.
    Il faut que tu trouves un autre evenement pour déclencher ta macro.

  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,

    ou utiliser l'événement Change sur les cellules saisies qui impactent le résultat de ta formule.
    Par exemple si tu as en B2 :
    =A2*3+D2
    c'est la saisie en A2 et D2 qui t'intéressent et que tu dois superviser.
    eric

  7. #7
    Nouveau Candidat au Club
    Femme Profil pro
    Directrice des finances
    Inscrit en
    Juin 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Directrice des finances
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2017
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour à tous,

    J'ai modifié ma macro en enlevant l'évènement private sub worksheet_change qui ne fonctionnait pas pour avoir la macro suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Valeursnegatives()
    Dim c As Range
    For Each c In Range("C63:AG102")
    If c <> "" And c < 0 Then MsgBox "Réservation impossible. La ressource n'est pas disponible." Else: If c <> "" And c > 0 Then MsgBox "Réservation possible. Pensez à enregistrer."
    Next c
    End Sub
    Avec ce code ça fonctionne presque! J'aimerais que la macro soit testée seulement sur les cellules qui viennent d'être modifiées dans C63:AG102 et pas l'ensemble à chaque fois.
    Auriez-vous une solution?

    Merci

  8. #8
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

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

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Comment sont modifiées les cellules ? Par formule ? Comme dit précédemment, la modification d'une solution par formule n'est pas repérée.
    Je sais pas trop quel est ton but avec ta macro, mais au lieu de faire une macro qui renvoie un message, tu peux peut-être utiliser une mise en forme conditionnelle :
    • Rouge si cellule <> "" et cellule < 0
    • Vert si cellule <> "" et cellule > 0

Discussions similaires

  1. Réponses: 3
    Dernier message: 30/03/2015, 11h48
  2. [XL-2010] Private Sub Worksheet_Change qui boucle
    Par jauffray.delteil dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/04/2013, 15h47
  3. [Toutes versions] Private Sub Worksheet_Change(ByVal Target As Range) et protection
    Par Giantrick dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/01/2013, 10h21
  4. probleme avec Private Sub Worksheet_Change
    Par tibiscuit dans le forum Macros et VBA Excel
    Réponses: 24
    Dernier message: 27/06/2011, 01h21
  5. [XL-2007] petit soucis avec un Private Sub Worksheet_Change(ByVal Target As Range)
    Par dris974 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 28/03/2011, 12h57

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