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 :

Procédure Worksheet-change en VB sous excel


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 32
    Par défaut Procédure Worksheet-change en VB sous excel
    Bonjour à tous

    j'aimerais savoir si la procédure worksheet_change peut s'appliquer uniquement sur une plage de cellule déterminée et non sur chaque cellule de la feuille

    les changements sont susceptibles d'être effectués sur la plage by2 à by235 et non ailleurs

    Merci pour vos réponses

  2. #2
    Membre chevronné
    Inscrit en
    Février 2008
    Messages
    267
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 267
    Par défaut
    Bonjour,

    Comme il s'agit de VBA, je pense que tu n'es pas sur le bon forum pour poser ta question mais je vais y répondre tout de même.

    Utilise ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Target, Range("by2:by235")) Is Nothing Then
    ......ton action....
    End Sub
    Amicalement

    Dan

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut
    La macro se lance sur tout changement sur la globalité de la feuille et on ne peut pas le modifier, sauf en refaisant Excel.

    Mais tu peux ne traiter qu'une partie de la feuille
    if intersect (traget, range("BY2:BY235") is nothing then exit sub
    si aucune cellule modifiée (target) n'appartient à la plage 'BY2:BY235 arrêter la macro (sortir)

    C'est le plus simple, mais ça ne prend pas compte correctement des modifications mutiples, comme une modification de la plage A2:By2 (effacement des valeurs, coller) une autre solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Plage_T As Range
    If Intersect(Target, Range("By2:BY235")) Is Nothing Then Exit Sub
    Set Plage_T = Intersect(Target, Range("By2:BY235"))
     
    'traitement Plage_T
     
    End Sub
    Dans cette macro, le traitement ne doit plus se faire sur Target, mais sur Plage_T qui ne contient que les cellules de BY2:BY235 qui ont été modifiées
    A+

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 32
    Par défaut
    Merci les gars! je vous tiens au courant et bravo pour votre rapidité, j'apprécie

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 32
    Par défaut
    En fait, je veux travailler sur cette plage de cellule car si par exemple, BY14 change, la cellule d'à côté doit être modifée, (BZ14)

    J'ai crée une fonction qui fonctionne et qui boucle sur toute la plage BY2 à BY235
    j'aimerais éviter la boucle à savoir que dès lors qu'il y a un changement sur la cellule BY233 par exemple, la cellule BZ233 doit être modifée

    j'ai pensé à target.address par exemple mais bon...

  6. #6
    Membre chevronné
    Inscrit en
    Février 2008
    Messages
    267
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 267
    Par défaut
    re,

    Essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Target, Range("by2:by235")) Is Nothing Then
    Target.Offset(0, 1) = .....
    End If
    End Sub
    Remplace les .... par ce que tu dois mettre dans la cellule BZ

    Amicalement

    Dan

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 32
    Par défaut
    ok merci, je vais voir mais quel est le rôle de la propriété Offset exactement? le décalage d'un cellule? de son contenu?

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/03/2013, 17h26
  2. Réponses: 0
    Dernier message: 29/12/2010, 19h17
  3. [VBA-E] Sélection feuilles sous excel
    Par Mystic eyes dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/02/2004, 13h27
  4. Sauvegarde problématique sous excel par OLE
    Par ulysse66x dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 16/04/2003, 21h23

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