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 :

Marqueur de modification [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 231
    Par défaut Marqueur de modification
    Bonjour.

    Dans un tableau permettant de compter les heures d'absence, je souhaiterais qu'à chaque modification sur une ligne, un marqueur m'indique qu'une modification à eu lieu.

    J'ai déjà mis en place un bout de code permettant de faire ceci :

    Nom : Capture2.PNG
Affichages : 123
Taille : 22,2 Ko

    Lors d'une modification dans l'une des 4 cellules sélectionnées, une étoile vient s'ajouter au bout du format dans la colonne K:K.

    Nom : Capture3.PNG
Affichages : 117
Taille : 23,4 Ko

    Le code présent dans l’événement Worksheet_Change :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If Not Application.Intersect(Target, Range("H3:H359, K3:K359")) Is Nothing Then
    ActiveSheet.Cells(ActiveCell.Row - 1, 11).NumberFormat = "[h]""h ""mm""mn ""ss""sec *"""
    ElseIf Not Application.Intersect(Target, Range("I3:J359")) Is Nothing Then
    ActiveSheet.Cells(ActiveCell.Row, 11).NumberFormat = "[h]""h ""mm""mn ""ss""sec *"""
    End If
    Pourquoi avoir décalé de -1 la ligne active lors du changement de valeur dans les colonnes H et K ?
    Les colonnes I et J sont des choix par liste déroulante, les colonnes H et K sont des valeurs saisies. Lorsque je valide le choix de la cellule J4, la ligne active est bien la 4, mais lorsque je valide (par la touche entrée) la valeur saisie dans la cellule H4, la ligne active est la ligne 5 car excel saute une ligne, je dois donc déclarer de -1 ce numéro de ligne pour éviter que le format de la cellule K5 ne change par erreur.

    Maintenant imaginons que l'opérateur saisisse une valeur en H4, puis pour valider, utilise la touche droite de son clavier, la ligne taggué sera alors celle au dessus, ce qui est une erreur.

    Ma question : Comment puis-je faire pour éviter ce problème ?
    J'ai bien pensé utiliser la fonction MoveAfterReturn = False à l'ouverture du classeur, mais elle semble inefficace...

    Merci d'avance pour votre aide.

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

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

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour,
    Tu n'utilises pas correctement la cellule Target. Dans la méthode Worksheet_Change, la cellule Target est la cellule qui a été modifiée. Tu ne dois donc pas travailler à partir de ActiveCell, mais Target! Tu l'utilises bien pour la condition, mais ensuite, il faut aussi l'utiliser pour tes actions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Not Application.Intersect(Target, Range("H3:H359, K3:K359, I3:J359")) Is Nothing Then
        Cells(Target.Row, 11).NumberFormat = "[h]""h ""mm""mn ""ss""sec *"""
    End If
    Pas besoin d'ActiveSheet non plus. En utilisant la syntaxe Cells(ligne, col) ou Range("A1") sans préciser la feuille, tu travailles par défaut sur la feuille active.

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 231
    Par défaut
    Un grand merci riaolle, en effet, je comprends mal le principe de target, je vais me renseigner d'avantage, ça pourrait m'aider !

    Excellente journée.

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour à tous
    L'évènement Change intervient systématiquement dès que l'on saisit dans la cellule.
    Son nom (Change) est un faux ami, car il ne constate pas réellement que la nouvelle valeur est différente de l'ancienne. Il constate simplement que l'on a saisi !
    Si l'on s'en contente -->> on se retrouvera avec une cellule apparemment modifiée (et donc l'astérisque) y compris si l'utilisateur, ayant commencé à intervenir dans la cellule, se ravise et remet exactement l'ancienne valeur
    La seule manière de pallier cet inconvénient est :
    - de relever la valeur actuelle au selectionChange
    - de la comparer avec la nouvelle valeur au Change
    - de ne "décréter" qu'il y a eu réellement modification que si ces deux valeurs sont différentes.
    Voilà.

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 231
    Par défaut
    Merci pour cette précision unparia, en effet l'astérisque apparaît si la même valeur est saisie.

    Cela n'est pas dérangent dans mon cas, mon vrai besoin étant de pouvoir repérer les cellules ayant été "touchées".

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

Discussions similaires

  1. Erreur lors de modification d'une table
    Par seb.49 dans le forum SQL
    Réponses: 11
    Dernier message: 13/01/2003, 17h16
  2. [VB6] modification de menu
    Par rikko23 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 27/11/2002, 21h30
  3. [] Datagrid vide après modification des propriétés
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 20/09/2002, 16h37
  4. Modification de l'évènement OnClick
    Par MrJéjé dans le forum C++Builder
    Réponses: 9
    Dernier message: 22/08/2002, 12h52
  5. Réponses: 11
    Dernier message: 23/07/2002, 14h33

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