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 qui s'execute automatiquement!


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 31
    Points : 13
    Points
    13
    Par défaut Macro qui s'execute automatiquement!
    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!!

  2. #2
    Membre habitué
    Inscrit en
    Janvier 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Janvier 2007
    Messages : 132
    Points : 160
    Points
    160
    Par défaut
    Bonjour
    Pour le lancement automatique, tu vas dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_Open()
     
    End Sub
    Et tu place soit ton code soit un appel de ta procédure
    Pour la deuxième question... j'ai pas de réponse
    Slts

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 62
    Points : 48
    Points
    48
    Par défaut
    Pour une macro qui s'ouvre en même temps que le fichier, glisse dans l'onglet "thisworkbook" de l'éditeur VbA avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private sub Workbook_Open()
    Et pour l'autre jette un oeil sur les évènements de la feuille de calcul dans les tuto ya ce qu'il faut je crois

    Workbook_SheetCalculate

    un truc comme çà

    Az

  4. #4
    Membre habitué
    Inscrit en
    Janvier 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Janvier 2007
    Messages : 132
    Points : 160
    Points
    160
    Par défaut
    J'ai trouvé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Change(ByVal Target As Range)
    A = Target.Address
    End Sub
    Dans A tu récupère l'adresse de la cellule modifiée
    Slts

  5. #5
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 31
    Points : 13
    Points
    13
    Par défaut
    Merci!
    Je vais essayer de ce pas!

  6. #6
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 31
    Points : 13
    Points
    13
    Par défaut
    Re Salut!

    J'ai mis ce code dans "this Workbook" , mais rien ne se passe!
    -----------------------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    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?

  7. #7
    Membre habitué
    Inscrit en
    Janvier 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Janvier 2007
    Messages : 132
    Points : 160
    Points
    160
    Par défaut
    Re bonjour
    C'est pas dans This Workbook mais dans le code de ta feuille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim A As String
    Dim B As String
    B = Target.Address
    If B = "$B$2" Then 'test sur la cellule modifiée
        'suppression des $
        For I = 1 To Len(B)
            If Mid(B, I, 1) <> "$" Then
                A = A + Mid(B, I, 1)
            End If
        Next
        Range("A25").Value = Range(A).Value * 10
    End If
    End Sub
    De plus, il faut vérifier que tu as bien modifié la cellule voulue car la ligne "Range("A25").Value = Range(A).Value * 10" modifiant à nouveau la feuille, le processus recommence
    Slts

  8. #8
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 31
    Points : 13
    Points
    13
    Par défaut
    C'est génial! Ca marche!

    Merci beaucoup pour ton aide!

    Une dernière question:
    Que signifie exactement cette boucle?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For I = 1 To Len(B)
            If Mid(B, I, 1) <> "$" Then
                A = A + Mid(B, I, 1)
            End If
    Next
    Merci pour tout!

  9. #9
    Membre habitué
    Inscrit en
    Janvier 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Janvier 2007
    Messages : 132
    Points : 160
    Points
    160
    Par défaut
    Bonjour en fait elle peut être supprimée car on lit une seule et même cellule
    Tu peux remplacer la procédure par le code suivant simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    If Target.Adress = "$B$2" Then 'test sur la cellule modifiée
        Range("A25").Value = Range("B2").Value * 10
    End If
    La valeur Target.adress renvoit une valeur formatée ainsi: $B$2
    Pour la rendre utilisable dans un Range, il faut suprimer les $
    Donc je lis les caractères de la chaine target.adress un à un et quand ce n'est pas un $ je le transfère dans une autre variable afin d'obtenir "B2"
    Slts

  10. #10
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 31
    Points : 13
    Points
    13
    Par défaut
    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)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     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!!!

  11. #11
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    l'instruction If... Then... ElseIf... Esle... End If, tu connais ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Private Sub Worksheet_Change(ByVal Target As Range)
       Dim a As Double
       ' B15 = Target.Address  ' C'est quoi ça ?
    If Target.Address = "B15" Then
       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
    ElseIf Target.Address = "B16" Then
       a = 33
      Do While Cells(a, 2).Value <> Cells(16, 2).Value
      a = a + 1
      Loop
       Range("B15").Value = Range("A" & a).Value 
    End If
    End Sub

  12. #12
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 31
    Points : 13
    Points
    13
    Par défaut
    Le problème c'est qu'en utilisant des boucles If, comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Target.Address = "B15" Then
    il ne se passe plus rien!

    (je pense qu'en faisant ca, on ne dit plus à la macro que telle cellule est la cible, on dit seulement que si c'est la cible, alors faire blablabla...)

  13. #13
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 31
    Points : 13
    Points
    13
    Par défaut
    Je viens d'inserer du code au début du code pour contourner le problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    For i = 15 To 16
        If Range("B" & i).Select Then
        Target.Adress = "B" & i
        End If
    Next i
     
    If Target.Address = "B15" Then
       a = 33
      Do While Cells(a, 1).Value <> Cells(15, 2).Value
      a = a + 1
      Loop
       Range("B16").Value = Range("B" & a).Value
     
    ElseIf Target.Address = "B16" Then
       a = 33
      Do While Cells(a, 2).Value <> Cells(16, 2).Value
      a = a + 1
      Loop
       Range("B15").Value = Range("A" & a).Value
    End If
    mais ca me renvoie l'erreur:
    "Object doesn't support this property or method" sur la ligne "Target.Adress = "B" & i"

    Arf

  14. #14
    Membre habitué
    Inscrit en
    Janvier 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Janvier 2007
    Messages : 132
    Points : 160
    Points
    160
    Par défaut
    Là ça se complique
    Car tu pars dans une impasse
    En modifiant B15 tu modifie B16 qui renvoie une interuption donc qui remodifie B15...
    Slts

  15. #15
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 31
    Points : 13
    Points
    13
    Par défaut
    Apparemment il y aurait une fonction qui serait utile dans mon cas, mais je sais pas trop bien m'en servir:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.EnableEvents
    La connaissez-vous?

    Merci

  16. #16
    Membre habitué
    Inscrit en
    Janvier 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Janvier 2007
    Messages : 132
    Points : 160
    Points
    160
    Par défaut
    Ca pourrait en effet être utile
    Mettre au début de la procédure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.EnableEvents=false
    Puis terminer la preocédure par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.EnableEvents=true
    J'ai pas testé mais ça doit marcher de ce que j'en ai lu dans l'aide
    Slts

  17. #17
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 31
    Points : 13
    Points
    13
    Par défaut
    Oui!!!!
    Ca marche!

    Merci encore à tous, vous m'économisez des semaines de réflexion!


  18. #18
    Membre habitué
    Inscrit en
    Janvier 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Janvier 2007
    Messages : 132
    Points : 160
    Points
    160
    Par défaut
    J'étais persuadé de t'avoir répondu à ce sujet, il y a du avoir un bug qq part
    Donc, en effet tu mets au début de ta procédure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.EnableEvents=false
    et à la fin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Enableevents=true
    J'ai pas testé mais de ce que j'en ai lu dans l'aide, ça doit fonctionner
    Slts
    PS: la prochaine fois, je regarderais sur la deusième page

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 30/04/2015, 12h04
  2. [python/dcom] macro qui se lance automatiquement
    Par axel584 dans le forum VBA Word
    Réponses: 7
    Dernier message: 29/06/2010, 02h01
  3. Macro qui ne s'exécute pas dans formulaire
    Par picatchou dans le forum Access
    Réponses: 10
    Dernier message: 18/09/2006, 18h27
  4. [vba-E] VBA pour macro executable automatiquement
    Par ricachu dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/07/2006, 15h20
  5. [vba-E] pour une macro executable automatiquement
    Par ricachu dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/07/2006, 12h34

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