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 :

Action suite changement valeur cellule [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 2
    Par défaut Action suite changement valeur cellule
    Bonjour,

    Dans une feuille de calcul, il y a une cellule destinée au total de l'année, et 12 cellules destinées au détail mensuel (quantité).
    Mon objectif est de pouvoir saisir le total ou le détail, si saisie du total, répartition automatique sur les 12 mois, si saisie d'un mois, incrémentation du total. J'arrive à faire l'un ou l'autre avec un private sub Worksheet_Change(ByVal Target As Range). Mais les deux en même temps... ça tourne en rond, le cas 1 faisant changer les valeurs du cas 2 et vice versa.
    Quelqu'un a-t-il une solution? Merci par avance.
    Cordialement,

    FredExc

    Mon code:

    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
    22
    23
    24
    25
    26
    Private Sub Worksheet_Change(ByVal Target As Range)
     
        If Application.Intersect(Target, Range("sai_qte")) Is Nothing Then
     
            Else        
                If Target.Column = 16 Then
                    Range("Q" & Target.Row).Value = Target.Value * Range("Q10").Value / Range("P10").Value
                    Range("R" & Target.Row).Value = Target.Value * Range("R10").Value / Range("P10").Value
                    Range("S" & Target.Row).Value = Target.Value * Range("S10").Value / Range("P10").Value
                    Range("T" & Target.Row).Value = Target.Value * Range("T10").Value / Range("P10").Value
                    Range("U" & Target.Row).Value = Target.Value * Range("U10").Value / Range("P10").Value
                    Range("V" & Target.Row).Value = Target.Value * Range("V10").Value / Range("P10").Value
                    Range("W" & Target.Row).Value = Target.Value * Range("W10").Value / Range("P10").Value
                    Range("X" & Target.Row).Value = Target.Value * Range("X10").Value / Range("P10").Value
                    Range("Y" & Target.Row).Value = Target.Value * Range("Y10").Value / Range("P10").Value
                    Range("Z" & Target.Row).Value = Target.Value * Range("Z10").Value / Range("P10").Value
                    Range("AA" & Target.Row).Value = Target.Value * Range("AA10").Value / Range("P10").Value
                    Range("AB" & Target.Row).Value = Target.Value * Range("AB10").Value / Range("P10").Value
                    Else
                        If Target.Column > 16 And Target.Column <= 28 Then
                        Range("P" & Target.Row).Value = Range("Q" & Target.Row).Value + Range("R" & Target.Row).Value + Range("S" & Target.Row).Value + Range("T" & Target.Row).Value + Range("U" & Target.Row).Value + Range("V" & Target.Row).Value + Range("W" & Target.Row).Value + Range("X" & Target.Row).Value + Range("Y" & Target.Row).Value + Range("Z" & Target.Row).Value + Range("AA" & Target.Row).Value + Range("AB" & Target.Row).Value
                        End If
                End If
     
        End If
    End Sub

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur
    Inscrit en
    Janvier 2010
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 272
    Par défaut
    Salut,

    Une remarque de forme :
    Mets ton code entre balises CODE, ce sera déjà plus lisible Peut-être peux-tu aussi améliorer ton code en passant par une boucle for (avec la notation Cell plutôt que Range pour les indices de colonne du coup)?

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

    Lorsqu’un changement est détecté, la procédure événementielle est lancée.
    Le problème, c’est qu’elle est également lancée à chaque changement réalisé par elle même.
    Tu dois donc désactiver l’événement afin d’éviter de tourner en rond.
    Cette désactivation est effectuée avec Application.EnableEvents = False.
    Il suffit ensuite de réactiver l’événement en fin de procédure (ou en cas d’erreur).
    Rq : j’ai utilisé l’instruction Select case afin de gagner en clarté.
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    Private Sub Worksheet_Change(ByVal Target As Range)
        On Error GoTo GestionErreur
        If Not Application.Intersect(Target, Range("sai_qte")) Is Nothing Then
            Application.EnableEvents = False
            Select Case Target.Column
            Case 16
                Range("Q" & Target.Row).Value = Target.Value * Range("Q10").Value / Range("P10").Value
                Range("R" & Target.Row).Value = Target.Value * Range("R10").Value / Range("P10").Value
                Range("S" & Target.Row).Value = Target.Value * Range("S10").Value / Range("P10").Value
                Range("T" & Target.Row).Value = Target.Value * Range("T10").Value / Range("P10").Value
                Range("U" & Target.Row).Value = Target.Value * Range("U10").Value / Range("P10").Value
                Range("V" & Target.Row).Value = Target.Value * Range("V10").Value / Range("P10").Value
                Range("W" & Target.Row).Value = Target.Value * Range("W10").Value / Range("P10").Value
                Range("X" & Target.Row).Value = Target.Value * Range("X10").Value / Range("P10").Value
                Range("Y" & Target.Row).Value = Target.Value * Range("Y10").Value / Range("P10").Value
                Range("Z" & Target.Row).Value = Target.Value * Range("Z10").Value / Range("P10").Value
                Range("AA" & Target.Row).Value = Target.Value * Range("AA10").Value / Range("P10").Value
                Range("AB" & Target.Row).Value = Target.Value * Range("AB10").Value / Range("P10").Value
            Case 17 To 28
                Range("P" & Target.Row).Value = Range("Q" & Target.Row).Value + Range("R" & Target.Row).Value _
                + Range("S" & Target.Row).Value + Range("T" & Target.Row).Value + Range("U" & Target.Row).Value _
                + Range("V" & Target.Row).Value + Range("W" & Target.Row).Value + Range("X" & Target.Row).Value _
                + Range("Y" & Target.Row).Value + Range("Z" & Target.Row).Value + Range("AA" & Target.Row).Value _
                + Range("AB" & Target.Row).Value
            End Select
            Application.EnableEvents = True
        End If
        Exit Sub
    GestionErreur:
        Application.EnableEvents = True
    End Sub
    Cordialement.

  4. #4
    Nouveau candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 2
    Par défaut
    Merci beaucoup gFZT82
    Merci aussi d0n32 pour la précision sur le post de code, je ne connaissais pas. Quant au for et cell, il faut que je m'y mette oui
    Bonne soirée à tous!

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

Discussions similaires

  1. Changement valeur cellule non encore validée
    Par cazadeis dans le forum VB.NET
    Réponses: 2
    Dernier message: 21/10/2010, 10h19
  2. Macro sur changement valeur cellule?
    Par jojo86 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 05/02/2010, 07h00
  3. lancer macro si changement valeur cellule + condition
    Par tikam75007 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 07/11/2009, 12h25
  4. exécution macro sur changement valeur cellule, juste un truc qui cloche.
    Par laatysha dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/05/2008, 09h00
  5. boucle changement valeur cellule
    Par les4c77 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 07/10/2007, 13h33

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