[VBA EXCEL] Macro qui s'execute automatiqemnt

Boon -  
 Boon -
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!!
Configuration: Windows XP
Firefox 2.0.0.5

12 réponses

  1. Utilisateur anonyme
     
    ------------------------------------
    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
    2
  2. Boon
     
    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
    ---------------------------
    1
  3. Utilisateur anonyme
     
    Bonjour,

    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
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. Boon
     
    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?
    0
  6. Utilisateur anonyme
     
    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 :

    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
    0
  7. Boon
     
    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
    0
  8. Boon
     
    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!!!
    0
  9. Utilisateur anonyme
     
    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.
    Private Sub Worksheet_Change(ByVal Target As Range) 
    
        Dim a As Double 
    
        Application.EnableEvents = False
        ' Code ...
        ' ...
        Application.EnableEvents = True
    
    End Sub 
    '
    

    Lupin
    0
  10. Utilisateur anonyme
     
    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 :

    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
    0
  11. Boon
     
    Merci!!!!!

    Tout marche parfaitement!!

    Merci beaucoup!!
    0