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 :

Exécuter une macro en fonction d'une valeur dans une colonne


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Employé administratif
    Inscrit en
    Février 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Employé administratif

    Informations forums :
    Inscription : Février 2021
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Exécuter une macro en fonction d'une valeur dans une colonne
    Bonjour,
    j'ai besoin d'aide....
    J'ai créé une macro qui envoie un mail. Pour ce faire, j'ai créé un bouton. Ca fonctionne.
    Mais ce que je souhaiterais, c'est que cette macro se lance d'elle même si dans n'importe quelle cellule de la colonne N de ma feuille "multiservice" est indiqué le mot "Oui".

    Un grand merci pour votre aide.

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 753
    Points : 28 603
    Points
    28 603
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour lancer une procédure si une valeur est modifiée dans une feuille, on passe par une procédure événementielle soit Worksheet_Change si le changement ne se passe que dans une feuille soit par Workbook_SheetChange si l'événement peut avoir lieu dans plusieurs feuilles

    Pour en savoir plus, je conseille la lecture de
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Employé administratif
    Inscrit en
    Février 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Employé administratif

    Informations forums :
    Inscription : Février 2021
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour,
    un grandmerci.

    J'ai déjà testé plusieur marcro utilsant worksheet change. Mais je n'arrive pas à trouver celle qui recherche la valeur "oui" dans chaque cellule de la collonne n (cf. Mon expemple) et qui executerait ma ma macro MailOut

    Encore merci pour votre aide.

    bien à vous

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 753
    Points : 28 603
    Points
    28 603
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    La procédure événementielle Worksheet_Change a un argument nommé Target qui représente l'objet Range où a eu lieu le changement.

    Exemple d'une procédure qui affiche le message "Lancer l'envoi du mail" si la cellule (Target) où a eu lieu la modification dans la feuille où se trouve la procédure événementielle Worksheet_Change répond aux conditions énumérée ci-dessous
    L'objet Target
    • représente bien une seule cellule
    • se trouve dans un tableau structuré (ListObject)
    • se trouve dans la bonne colonne (étiquette "Mail" du tableau
    • sa valeur est Oui (non sensible à la casse)

    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
    Private Sub Worksheet_Change(ByVal Target As Range)
      Dim olist As ListObject
      Dim FirstColumn As Integer ' N° de colonne où débute le tableau
      With Target
        If .Count = 1 Then
           Set olist = .ListObject
           If Not olist Is Nothing Then
              FirstColumn = olist.Range.Column
              If .Column - FirstColumn + 1 = olist.ListColumns("Mail").Index Then
                 If StrComp(.Value, "Oui", vbTextCompare) = 0 Then
                   ' Ici la ligne de code pour invoquer la procédure d'envoi de mail
                    MsgBox "Lancer l'envoi du mail"
                 End If
              End If
           End If
        End If
      End With
      Set oList = Nothing
    End Sub
    Il suffit de remplacer la ligne 12

    Ces lignes de code auraient pu faire l'objet d'une procédure indépendante

    [EDIT]
    Ces lignes de code auraient pu faire l'objet d'une procédure indépendante
    Voici donc une proposition avec une procédure générique qui vérifie si la cellule (Target) où a eu lieu le changement de valeur se trouve bien dans un tableau structuré et dans la colonne nommé Mail

    Procédure à placer dans un module standard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Function IsTargetOk(Target As Range, Label As String) As Boolean
      Dim olist As ListObject
      Dim FirstColumn As Integer ' N° de colonne où débute le tableau
      With Target
        If .Count = 1 Then
           Set olist = .ListObject
           If Not olist Is Nothing Then
              FirstColumn = olist.Range.Column
              If .Column - FirstColumn + 1 = olist.ListColumns(Label).Index Then IsTargetOk = True
           End If
        End If
      End With
      Set olist = Nothing
    End Function
    Code allégé de la procédure événementielle Worksheet_Change
    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 IsTargetOk(Target, "Mail") Then
         If StrComp(Target.Value, "Oui", vbTextCompare) = 0 Then
            MsgBox "Lancer l'envoi du mail"
         End If
      End If
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 951
    Points
    55 951
    Billets dans le blog
    131
    Par défaut
    Salut Gwenna (ça vient de faire tilt... J'espère que tu vas bien )

    L'énoncé n'est pas forcément très clair. De ce que j'en comprends, le "OUI" ne doit pas forcément être sur la cellule qui est modifiée. Pour coller à la demande initiale => Envoyer un mail si OUI se trouve dans une colonne, voilà comment j'agirais.

    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 Evaluate("Countifs(tableau1[Mail],""OUI"")") > 0 Then SendMail
    End Sub
     
    Sub SendMail()
      MsgBox "Mail Envoyé"
    End Sub
    Le problème est que le "OUI" peut être le résultat d'une formule et donc la modification en "OUI" ne déclenche pas forcément l'évènement "Change". Pourrais-tu détailler ta situation et ton besoin? Une copie d'écran pourrait-être intéressante.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Employé administratif
    Inscrit en
    Février 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Employé administratif

    Informations forums :
    Inscription : Février 2021
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Je viens d'essayer et c'est ok ...ca marche...et ce Malgré la formule si qui amène le "oui"...Quel est le risque pour que ca ne fonctionne pas...?

    En tout cas un énorme merci

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/04/2013, 16h28
  2. Réponses: 0
    Dernier message: 09/07/2011, 21h52
  3. [AC-2003] Exécuter une macro en fonction d'un choix dans un formulaire
    Par chicabonux dans le forum IHM
    Réponses: 10
    Dernier message: 11/05/2010, 09h23
  4. lancer une macro en fonction de la valeur d'une cellule
    Par arkorrigan dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 11/06/2008, 17h18
  5. fonction récupérant des valeurs dans une fonction popup...
    Par petitsims dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/01/2005, 14h51

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