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 :

Is nothing et/ou mise à jour de cellules selon critères [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    419
    419 est déconnecté
    Membre confirmé
    Homme Profil pro
    Portage Salarial
    Inscrit en
    Mars 2005
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Portage Salarial
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2005
    Messages : 82
    Par défaut Is nothing et/ou mise à jour de cellules selon critères
    Bonsoir,

    Je souffre pour modifier le contenu de 2 cellules (H11 et i11) en fonction d'autres cellules dont M19, M20 ou M21.
    Ca marche à moitié.. et ca bug à la fin

    En version parlée sans code :
    Par défaut j'ai H11 qui affiche "PROVISION" et i11 prend la valeur de M19.
    Mais si M20 ou M21 est modifié (valeur supérieure à 0) alors H11 est modifié et i11 prend la valeur de M20 ou M21 (sachant que M21 est prioritaire sur M20 donc si M20 et M21 sont <>0, on retient la valeur de M21).
    Et que lorsque les cellules M20 ou M21 sont remises à 0, H11 et i11 reviennent à leur valeur par défaut.

    En mode excel, la cellule i11 avec la formule suivante :
    =SI(M21<>0;M21;SI(M20<>0;M20;M19))

    Avec le 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
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Target, Range("m14:m15")) Is Nothing Then 'ces cellules déterminent la valeur de la cellule M19
     
    Range("h11").Value = "PROVISION"
    Range("i11").Value = Range("m19").Value
    Else
    If Not Application.Intersect(Target, Range("m20:m21")) Is Nothing Then
     
    If Range("m21").Value <> 0 Then
        Range("h11").Value = "MONTANT NON AFFECTé"
        Range("i11").Value = Range("m21").Value
    Else
        If Range("m20").Value <> 0 Then
            Range("h11").Value = "PROVISION"
            Range("i11").Value = Range("m20").Value
    Else
    Range("h11").Value = "PROVISION"
    Range("i11").Value = Range("m19").Value
     
    End If
    End If
    End If
    End If
     
    End Sub
    Mon souci est que ca marche .. qu'une fois.. Si je change plusieurs fois les données de M20 ou M21, j'ai une erreur 1004 sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("h11").Value = "MONTANT NON AFFECTé"
    ou sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("h11").Value = "PROVISION"
    J'imagine qu'il doit falloir faire une boucle mais je bloque.
    Merci pour votre retour.

  2. #2
    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
    Le code que tu montres-là (tel qu'il est) ne saurait, lui, provoquer seul une erreur 1004.
    Ton erreur est à rechercher ailleurs si ce code est un copié collé exact de ce que tu as écrit.

    Es-tu certain de ce que l'erreur ne soit pas le résultat d'une formule qui, ailleurs, utilise l'une des cellules modifiées par ton code ?

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Quand tu modifie des valeurs de cellules dans un évènement "Change", suspends les évènements sinon, la proc est r'appelée inutilement :
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    Private Sub Worksheet_Change(ByVal Target As Range)
     
        If Not Application.Intersect(Target, Range("m14:m15")) Is Nothing Then 'ces cellules déterminent la valeur de la cellule M19
     
            Application.EnableEvents = False
     
            Range("h11").Value = "PROVISION"
            Range("i11").Value = Range("m19").Value
     
            Application.EnableEvents = True
     
        Else
     
            If Not Application.Intersect(Target, Range("m20:m21")) Is Nothing Then
     
                Application.EnableEvents = False
     
                If Range("m21").Value <> 0 Then
     
                    Range("h11").Value = "MONTANT NON AFFECTé"
                    Range("i11").Value = Range("m21").Value
     
                Else
     
                    If Range("m20").Value <> 0 Then
     
                        Range("h11").Value = "PROVISION"
                        Range("i11").Value = Range("m20").Value
     
                    Else
     
                        Range("h11").Value = "PROVISION"
                        Range("i11").Value = Range("m19").Value
     
                    End If
     
                End If
     
                Application.EnableEvents = True
     
            End If
     
        End If
     
    End Sub

  4. #4
    419
    419 est déconnecté
    Membre confirmé
    Homme Profil pro
    Portage Salarial
    Inscrit en
    Mars 2005
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Portage Salarial
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2005
    Messages : 82
    Par défaut
    Bonjour,
    merci pour les retours.
    La modification de Theuze marche. je n'ai plus de soucis et obtiens ce que je veux.

    Mais je ne comprends pas .
    Je vois l'idée mais je ne la suis pas totalement.

    En essayant de comprendre, je ne vois pas pourquoi il faut bloquer la procédure évènementielle après le premier Is Nothing puisque c'est le début de la procédure ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    If Not Application.Intersect(Target, Range("m14:m15")) Is Nothing Then 'ces cellules déterminent la valeur de la cellule M19
     
        Application.EnableEvents = False
     
        Range("h11").Value = "PROVISION"
        Range("i11").Value = Range("m19").Value
     
        Application.EnableEvents = True

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 04/08/2010, 12h48
  2. Réponses: 2
    Dernier message: 18/12/2008, 12h00
  3. Réponses: 2
    Dernier message: 21/08/2008, 17h17
  4. Réponses: 5
    Dernier message: 08/03/2007, 10h13
  5. [VBA-E]Mise à jour de cellule alimentée par une liste
    Par moritan dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/01/2007, 06h11

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