[VBA EXCEL] Macro qui s'execute automatiqemnt
Fermé
Bonjour!
Je voudrais savoir s'il est possible de réaliser une macro qui :
1) S'ouvre en même temps que la feuille excel,
2) Se lance automatiquement lorsque l'utilisateur change la valeur d'une cellule précise.
Exemple (très simple, dans ma macro c'est pas ca!):
A5 = A3 + A6
Si je change la formule de A6 alors automatiquement la valeur de A5 aussi change.
Merci!!
Je voudrais savoir s'il est possible de réaliser une macro qui :
1) S'ouvre en même temps que la feuille excel,
2) Se lance automatiquement lorsque l'utilisateur change la valeur d'une cellule précise.
Exemple (très simple, dans ma macro c'est pas ca!):
A5 = A3 + A6
Si je change la formule de A6 alors automatiquement la valeur de A5 aussi change.
Merci!!
A voir également:
- [VBA EXCEL] Macro qui s'execute automatiqemnt
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Liste déroulante excel - Guide
- Si et excel - Guide
- Word et excel gratuit - Guide
- Déplacer une colonne excel - Guide
12 réponses
Utilisateur anonyme
27 juil. 2007 à 21:20
27 juil. 2007 à 21:20
------------------------------------
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Cells(25, 1).Value = Target.Value
End Sub
-------------------------------------
La feuille Sh ainsi que Target sont passé en paramètres
Sh est la feuille qui détecte le changement
Target est la cellule pointé par le changement ( la sélection )
Ce que tu modifie t'es renvoyé à la cellule A25 selon le format d'affichage qui lui est propre.
disons pour effectuer une demo :
Postulat : Place une valeur numérique en A1 pour 3 feuille :
Lupin
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Cells(25, 1).Value = Target.Value
End Sub
-------------------------------------
La feuille Sh ainsi que Target sont passé en paramètres
Sh est la feuille qui détecte le changement
Target est la cellule pointé par le changement ( la sélection )
Ce que tu modifie t'es renvoyé à la cellule A25 selon le format d'affichage qui lui est propre.
disons pour effectuer une demo :
Postulat : Place une valeur numérique en A1 pour 3 feuille :
Option Explicit Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) Select Case (Sh.Name) Case "Feuil1": Routine1 Target Case "Feuil2": Routine2 Target Case "Feuil3": Routine3 Target End Select End Sub ' Sub Routine1(ByVal Cible As Range) Cells(5, 1).Value = "Valeur = " & Cible.Value End Sub ' Sub Routine2(ByVal Cible As Range) Cells(5, 1).Value = "Adresse = " & Cible.Address End Sub ' Sub Routine3(ByVal Cible As Range) Cells(5, 1).Value = "Formule = " & Cible.Formula End Sub '
Lupin
Re!
Je viens d'essayer de mettre les Application.EnableEvents , mais je peux maintenant seulement changer la cellule B16: Si je change la cellule B15, elle reste comme elle est (c'est à dire comme calculée à partir de la cellule 16)
Voilà le code que j'ai mis, en même temps, je suis pas du tout sûr d'avoir bien su utilisé les Application.EnableEvents = True:
----------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim a As Double
Application.EnableEvents = False
B16 = Target.Address
a = 33
Do While Cells(a, 2).Value <> Cells(16, 2).Value
a = a + 1
Loop
Range("B15").Value = Range("A" & a).Value
B15 = Target.Address
a = 33
Do While Cells(a, 1).Value <> Cells(15, 2).Value
a = a + 1
Loop
Range("B16").Value = Range("B" & a).Value
Application.EnableEvents = True
End Sub
---------------------------
Je viens d'essayer de mettre les Application.EnableEvents , mais je peux maintenant seulement changer la cellule B16: Si je change la cellule B15, elle reste comme elle est (c'est à dire comme calculée à partir de la cellule 16)
Voilà le code que j'ai mis, en même temps, je suis pas du tout sûr d'avoir bien su utilisé les Application.EnableEvents = True:
----------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim a As Double
Application.EnableEvents = False
B16 = Target.Address
a = 33
Do While Cells(a, 2).Value <> Cells(16, 2).Value
a = a + 1
Loop
Range("B15").Value = Range("A" & a).Value
B15 = Target.Address
a = 33
Do While Cells(a, 1).Value <> Cells(15, 2).Value
a = a + 1
Loop
Range("B16").Value = Range("B" & a).Value
Application.EnableEvents = True
End Sub
---------------------------
Utilisateur anonyme
27 juil. 2007 à 16:02
27 juil. 2007 à 16:02
Bonjour,
2 possibilités !
soit :
vous declarez une fonction personnalisé !
soit :
vous utlisé l'évènement derrière la feuille :
Lupin
2 possibilités !
soit :
vous declarez une fonction personnalisé !
Public Function MaFonction (ByVal Cible As Range) As Variant Application.Volatile MaFonction = Cible.Value + 10 End Function
soit :
vous utlisé l'évènement derrière la feuille :
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Range("A2").value = Target.Value + 10 End Sub
Lupin
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Re Salut!
J'ai mis ce code dans "this Workbook" , mais rien ne se passe!
-----------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Cells(20, 2) = Target.Address
Range("A25").Value = Target.Value * 10
End Sub
----------------------------
Normalement, avec un code comme ca, la cellule A25 devrait m'afficher 10 fois la cellule B20 quand je change sa valeur, non?
Qu'est ce que je n'ai pas compris?
J'ai mis ce code dans "this Workbook" , mais rien ne se passe!
-----------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Cells(20, 2) = Target.Address
Range("A25").Value = Target.Value * 10
End Sub
----------------------------
Normalement, avec un code comme ca, la cellule A25 devrait m'afficher 10 fois la cellule B20 quand je change sa valeur, non?
Qu'est ce que je n'ai pas compris?
Utilisateur anonyme
27 juil. 2007 à 18:47
27 juil. 2007 à 18:47
re:
en fait, au lieu de placer ce code derrière une feuille, celui-ci a été placé dans le module [ThisWorkbook].
ici, cela ne s'adresse pas à une simple feuille mais à tous le classeur ( toutes les feuilles ), il faut donc
un paramàtre supplémentaire. Les évènements dans le module [ThisWorkbook] sont plutôt :
ou la feuille est désigné par [ Sh As Object ].
Lupin
en fait, au lieu de placer ce code derrière une feuille, celui-ci a été placé dans le module [ThisWorkbook].
ici, cela ne s'adresse pas à une simple feuille mais à tous le classeur ( toutes les feuilles ), il faut donc
un paramàtre supplémentaire. Les évènements dans le module [ThisWorkbook] sont plutôt :
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) ' Code ' ... End Sub ' Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) ' Code '... End Sub
ou la feuille est désigné par [ Sh As Object ].
Lupin
Arf!
Je débute dans la programmation donc j'ai pas tout capté, dsl!
Voici le code que je viens de rentrer (j'ai remplacé le Private Sub mais je suis pas sur que c'est ca que j'aurai du faire...)
------------------------------------
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Cells(25, 1).Value = Target.Value
End Sub
-------------------------------------
Et maintenant, la cellule A25 me donne...l'heure!!!!!
J'y comprends plus rien!
Dany
Je débute dans la programmation donc j'ai pas tout capté, dsl!
Voici le code que je viens de rentrer (j'ai remplacé le Private Sub mais je suis pas sur que c'est ca que j'aurai du faire...)
------------------------------------
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Cells(25, 1).Value = Target.Value
End Sub
-------------------------------------
Et maintenant, la cellule A25 me donne...l'heure!!!!!
J'y comprends plus rien!
Dany
Merci, j'ai enfin compris comment ca marchait!
Mais je me rend compte que je suis confronté à un autre problème:
En fait, je voudrais avoir plusieurs target, et dans mon cas, elles sont dépendantes. Je m'explique:
Si je change B15, je veux que B16 change, mais
si je change B16, je veux que B15 change aussi.
J'ai donc mis ce code: (ne pas se préocupper des boucles, c'est rien du tout)
------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim a As Double
B15 = Target.Address
a = 33
Do While Cells(a, 1).Value <> Cells(15, 2).Value
a = a + 1
Loop
Range("B16").Value = Range("B" & a).Value
B16 = Target.Address
a = 33
Do While Cells(a, 2).Value <> Cells(16, 2).Value
a = a + 1
Loop
Range("B15").Value = Range("A" & a).Value
End Sub
--------------------------------------------------
Mais quand j'execute la macro, mon programme tourne en boucle, car si je change B15, ca change B16 qui change B15 qui change B16, etc...
Comment faire pour contourner ce problème???
Merci encore!!!
Mais je me rend compte que je suis confronté à un autre problème:
En fait, je voudrais avoir plusieurs target, et dans mon cas, elles sont dépendantes. Je m'explique:
Si je change B15, je veux que B16 change, mais
si je change B16, je veux que B15 change aussi.
J'ai donc mis ce code: (ne pas se préocupper des boucles, c'est rien du tout)
------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim a As Double
B15 = Target.Address
a = 33
Do While Cells(a, 1).Value <> Cells(15, 2).Value
a = a + 1
Loop
Range("B16").Value = Range("B" & a).Value
B16 = Target.Address
a = 33
Do While Cells(a, 2).Value <> Cells(16, 2).Value
a = a + 1
Loop
Range("B15").Value = Range("A" & a).Value
End Sub
--------------------------------------------------
Mais quand j'execute la macro, mon programme tourne en boucle, car si je change B15, ca change B16 qui change B15 qui change B16, etc...
Comment faire pour contourner ce problème???
Merci encore!!!
Utilisateur anonyme
28 juil. 2007 à 16:33
28 juil. 2007 à 16:33
re :
bonne nouvelle, je sais c'est pas toujours évident ! Il m'arrive de chercher aussi des heures !
bon pour le nouveau problème, si on s'en refère à la théorie, les changements que tu dois
détecter doivent provenir de l'extérieur, ceux de l'intérieur étant contrôlé par la routine
elle-même.
Par conséquent, je dirais qu'il ne te suffit que de désactivé les évènements durant le cycle de la routine.
Lupin
bonne nouvelle, je sais c'est pas toujours évident ! Il m'arrive de chercher aussi des heures !
bon pour le nouveau problème, si on s'en refère à la théorie, les changements que tu dois
détecter doivent provenir de l'extérieur, ceux de l'intérieur étant contrôlé par la routine
elle-même.
Par conséquent, je dirais qu'il ne te suffit que de désactivé les évènements durant le cycle de la routine.
Private Sub Worksheet_Change(ByVal Target As Range) Dim a As Double Application.EnableEvents = False ' Code ... ' ... Application.EnableEvents = True End Sub '
Lupin
Utilisateur anonyme
28 juil. 2007 à 19:51
28 juil. 2007 à 19:51
re salut,
2 choses qui m'apparaissent !
Si tu arrête la macro en cours d'utilisation et que l'instruction de réactivation ne passe
pas, il te faut réactiver les évènements :
et pour bien cibler la cellule et le travail a effectuer :
Lupin
2 choses qui m'apparaissent !
Si tu arrête la macro en cours d'utilisation et que l'instruction de réactivation ne passe
pas, il te faut réactiver les évènements :
Sub ActiveEvenements() Application.EnableEvents = True End Sub '
et pour bien cibler la cellule et le travail a effectuer :
Private Sub Worksheet_Change(ByVal Target As Range) Dim Intersection As Range Set Intersection = Application.Intersect(Target, Range("B15")) If Intersection Is Nothing Then MsgBox "Pas dans la plage de B15" Set Intersection = Application.Intersect(Target, Range("B16")) If Intersection Is Nothing Then MsgBox "Pas dans la plage de B16" Else ' Ici le code pour B16 ' ... End If Else ' Ici le code pour B15 ' ... End If End Sub '
Lupin