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

Excel Discussion :

vba Exécuter automatiquement une macro si condition est remplie. [XL-2010]


Sujet :

Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2015
    Messages : 15
    Points : 3
    Points
    3
    Par défaut vba Exécuter automatiquement une macro si condition est remplie.
    Bonjour,
    N'étant pas un doué en la matière, je fais appel à votre aide.
    Je cherche à faire en sorte qu'une macro s’exécute automatiquement si une condition au sien d'une plage de cellules est remplie.
    - Si une des cellules C9:C100 affiche le mot "FIN" alors la macro "macro1" s’exécute automatiquement.
    D'vance je vous remercie de votre aide.

  2. #2
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 345
    Points : 249
    Points
    249
    Par défaut
    Citation Envoyé par dl5555 Voir le message
    Bonjour,
    N'étant pas un doué en la matière, je fais appel à votre aide.
    Je cherche à faire en sorte qu'une macro s’exécute automatiquement si une condition au sien d'une plage de cellules est remplie.
    - Si une des cellules C9:C100 affiche le mot "FIN" alors la macro "macro1" s’exécute automatiquement.
    D'vance je vous remercie de votre aide.
    Bonjour,

    Dans l'Explorateur de Projets VBA, juste sous la liste des feuilles de calcul, double clique sur "ThisWorkbook".
    Dans la liste déroulante (Général), choisis Workbook (tu n'as pas d'autre choix). Par défaut, VBA te met un squelette de macro qui s'exécutera automatiquement à l'ouverture de ton classeur. Tu y mets ce que tu veux...

    T'auras un code comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_Open()
         MsgBox "Ca marche"
     End Sub
    ou encore

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Auto_Open() ' déclanchement à l'ouverture du classeur
     
    Sheets("nm de la feuille").Select
    + instructions 
     
    End Sub
    Cordialement

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2011
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 212
    Points : 334
    Points
    334
    Par défaut
    Bonjour,

    Tu peux également utiliser sur le même principe l’événement de la feuille qui contient la cellule à surveiller.
    Tu trouveras des exemples sur le forum...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Change(ByVal Target As Range)
    '...
    End Sub

  4. #4
    Candidat au Club
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2015
    Messages : 15
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par GastonLagaffe25 Voir le message
    Bonjour,

    Tu peux également utiliser sur le même principe l’événement de la feuille qui contient la cellule à surveiller.
    Tu trouveras des exemples sur le forum...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_Change(ByVal Target As Range)
    If ???????? then
    call macro1
    End If
    End Sub

    - Merci pour la réponse. C'est ce que je veux, mais c'est au niveau des points d'interrogation que je ne sais pas quoi mettre malgré mes recherches sur le forum.
    - Je dois surveiller non pas UNE mais une PLAGE de cellules (A9:A100)

  5. #5
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par dl5555 Voir le message
    - Si une des cellules C9:C100 affiche le mot "FIN" alors la macro "macro1" s’exécute automatiquement.
    Perso, je n'aurais pas mis la macro évènementielle dans ThisWorkbook mais plutôt dans l'objat Excel correspondant à la feuille.
    Tu y places la macro suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Worksheet_Change(ByVal Target as Range)
        If Target.Column <> 3 or Target.Row < 9 or Target.Row > 100 Then Exit Sub
        If Target.Value <> "FIN" Then Exit Sub
     
        ' Là, tu peux placer l'action à faire ou la macro à lancer
     
    End Sub

  6. #6
    Candidat au Club
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2015
    Messages : 15
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par dl5555 Voir le message
    - Merci pour la réponse. C'est ce que je veux, mais c'est au niveau des points d'interrogation que je ne sais pas quoi mettre malgré mes recherches sur le forum.
    - Je dois surveiller non pas UNE mais une PLAGE de cellules (A9:A100)

    Correction : cellules (C9:C100)[

  7. #7
    Membre averti
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2011
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 212
    Points : 334
    Points
    334
    Par défaut
    Et bien c'est le même principe car "Target" et du type "Range" !
    ...et via les propriétés de "Target" tu identifie ta zone et le comportement que tu souhaites.

    @Menhir: j'avais fait comme toi mais je pense que la solution ci-dessous correspond plus au besoin...à voir.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Worksheet_Change(ByVal Target As Range)
      Dim i As Integer
      For i = 8 To 100
         If Cells(i, 3).Value = "Fin" Then Call macro1
      Next i
    End Sub

  8. #8
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    D'accord avec toi.
    Il faudrait peut-être aussi mettre un UCase sur la valeur à vérifier.

  9. #9
    Candidat au Club
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2015
    Messages : 15
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Perso, je n'aurais pas mis la macro évènementielle dans ThisWorkbook mais plutôt dans l'objat Excel correspondant à la feuille.
    Tu y places la macro suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Worksheet_Change(ByVal Target as Range)
        If Target.Column <> 3 or Target.Row < 9 or Target.Row > 100 Then Exit Sub
        If Target.Value <> "FIN" Then Exit Sub
     
        ' Là, tu peux placer l'action à faire ou la macro à lancer
     
    End Sub
    A priori ça fonctionne mais uniquement si je rentre la condition "FIN" MANUELLEMENT, alors que dans mon cas la condition "FIN" est le résultat automatique d'une fonction déja dans les cellules C9:C100 genre : "=si(a1=1;"FIN";"")

  10. #10
    Candidat au Club
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2015
    Messages : 15
    Points : 3
    Points
    3
    Par défaut vba execution automatique macro
    Citation Envoyé par GastonLagaffe25 Voir le message
    Et bien c'est le même principe car "Target" et du type "Range" !
    ...et via les propriétés de "Target" tu identifie ta zone et le comportement que tu souhaites.

    @Menhir: j'avais fait comme toi mais je pense que la solution ci-dessous correspond plus au besoin...à voir.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Worksheet_Change(ByVal Target As Range)
      Dim i As Integer
      For i = 8 To 100
         If Cells(i, 3).Value = "Fin" Then Call macro1
      Next i
    End Sub

    Cette solution semble bien fonctionner. Un énorme merci à GastonLagaffe25



    Je m'excuse de relancer le sujet, mais en fait je voudrais reproduire la même chose pour les plages de cellules H9:H100 et M9:100 ceci pour la même condition c à d lorsque qu'une cellule des plages concernées indique "FIN"
    D'avance merci

  11. #11
    Membre averti
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2011
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 212
    Points : 334
    Points
    334
    Par défaut
    @Menhir
    Il faudrait peut-être aussi mettre un UCase sur la valeur à vérifier.
    Effectivement !
    C'est mieux.

    Sinon,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Target.Value <> "FIN" Then Exit Sub
    Il me semble que tu peux avoir un cas ou "Target" est une plage et pas une cellule...dans ce cas, on aura peut-être une erreur.

    A priori ça fonctionne mais uniquement si je rentre la condition "FIN" MANUELLEMENT, alors que dans mon cas la condition "FIN" est le résultat automatique d'une fonction déjà dans les cellules C9:C100 genre : "=si(a1=1;"FIN";"")
    Il me semble que dans ce cas, on regarde uniquement les cellules modifiées et avec une formule ce n'est pas le cas...

  12. #12
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par dl5555 Voir le message
    dans mon cas la condition "FIN" est le résultat automatique d'une fonction déja dans les cellules C9:C100 genre : "=si(a1=1;"FIN";"")
    Tu aurais du le signaler dans ta demande.

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

Discussions similaires

  1. [Toutes versions] VBA - exécuter automatiquement une macro
    Par NZL0401 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 21/04/2015, 19h50
  2. Exécution d'une macro seulement lorsque la page est fini d'être affichée
    Par Dr_shaman dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/04/2009, 13h26
  3. exécution d'une macro avec condition
    Par casavba dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/08/2007, 14h44
  4. [vba-E] pour une macro executable automatiquement
    Par ricachu dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/07/2006, 11h34
  5. [VBA-E]Exécution d'une macro en arrière-plan
    Par Mirx1 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 25/04/2006, 23h13

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