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 :

Souci avec WorkSheet_Change


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2013
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2013
    Messages : 5
    Par défaut Souci avec WorkSheet_Change
    Bonjour,

    Voila, je suis Novice en excel VBA, pour un but d'apprentissage, je réalise une gestion de stock avec entrées et sorties.

    Les entrées et sorties sont sur des feuilles spécifiques, en plus de la feuille stock et une autre intitulée "Commande", où s'ajouteront automatiquement des produits quand le stock final sera ou deviendra inférieur au stock Minimum.

    Si par exemple je modifie les valeurs des cellules cibles manuellement (2 et 4), la Macro marche, par contre dans mon cas la cellule cible (2) est modifiée automatiquement selon une formule (après modif d'autre cellules), et dans ce cas la Macro ne fonctionne pas.


    cela concerne la Worksheet_Change (au niveau de la feuille stock):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    If Target.Column <> 2 Then Exit Sub
    If Target.Value >= Cells(Target.Row, 4).Value Then Exit Sub
    derlig = Sheets("Commande").Range("a65536").End(xlUp).Row + 1
    Sheets("Commande").Cells(derlig, 1).Value = Cells(Target.Row, 1).Value
    Sheets("Commande").Cells(derlig, 2).Value = Date
     
    End Sub
    Une solution?

    Merci d'avance.

  2. #2
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    La fonction "WorkSheet_Change" s'applique uniquement lors du changement de la cellule que tu cibles manuellement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Target.Column <> 2 Then Exit Sub
    Cette ligne spécifie que si n'importe quelles cellules autres que celles comprises dans ta colonne B sont modifiées alors, rien n'est fait.

    Il y a donc plusieurs solutions :
    - Soit tu gardes une restriction, auquel cas tu dois ajouter toutes les cellules qui sont succeptibles de changer avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Target.Column <> 2 or 4 or 6 or 8 Then Exit Sub
    Exemple : Si ta formule dans la colonne B fait référence à une cellule dans ta colonne D, alors, lorsque tu changes cette valeur dans ta colonne D, avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Target.Column <> 2 or 4 Then Exit Sub
    tes cellules seront recalculées.
    - Autre solution, tu supprimes toutes restrictions, c'est-à-dire enlever la condition, tout simplement.

    Cependant, dans ta formule, tu as :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(Target.Row, 1).Value
    Cela signifie que si tu changes une valeur dans ta colonne D, c'est la valeur de cette ligne en colonne A qui sera ciblée à cet endroit. Si c'est ce que tu souhaites alors prends simplement les solutions proposées au dessus.
    (C'était juste un avertissement. ^^)

    En espérant t'avoir aidé.

  3. #3
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Bonjour,

    L’évènement Change de la feuille se déclenche lors d'une modification "physique" d'une cellule (manuellement ou à l'aide d'une macro).
    Une formule modifie l'affichage de la valeur d'une cellule, mais ne provoque pas d’évènement.

  4. #4
    Futur Membre du Club
    Inscrit en
    Janvier 2013
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2013
    Messages : 5
    Par défaut
    Donc en gros je dois utiliser une macro pour modifier le contenu de la cellule en question et non une fonction, pour que cette dernière soit reconnue.

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

    Tu peux t’en sortir en utilisant l’évènement CALCULATE qui se produit après tout recalcul de la feuille. Cet évènement te permet de détecter des changements de valeur par calcul dans des cellules contenant des formules (ce que ne fait pas l’évènement CHANGE).
    Le souci, c’est que Calculate ne dispose pas de paramètre Target. Tu ne peux donc pas déterminer directement quelle est la cellule qui a été modifiée. Il faut passer par une variable mémorisant le contenu antérieur de la cellule surveillée.

    Dans l’exemple joint, la valeur dans Feuil2!C2 est reportée dans Feuil1!B2 qui contient la formule =Feuil2!C2.
    Avec la procédure Calculate, on vérifie si la valeur de Feuil1!B2 a été modifiée.
    On utilise pour cela la variable globale Memo qui a été initialisée à l’ouverture du classeur. Cette variable est déclarée dans un module standard.
    Fichiers attachés Fichiers attachés

  6. #6
    Futur Membre du Club
    Inscrit en
    Janvier 2013
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2013
    Messages : 5
    Par défaut
    Bonjour

    Je bloque encore, j'ai abandonné la worsheet_change, maintenant je veux que la macro s’exécute après appuie d'un bouton.

    Si la case "Remarque" affiche "commande" alors à la sélection du bouton "commande" tous les produit à commander s'afficheront sur la feuille "à commander".

    Un exemple en Pièces jointe.

    Merci d'avance.
    Fichiers attachés Fichiers attachés

  7. #7
    Membre éclairé
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Analyste Programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 32
    Par défaut
    Bonjour tout le monde;

    Si tu as déjà mis le code de ta macro dans un module, il te reste juste à passer en mode création, tu clique droit sur ton bouton et normalement tu à la possibilité d'affecter une macro à ton bouton. Sinon c'est sur l'événement nomDeTonBouton_click dans la feuille correspondante.

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

Discussions similaires

  1. [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
  2. quelques soucis avec word 2000
    Par ramchou dans le forum Word
    Réponses: 3
    Dernier message: 06/09/2004, 18h13
  3. souci avec un algorithme
    Par slider16 dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 22/03/2004, 17h17
  4. [DEBUTANT] petits soucis avec un prgm de chat
    Par LechucK dans le forum MFC
    Réponses: 8
    Dernier message: 19/01/2004, 16h52
  5. Réponses: 4
    Dernier message: 16/02/2003, 12h16

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