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 :

Application.Dialogs(xlDialogSendMail) -> éviter un doublon


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Responsable en conduite du changement
    Inscrit en
    Mai 2023
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Responsable en conduite du changement

    Informations forums :
    Inscription : Mai 2023
    Messages : 3
    Par défaut Application.Dialogs(xlDialogSendMail) -> éviter un doublon
    Bonjour à tous,
    Des lustres que je n'ai pas fait de macro Vba et aujourd'hui obligé de m'y recoller
    Un souci donc et je sèche !
    Le contexte : un fichier qui contient 2 pages et la même macro à faire tourner sur ces deux pages à la fermeture du fichier pour créer, suivant la condition, un mail pour alerter les intéressés.
    Le souci : comme je fais tourner la même macro sur les deux pages, il peut y avoir, potentiellement, 2 fois la création d'un mail à envoyer.
    Le coup de patte : y aurait-il un moyen pour éviter qu'il y ait par deux fois la création du mail, un suffit car c'est simplement pour une alerte sans distinction entre les pages du fichier ?

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
     
        'DoMacro()
        Dim xSh As Worksheet, ret As Integer
     
            ret = MsgBox(" Voulez-vous que la macro s'execute en sortie de fichier ? ", vbYesNo)
            If ret = vbNo Then
                Exit Sub
            Else
     
        Application.ScreenUpdating = False
        For Each xSh In Worksheets
            xSh.Select
            Call RunCode
        Next
        Application.ScreenUpdating = True
     
    End If
    End Sub
     
     
    Sub RunCode()
    'Sub Macro1()
    ' vérification des valeurs règles PingCastle et envoi de message si différentes
    '
    Dim NumRows, i As Integer
    'Sheets("Règles").Activate
     
    NumRows = Range("A1", Range("A1").End(xlDown)).Rows.Count   'Compte le nombre de lignes à partir de A1
    Range("B" & NumRows).Select   'Positionnement curseur sur dernière ligne en colonne B
     
    i = 2
     
    For Boucle = i To 5   'Boucle
        If Cells(NumRows, i).Value > Cells((NumRows - 1), i).Value Or Cells(NumRows, i).Value <> Cells((NumRows - 1), i).Value Or Cells(NumRows, i).Value <> Cells((NumRows - 1), i).Value Or Cells(NumRows, i).Value <> Cells((NumRows - 1), i).Value Then
        Application.Dialogs(xlDialogSendMail).Show arg1:=Array("contact1@xxx", "contact2@xxx"), arg2:="Alerte indicateurs PingCastle sur les scores et règles"  'Ouverture d'une message boxe pour prévenir d'une différence de valeurs
     
        End If
     
    i = i + 1
    Next Boucle
     
    End Sub

  2. #2
    Membre émérite
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2022
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2022
    Messages : 685
    Par défaut
    Bonjour,

    Peut être gérer un retour de runcode pour savoir si tu as envoyé un mail. Si on en profite pour virer le vilain select et les range sans référence, et revoir la boucle dans runcode (je suppose que tu veux envoyer le mail si sur la dernière ligne, une des valeurs des colonnes B à E est différente de la ligne précédente)...

    ... ça pourrait donner (non testé, on est pas à l'abri d'une coquille) :

    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
    24
    Dim NbMail as Integer
    Application.ScreenUpdating = False
    For Each xSh In Worksheets
            xSh.Select
            NbMail = RunCode(xSh )
            if nbMail >0 then Exit For
    Next xSh 
    Application.ScreenUpdating = True
     
    .../...
    Function RunCode(xSh as Worksheet) as integer
    Dim i as Integer, j as integer
    Dim OK as boolean
    OK= True 
    i = xSh.Range("A1").End(xlDown)).Row   'Compte le nombre de lignes à partir de A1
     
    For j = 2 To 5   'Boucle sur colonnes
        If xSh.Cells(i, j).Value <> xSh.Cells(i - 1, j).Value  Then OK= False
    Next j
    If not OK then
         Application.Dialogs(xlDialogSendMail).Show arg1:=Array("contact1@xxx", "contact2@xxx"), arg2:="Alerte indicateurs PingCastle sur les scores et règles"  'Ouverture d'une message boxe pour prévenir d'une différence de valeurs
         RunCode= 1
    Endif
    End Function
    J'ai aussi viré le Boucle qui me semblait très louche et très inutile.
    J'ai supposé que le > au lieu de <> sur la première colonne était une erreur de frappe, sinon il faudra revoir un peu la boucle de test.

  3. #3
    Candidat au Club
    Homme Profil pro
    Responsable en conduite du changement
    Inscrit en
    Mai 2023
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Responsable en conduite du changement

    Informations forums :
    Inscription : Mai 2023
    Messages : 3
    Par défaut
    Merci beucoup du coup d'oeil et des corrections apportées... je vais tester ça.
    Pour le > effectivement, erreur de frappe. J'avais pas "réfléchi" en globalité sur les colonnes mais colonne par colonne en oubliant de simplifier du coup... quand on est la tête dans le guidon, surtout après plusieurs années d'interruption, y'a plein de choses qui peuvent passer à l'as du coup
    En tout cas merci de ton aide, je regarde...

  4. #4
    Candidat au Club
    Homme Profil pro
    Responsable en conduite du changement
    Inscrit en
    Mai 2023
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Responsable en conduite du changement

    Informations forums :
    Inscription : Mai 2023
    Messages : 3
    Par défaut
    @Tête de chat :

    Impec, ça fonctionne tout bien, juste une coquille de frappe à corriger... une parenthèse de trop après le xlDown
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    i = xSh.Range("A1").End(xlDown)).Row
    Encore merci du coup de patte qui m'a fait gagner un temps précieux

Discussions similaires

  1. Réponses: 0
    Dernier message: 03/11/2016, 20h49
  2. éviter les doublons requete insertion
    Par warraf dans le forum Access
    Réponses: 5
    Dernier message: 29/11/2005, 13h53
  3. Comment éviter les doublons dans ma table
    Par einegel dans le forum Bases de données
    Réponses: 3
    Dernier message: 09/11/2004, 12h18
  4. Éviter les doublons dans une requete
    Par royrremi dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 03/08/2004, 19h37
  5. Une application Dialog based pas rectangulaire....
    Par feed_our_vision dans le forum MFC
    Réponses: 2
    Dernier message: 14/06/2004, 10h10

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