Macro lancé au changement d'une cellule Excel [Résolu/Fermé]

Signaler
Messages postés
563
Date d'inscription
jeudi 5 novembre 2009
Statut
Membre
Dernière intervention
10 avril 2013
-
 nonimus -
Bonjour,

Je suis en pleine réalisation d'un fichier Excel calculant des adresses IP et j'ai crée une macro qui colorie DES celluleS et leur intègre du texte, malheureusement, cette dernière doit être lancée lorsqu'une cellule précise voit sa valeur modifiée. Comment faire?



Meilleures salutations
damiens1026

9 réponses

Bonsoir,

B2 est la cellule qui va déclencher après modification.

Dans la feuille concernée:

Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Application.Intersect(Target, Range("B2")) Is Nothing Then

   '********* Appel de la Macro *****************
   Macro1  
 End If
End Sub


adapter la référence de la cellule et le nom de la macro aux besoin

Bonne soirée
26
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 61940 internautes nous ont dit merci ce mois-ci

oui, et adapter range("B2") à la cellule qui t'intéresse.
Messages postés
563
Date d'inscription
jeudi 5 novembre 2009
Statut
Membre
Dernière intervention
10 avril 2013
28
oké merci
Messages postés
563
Date d'inscription
jeudi 5 novembre 2009
Statut
Membre
Dernière intervention
10 avril 2013
28
et dans le cas ou je veux faire une condition, par exemple, si B2 = 2, faire la macro1, si B2 = 3, faire la macro2, si B2 = 4, faire la macro3.

Comment faire cela?
>
Messages postés
563
Date d'inscription
jeudi 5 novembre 2009
Statut
Membre
Dernière intervention
10 avril 2013


Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("B2")) Is Nothing Then

IF range("B2") = 2 THEN
Call macro1
ELSE IF range("B2") = 3 THEN
Call macro3
END IF


End If
End Sub

Messages postés
62
Date d'inscription
mercredi 7 mars 2012
Statut
Membre
Dernière intervention
24 février 2020

C'est excellent ton truc ! Par contre si je veux pas uniquement que ça s'applique sur B2 mais genre sur une plage entière (B2:B200) et qu'à chaque fois que je change la valeur dans une cellule B, cela insère une donnée dans la cellule correspondante au même rang ? Je fais comment?
Y a vraiment pas de quoi!
Messages postés
16171
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
9 juillet 2020
2 988
Bonjour

Private Sub Worksheet_Change(ByVal Target As Range) 
 If Target.Address = "$B$2" Then 
    Select Case Target.Value 
        Case Is = 2 
            macro1 
        Case Is = 3 
            macro2 
        Case Is = 4 
            macro3 
    End Select 
 End If 
  
End Sub 


Michel
Messages postés
16171
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
9 juillet 2020
2 988
S'il s'agit simplement de colorier suivant la valeur (utilité xlpattern ?: voir aide en ligne)

Private Sub Worksheet_Change(ByVal Target As Range)   
 If Target.Address = "$B$2" Then   
    Select Case Target.Value   
        Case Is = 2   
            Target.Interior.ColorIndex = 6 'jaune   
        Case Is = 3   
            Target.Interior.ColorIndex = 3 'rouge   
        Case Is = 4   
            Target.Interior.ColorIndex = 4 'vert  
        Case Else 
            Target.Interior.ColorIndex = -4142 'transparent 
    End Select   
 End If   
    
End Sub
Messages postés
563
Date d'inscription
jeudi 5 novembre 2009
Statut
Membre
Dernière intervention
10 avril 2013
28
Sub SelectionClasse()  
Private Sub Worksheet_Change(ByVal Target As Range)  
If Target.Address = "$B$8" Then  
    Select Case Target.Value  
        Case Is = "Il s'agit d'une classe A"  
            ClasseA  
        Case Is = "Il s'agit d'une classe B"  
            ClasseB  
        Case Is = "Il s'agit d'une classe C"  
            ClasseC  
        Case Is = "Il s'agit d'une classe D (multicast)"  
            ClasseD  
    End Select  
 End If  
    
End Sub


J'ai fait cela, malheureusement ça ne marche pas... :(

-Désolé de mon incompétence, je n'ai jamais fait cela auparavant...-
Meilleures salutations
damiens1026
Re bonjour,

Ca évolue tellement qu'on ne sait plus ce que tu veux faire !

quelle cellule doit être le déclencheur : B2 ou B8

Pour chaque valeur de cette cellule que doit faire la macro?

A partir de là, on pourra mieux te guider .

A+
Messages postés
16171
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
9 juillet 2020
2 988
Bonjour Paf

effectivement...
Je te laisse le bébé et excuses mon incruste :-)
Messages postés
563
Date d'inscription
jeudi 5 novembre 2009
Statut
Membre
Dernière intervention
10 avril 2013
28
oui, toutes mes excuses, la cellule B2 était un exemple.

La macro doit se lancer au changement de la cellule B8 et doit lancer la macro ClasseA si B8 vaut "Il s'agit d'une classe A" ou la macro ClasseB si B8 vaut "Il s'agit d'une classe B" et ainsi de suite...
Pas de soucis michel !!

Et puis j'apprends toujours au contact des spécialistes !
Ton code parait correct aux vues de ce que tu veux faire, sauf que ...

tu as inclus le code de Private Sub Worksheet_Change(ByVal Target As Range)
dans la Sub SelectionClasse()

Pour simplifier, Private Sub Worksheet_Change(ByVal Target As Range) n'est pas un nom pris au hasard. C'est l'évènement qui se déclenche (tout seul) quand on modifie une cellule de la feuille !

Ton code ne sera pas lancer!
pour générer Private Sub Worksheet_Change(ByVal Target As Range), sous vba, dans l'explorateur de projet double clic sur la feuille concernée, dans la fenêtre qui s'ouvre selectionne Worksheet dans la "case" en haut à gauche, puis change en haut à droite.

Private Sub Worksheet_Change(ByVal Target As Range) est alors généré, il n'y a plus qu'à ..
Messages postés
563
Date d'inscription
jeudi 5 novembre 2009
Statut
Membre
Dernière intervention
10 avril 2013
28
donc en fait jarrive a ca: https://imageshack.com/
?
oui, et ça marche ?
Messages postés
563
Date d'inscription
jeudi 5 novembre 2009
Statut
Membre
Dernière intervention
10 avril 2013
28
pas le moins du monde :(
Re

chez moi ça marche!

Pour reprendre un peu,
c'est bien à la modification de la cellule B2 que l'on doit lancer ce code?

le contenu de B2 après modification est bien Il s'agit d'une classe A (ou B, C...) à l'espace près, à la casse près?

On ne rentre pas dans ce code ou bien les macros ClasseA (B,C...) ne sont pas lancées?
Messages postés
563
Date d'inscription
jeudi 5 novembre 2009
Statut
Membre
Dernière intervention
10 avril 2013
28
http://etml.educanet2.ch/cin1014a/muff/fichiers/Calcul%20des%20IP.xlsm
je n'ai pas 2007, peux tu le remettre enregistré au format 2003 ?
Messages postés
563
Date d'inscription
jeudi 5 novembre 2009
Statut
Membre
Dernière intervention
10 avril 2013
28
http://etml.educanet2.ch/cin1014a/muff/fichiers/Calcul%20des%20IP.xls
Plusieurs soucis:

le code était dans la Sub Worksheet_SelectionChange et non dans la Sub Worksheet_Change

le code fonctionne bien si on modifie la valeur de B8 par macro .

mais si B8 contient une formule (comme c'est le cas) l'évènement change n'est pas déclenché!

Je gratte pour trouver une solution
Re ,

une solution à tester, les commentaires sont dans le fichier joint:

http://www.cijoint.fr/cjlink.php?file=cj201102/cijVtSXyff.xls

dites moi ce qu'il en est!
Messages postés
563
Date d'inscription
jeudi 5 novembre 2009
Statut
Membre
Dernière intervention
10 avril 2013
28
la macro s'execute cette fois mais je n'ai pas compris ce que vous avez changé, histoire que je fasse la même chose dans le fichier XLSX Office 2007...
Messages postés
563
Date d'inscription
jeudi 5 novembre 2009
Statut
Membre
Dernière intervention
10 avril 2013
28
Mais en fait, comme l'utilisateur modifie la valeur de B6, ne pourrait on pas "conditionner" la macro à s'exécuter lors du changement de cette cellule?
dans le classeur 2007 rajouter au niveau feuille:

Private Sub Worksheet_Calculate()
Cible = Range("B8").Value
If Cible <> Range("A25").Value Then
Select Case Cible
        Case Is = "Il s'agit d'une classe A"
            ClasseA
        Case Is = "Il s'agit d'une classe B"
            ClasseB
        Case Is = "Il s'agit d'une classe C"
            ClasseC
        Case Is = "Il s'agit d'une classe D (multicast)"
            ClasseD
    End Select
    Range("A25").Value = Cible
 End If
End Sub


supprimer les Sub Worksheet_Change et Worksheet_SelectionChange si elles existent

et normalement (?) ça devrait fonctionner .

Bonne suite
Messages postés
563
Date d'inscription
jeudi 5 novembre 2009
Statut
Membre
Dernière intervention
10 avril 2013
28
yes, ca fontionne, BRAVO!!!