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 :

mise à jour lié à une modification de cellule [Toutes versions]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 304
    Par défaut
    Bonjour à tous,


    J'ai un tableau avec plusieurs colonnes effectuant des calculs qui peuvent se croiser, afin d'éviter le croissement de ces données je fige les données avant de modifier les suivantes pour éviter les références circulaires.

    Dans ce tableau j'ai également plusieurs lignes, mon traitement est fait par lignes

    Ce que je veux faire, c'est que lorsque je modifie la cellule B2 de mon tableau, je veux que des formules se mettent à jour dans les cellules B4 et B5 puis se fige (copier-collage spécial). Idem pour les autres lignes, je modifie C2 et C4 et B5 se mettent à jour, etc ....

    J'ai trouvé la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub Worksheet_Change(ByVal Target As Range)
    qui me semble approprié pour ce que je veux faire, mais je ne sais pas comment géré le fait que je peux modifier uniquement la celluel C2, F2, Z2 et laisser les autres en l'état.

    Merci pour votre aide,

    Meumeu73.1

    J'ai trouvé cela sur un autre forum et ça à l'air de me convenir.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    a = Target.Address(0, 0)
     
    If Target.Column <> 2 Then ' 2 = colonne
    Exit Sub
    End If
     
    Range(a).Offset(0, -1).Value = Target * 5
     
    End Sub

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    lorsque je modifie la cellule B2 de mon tableau, je veux que des formules se mettent à jour dans les cellules B4 et B5 puis se fige
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 2 Then
        Application.EnableEvents = False
        Range(Target.Offset(0, 2), Target.Offset(0, 3)).Value = Range(Target.Offset(0, 2), Target.Offset(0, 3)).Value
        Application.EnableEvents = True
    End If
    End Sub

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 304
    Par défaut
    Re-bonjour,

    J'arrive à ce résultat, mais j'ai un problème lorsque je change la colonne B, il me recalcule la colonne D puis B,..... ça boucle, alors que le but c'est de changer uniquement par rapport à la cellule qui vient d'être modifier. Y a t il une solution ? merci pour votre aide.

    Bien sur c'est juste un extrait de l'original.

    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
    21
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    a = Target.Address(0, 0)
     
    If Target.Column = 2 Then ' 2 = colonne
     
    Range(a).Offset(0, 2).Value = Target * 5
     
    Exit Sub
    End If
     
    b = Target.Address(0, 0)
     
    If Target.Column = 4 Then ' 2 = colonne
     
    Range(b).Offset(0, -2).Value = Target * 8
     
    Exit Sub
    End If
     
    End Sub

  4. #4
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count = 1 Then
        Application.EnableEvents = False
        On Error Resume Next
        If Target.Column = 2 Then
            Target.Offset(0, 2).Value = Target * 5
        ElseIf Target.Column = 4 Then
            Target.Offset(0, -2).Value = Target * 8
        End If
        Application.EnableEvents = True
    End If
    End Sub

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 304
    Par défaut
    Parfait Merci

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

Discussions similaires

  1. [XL-2007] Mise à jour d'une cellule référente d'un fichier
    Par agrimault dans le forum Excel
    Réponses: 6
    Dernier message: 31/01/2011, 16h57
  2. Réponses: 1
    Dernier message: 04/12/2008, 00h42
  3. Réponses: 3
    Dernier message: 06/12/2007, 11h09
  4. Lancement d'une macro après mise à jour d'une cellule
    Par Mukade dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 17/10/2007, 11h52
  5. Probleme de mise à jour et de modification d'une base
    Par flambo88 dans le forum Requêtes
    Réponses: 17
    Dernier message: 07/12/2005, 14h27

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