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 :

Macro évènementielle valeur de la cellule donnée par une formule


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut Macro évènementielle valeur de la cellule donnée par une formule
    Bonjour,
    Je cherche à lancer une macro lorsqu'une cellule de la colonne I:I affiche "DOUBLON", cette valeur est donnée par une formule.

    Pour l'instant, rien ne se passe...

    Les code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, [I5:I1000]) Is Nothing Then
    Exit Sub 'rien faire
    Else 'c'est la bonne cellule
    'et tu peux rajouter un test sur le contenu
     
    If Target.Value = "DOUBLON" Then
    Call MEFCDOUBLONS
    Else
    Exit Sub
    End If
    End If
    End Sub
    La formule:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(ET(ESTTEXTE(B5);ET(SOMMEPROD((B5=$B$4:$B$6)*1)>1;SOMMEPROD((C5=$C$4:$C$6)*1)>1));"DOUBLON";"")
    Question subsidiaire, comment enchaîner 2 codes évènementielles sur la même feuille?
    Dans le cas présent, une deuxième macro se déclencherait à la modification d'une cellule d'une autre colonne, avec une autre valeur, dans la même feuille.

    Si quelqu'un peut me donner un coup de main, merci beaucoup

  2. #2
    Membre confirmé
    Inscrit en
    Janvier 2004
    Messages
    173
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 173
    Par défaut
    Une idée comme ça à tout hasard.

    Plutôt que d'utiliser une imbrication de fonctions Excel, tu peux faire une fonction personnelle (http://silkyroad.developpez.com/vba/fonctions/) qui va renvoyer le même résultat. Ensuite tu remplaces ta formule compliquée par ta fonction personnelle.

    Du coup, tu n'as plus à utiliser d'argument. Avant de renvoyer ton résultat dans ta fonction personnelle, tu appelles la sub que tu souhaites appeler (Call MEFCDOUBLONS). Dans l'histoire, il n'y a plus d’événement.

  3. #3
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Première remarque : dans une structure If, les Else ne sont pas obligatoires.
    Et si tu n'as qu'une seule action dans le If, tu peux la même sur la même ligne ce qui te permet aussi l'économie du End If.
    Ton code peut donc être simplifié ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Intersect(Target, [I5:I1000]) Is Nothing Then Exit Sub   ' rien faire
        If Target.Value = "DOUBLON" Then Call MEFCDOUBLONS
    End Sub
    La formule:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(ET(ESTTEXTE(B5);ET(SOMMEPROD((B5=$B$4:$B$6)*1)>1;SOMMEPROD((C5=$C$4:$C$6)*1)>1));"DOUBLON";"")
    ????
    Quel est le rapport entre la formule et la macro ?

    Question subsidiaire, comment enchaîner 2 codes évènementielles sur la même feuille?
    Dans le cas présent, une deuxième macro se déclencherait à la modification d'une cellule d'une autre colonne, avec une autre valeur, dans la même feuille.[/QUOTE]
    En modifiant le contenu de ta macro évènementielle :
    Par exemple

    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)
        Select Case Target.Column
        Case 10
            If Target.Value = "DOUBLON" Then Call MEFCDOUBLONS
        Case 12
            ' Expliquer ce qu'on fait pour les modification colonne K
        End Select
    End Sub

  4. #4
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut
    la formule inscrit "DOUBLON" dans la cellule cible ce qui déclenche la macro et ce qui cause problème je pense car le code fonction ne quand j'écris "DOUBLON" "manuellement" dans la cellule.
    Je pense que les "case" sont une bonne, ce n'est pas 9 et 11 les colonnes I et K ?


    la formule se trouve dans les cellule de la colonne I

  5. #5
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,


    Citation Envoyé par Kestion100 Voir le message
    la formule inscrit "DOUBLON" dans la cellule cible ce qui déclenche la macro et ce qui cause problème je pense car le code fonction ne quand j'écris "DOUBLON" "manuellement" dans la cellule.
    Je pense que les "case" sont une bonne, ce n'est pas 9 et 11 les colonnes I et K ?
    J'avoue d'emblée que je n'ai pas testé. Mais, dans l'aide de VBA Excel, ils disent ceci:


    Cet événement se produit lorsque les cellules de la feuille de calcul sont modifiées par l'utilisateur ou par un lien externe.
    Or le contenu de la cellule est une formule. Tout ce qui change, c'est l'affichage.

    Et puis, la même aide dit ceci, pour une situation quelque peu similaire, si on peut dire : le recalcul de la cellule:

    Remarques


    Cet événement ne se produit pas lorsque les cellules sont modifiées par un recalcul. Utilisez l'événement Calculate pour piéger le recalcul d'une feuille de calcul.
    Donc, Il ne te reste juste qu'à essayer avec Worksheet.Calculate(), ou de changer d'approche.

  6. #6
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Kestion100 Voir le message
    la formule inscrit "DOUBLON" dans la cellule cible ce qui déclenche la macro et ce qui cause problème je pense car le code fonction ne quand j'écris "DOUBLON" "manuellement" dans la cellule.
    La cellule pointée par le paramètre Target de la fonction Change est celle qui est modifiée à la main.

    Je pense que les "case" sont une bonne, ce n'est pas 9 et 11 les colonnes I et K ?
    C'est vraiment une question ?

Discussions similaires

  1. Executer une macro si la valeur d'une cellule change par une formule
    Par billard-man dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/01/2015, 21h25
  2. Réponses: 4
    Dernier message: 17/09/2014, 16h29
  3. [XL-2013] Remplacer une cellule vide par une valeur
    Par Tiagra dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 04/09/2014, 20h45
  4. [XL-2010] Remplacer cellule vide par une valeur
    Par kyasteph dans le forum Excel
    Réponses: 7
    Dernier message: 02/02/2014, 16h22
  5. [VxiR2] Remplacer cellules vides par une valeur
    Par mouhib dans le forum Webi
    Réponses: 7
    Dernier message: 01/12/2010, 09h53

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