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 qui boucle [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Spécialiste en calculs mécaniques
    Inscrit en
    Janvier 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en calculs mécaniques
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2012
    Messages : 27
    Par défaut Private Sub Worksheet_Change qui boucle
    bonjour,

    je viens de taper le code ci-dessous, mais quand je change la valeur de "G18" la macro boucle et ferme mon classeur Excel.

    qu'ais je mal saisi ? sachant que ce code fonctionne très bien en "Private Sub Worksheet_BeforeDoubleClick"

    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
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    If Target = Range("G18") Then
     
    Dim chimney As String
     
    chimney = 0
     
    axeOY:
        chimney = chimney + 1
        ActiveSheet.Range("D25").FormulaR1C1 = chimney
     
        If ActiveSheet.Range("G25").Value < ActiveSheet.Range("G12").Value Then GoTo axeOY
     
    chimney = chimney - 1
    ActiveSheet.Range("D25").FormulaR1C1 = chimney
     
    End If
     
    End Sub
    d'avance merci

  2. #2
    Expert éminent
    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
    Par défaut
    Bonjour.

    Supprimer la ligne n°5 car c'est une aberration vu la suite du code, sinon changer au moins le type de la variable !
    Mieux vaut ne pas déclarer un type de variable qu'en déclarer un mauvais …


    Il y a aussi une grave erreur dans le test de la ligne 3 pouvant être complété ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Target.Value = Range("G18").Value Then
    car un objet Range sans propriété correspond bien en l'occurence à sa valeur et non pas à son adresse !
    Donc s'il est bien question de comparer l'adresse de la cellule modifiée, remplacer si dessus chaque .Value par .Address
    Sinon n'importe quelle cellule modifiée ayant la même valeur que G18 passera le test !


    Concernant la problématique exposée, c'est juste une classique erreur de débutant :

    l'évènement Worksheet_Change est déclenché dès qu'une cellule est modifiée; hors dans le code même de cet évènement
    d'autres cellules sont aussi modifiées provoquant donc une NES (1) puis la fermeture d'Excel par saturation de mémoire …

    La solution consiste à désactiver les évènements par exemple en ligne n°6 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.EnableEvents = False
    sans oublier de les remettre à True avant la sortie du bloc If, par exemple en ligne n°17 …


    (1) : Never Ending Story (une histoire sans fin …)
    _______________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

  3. #3
    Membre averti
    Homme Profil pro
    Spécialiste en calculs mécaniques
    Inscrit en
    Janvier 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en calculs mécaniques
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2012
    Messages : 27
    Par défaut
    merci !

    j'ai juste eu à changer la ligne 3 comme indiqué
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Target.Address = Range("G18").Address Then
    j'en ai profité pour suivre ton conseil en retirant la déclaration de variable.

  4. #4
    Expert éminent
    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
    Par défaut

    Exact !

    Mais désactiver les évènements fait aussi gagner du temps en empêchant les appels récursifs déclenchés
    lors des modifications des autres cellules au sein même du code de l'évènement …

    Pour preuve, sans désactiver les évènements, mettre un point d'arrêt sur la ligne n°3 puis modifier la cellule G18
    puis suivre le code en mode pas à pas via la touche F8, c'est édifiant !

    ________________________________________________
    Quelle époque terrible que celle où des idiots dirigent des aveugles. (Shakespeare)

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

Discussions similaires

  1. [XL-2007] Ajouter une "Target" à Private Sub Worksheet_Change(ByVal Target As Range)
    Par 'OTM' dans le forum Macros et VBA Excel
    Réponses: 36
    Dernier message: 19/12/2014, 14h21
  2. [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
  3. probleme avec Private Sub Worksheet_Change
    Par tibiscuit dans le forum Macros et VBA Excel
    Réponses: 24
    Dernier message: 27/06/2011, 01h21
  4. [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