[HELP.ME] Exécuter une macro via une formule, si on modifie certaines cellules

Résolu
cs_Sp00ky Messages postés 112 Date d'inscription vendredi 21 janvier 2005 Statut Membre Dernière intervention 20 novembre 2006 - 19 août 2005 à 09:18
cs_Sp00ky Messages postés 112 Date d'inscription vendredi 21 janvier 2005 Statut Membre Dernière intervention 20 novembre 2006 - 19 août 2005 à 10:35
Bonjour,

Je voudrais savoir s'il est possible (et si oui comment) de lancer une macro via une fonction dans une cellule (sous Excel 2003)

Cette macro serait appellée automatiquement lorsqu'on modifie des cellules en particulier, sur la ligne ou se trouve la formule

Aussi autre question : est-il possible, sans passer par une macro, de changer les polices et le fond d'une cellule en fonction du résultat.
Par ex. : =SI(condition, en gras et fond rouge : "ok", en gras et fond noir : "pas bon")

Merci d'avance !



<HR>

$p00ky
______________________________________________
.:: KoC-FR ::. Alliance Francophone Kings of Chaos
Venez jouer au meilleur MMORPG gratuit et facile !</FON< body>

7 réponses

mrdep1978 Messages postés 402 Date d'inscription jeudi 25 novembre 2004 Statut Membre Dernière intervention 7 juin 2009 7
19 août 2005 à 09:30
Salut,

Pour ta 1e question, tu peux utiliser l'événement Change de l'objet Worksheet (si tu veux gérer ta fonction dans une seule feuille) ou l'événement SheetChange de l'objet Workbook (si tu veux qu'il se déclenche pour plusieurs feuilles du fichier Excel.

Pour répondre à ta 2e question, il faut que tu ailles voir dans le menu "Format", "Mise en forme automatique" : Pour une cellule (ou une plage de cellules), tu peux donner jusqu'à 3 conditions et formats différents.
3
Paladin2107 Messages postés 154 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 5 septembre 2008 1
19 août 2005 à 09:31
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$A$1" Then
call TaMacro
End If
End Sub
Couscous
3
Paladin2107 Messages postés 154 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 5 septembre 2008 1
19 août 2005 à 09:34
If Cells(1, 1).Value = "ok" Then
Range("A1").Select
Selection.Font.ColorIndex = 3
Selection.Font.Bold = True
ElseIf Cells(1, 2).Value = "pas bon" Then
Range("B1").Select
Selection.Font.Bold = True
Selection.Font.ColorIndex = 0
End If

Couscous
0
cs_Sp00ky Messages postés 112 Date d'inscription vendredi 21 janvier 2005 Statut Membre Dernière intervention 20 novembre 2006 1
19 août 2005 à 09:54
Merci pour la seconde question c'est exactement ce que je cherchais ;)

Pour la première question par contre, en fait je ne voudrais pas tout à fait ca ...

Je voudrais appeller la macro par une fonction dans une cellule :
Par ex. =MACRO
Ou Macro est une de mes macros enregistrées dans les Modules

Cependant, cette fonction (qui donc n'execute que la macro), ne devrait s'executer que s'il y'a une modification d'une des cellules de la ligne ou se trouve la cellule de la fonction.

Comme si c'était une fonction genre =SI(cellules_modifiées; execute_macro; sinon rien)

Et la macro repererait la ligne de la cellule qui l'appelle pour effectuer les opérations dans celle ci.

Je ne sais pas si c'est possible ....

En fait, c'est juste car je n'arrive pas à faire ce que je veux juste avec les formules (sans macro VBA) : compter le nombre de cellules avec du texte sur la ligne ou est la fonction, sachant que certaines cellules peuvent etre fusionnées, et donc il compte le texte uniquement dans la premiere du groupe de cellule, et detecte les autres lignes comme étant vides ...
En VBA, je peux lui dire : si la cellule est fusionnée, tu regardes si la premiere de la fusion contient du texte ....
Mais pas une formule j'y arrive pas ... d'ou l'interet de passer par la macro...

Cependant une macro qui tourne tout le temps sur chaque ligne, c'est impossible niveau mémoire. Donc je voudrais faire appeller cette macro que s'il y'a des modifications sur la ligne, à la maniere d'une fonction ...

Merci d'avance !



<HR>

$p00ky
______________________________________________
.:: KoC-FR ::. Alliance Francophone Kings of Chaos
Venez jouer au meilleur MMORPG gratuit et facile !</FON< body>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Sp00ky Messages postés 112 Date d'inscription vendredi 21 janvier 2005 Statut Membre Dernière intervention 20 novembre 2006 1
19 août 2005 à 10:01
Ooops je n'avais pas vu les réponses de Paladin2107 ...

Pour ce sub :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$A$1" Then
call TaMacro
End If
End Sub

If Target.Adress = "$A$1" est en fait la plage que je veux tester ?

Je voudrais juste que dès qu'il y'a un changement dans une cellule, connaitre la ligne ou a eu lieu le changement (ou les lignes ou ont eu lieu les changements) et executer la macro sur ces lignes ...



<HR>

$p00ky
______________________________________________
.:: KoC-FR ::. Alliance Francophone Kings of Chaos
Venez jouer au meilleur MMORPG gratuit et facile !</FON< body>
0
cs_Sp00ky Messages postés 112 Date d'inscription vendredi 21 janvier 2005 Statut Membre Dernière intervention 20 novembre 2006 1
19 août 2005 à 10:20
Je viens de comprendre et faire marcher cette fonction :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
For Each Cellule In Selection
call Macro(Selection.Row) ' ou j'ai une public fonction nommée Macro
Next
End Sub

Je récupere bien les lignes sur lesquelles ont eu lieu les changements ...

C'est exactement le meme principe que je veux, sauf que là ca s'execute a chaque changement de cellule, je voudrais que ca ne s'execute qu'a chaque modification du contenu d'une cellule.

Ceci existe t-il ?



<HR>

$p00ky
______________________________________________
.:: KoC-FR ::. Alliance Francophone Kings of Chaos
Venez jouer au meilleur MMORPG gratuit et facile !</FON< body>
0
cs_Sp00ky Messages postés 112 Date d'inscription vendredi 21 janvier 2005 Statut Membre Dernière intervention 20 novembre 2006 1
19 août 2005 à 10:35
Yes, j'ai réussi !!

Merci à vous deux, voilà ce que je cherchais exactement pour ma premiere fonction:


Private Sub Worksheet_Change(ByVal Target As Range)
For Each Cellule In Target
nouvelle = Cellule.Row
If nouvelle <> old Then
Call Ma_Fonction(Cellule.Row) ' J'appelle ma fonction publique
End If
old = Cellule.Row
Next
End Sub

MERCI !!



<HR>

$p00ky
______________________________________________
.:: KoC-FR ::. Alliance Francophone Kings of Chaos
Venez jouer au meilleur MMORPG gratuit et facile !</FON< body>
0
Rejoignez-nous