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 :

Afficher pop-up automatiquement dans excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Chargé de formation
    Inscrit en
    Juillet 2016
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chargé de formation
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Juillet 2016
    Messages : 85
    Par défaut Afficher pop-up automatiquement dans excel
    Bonjour très cher toutes et tous,

    Je sollicite la communauté afin de pouvoir avoir des alertes sur mon fichier.

    Je m'explique:

    J'ai un classeur Excel avec le nom des futurs collaborateurs qui intègrent la société et le nom de so n manager respectif . Il y a une colonne avec la date de début de contrat intitulé "date de de début de contrat" et une colonne avec Rh qui renseigne si nous avons reçu les documents obligatoires au déclaratif intitulé "RH".

    Je souhaiterais qu'à l'ouverture du fichier un msg box s'affiche en mettant un message du style "ce collaborateur démarre dans 5 jours merci de prévenir nom du manager(nom qui est dans la colonne du tableau") lorsque la date de contrat est à j-5.
    Et d'avoir également un message dans la message box qui me dit contacter la RH pour voir si le déclaratif a été fait, lorsque la date de démarrage est a j+1.

    Mon vba est fragile comment arriver à faire cela.

    Merci par avance

  2. #2
    Membre émérite
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Par défaut
    Dans le module ThisWorkbook, créez la procédure suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_Open()
       'Intégrez ici le code voulu
    End Sub
    Attention, le code ne sera exécuté qu'une fois les macros activées.

  3. #3
    Membre confirmé
    Homme Profil pro
    Chargé de formation
    Inscrit en
    Juillet 2016
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chargé de formation
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Juillet 2016
    Messages : 85
    Par défaut
    Désolé mais quel est le code, mon niveau sur VBA est tres insuffisant.

  4. #4
    Membre émérite
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Par défaut
    Pour envoyer un message à l'utilisateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    NomPersonne = ThisWorkbook.Sheets("Feuil1").Range("A2").Text
    MsgBox "Ceci est un message concernant la ressource " & NomPersonne & "."
    Pour vérifier que vos critères sont respectés avant d'envoyer un message, je pense que vous pouvez vous débrouiller. L'écriture d'un simple test doit être dans vos cordes

  5. #5
    Membre confirmé
    Homme Profil pro
    Chargé de formation
    Inscrit en
    Juillet 2016
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chargé de formation
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Juillet 2016
    Messages : 85
    Par défaut
    Merci

    Petite question
    Nom personne = dois je nommer les plages Nom personne?
    Range(a2).Text renvoie a quoi?

  6. #6
    Membre émérite
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Par défaut
    NomPersonne est ici une variable à utiliser pour stocker une valeur, en l'occurrence le nom de la ressource, que vous allez chercher dans les cellules Excel.

    Pour Range("A2").Text, je ne puis que vous conseiller de vous référer à l'aide en ligne...
    Et plus généralement, avant de lancer une question sur un forum en espérant que quelqu'un fasse le travail à votre place, cherchez donc par vous même à apprendre les bases du VBA.
    Ce ne sont pas les ressources qui manquent

    Bonne fin de journée à vous

  7. #7
    Membre confirmé
    Homme Profil pro
    Chargé de formation
    Inscrit en
    Juillet 2016
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chargé de formation
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Juillet 2016
    Messages : 85
    Par défaut
    Je ne cherche pas à faire faire par les gens je rentre un débogage mais je ne sais pas d'où cela peux venir

    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
    Option Explicit
    Private Sub Workbook_Open()
    Dim Cel As Range
    Dim Ecart As Long
    Dim Msg As String
        With Worksheets("Nouveaux entrants")
            For Each Cel In .Range("I2:I" & .Range("A" & Rows.Count).End(xlUp).Row)
                If DateDiff("d", Now, Cel.Value) < 0 Then
                    Ecart = 0
                Else
                    Ecart = DateDiff("d", Now, Cel.Value)
                End If
                Select Case Ecart
                Case 1 To 15
                    Msg = Msg & "Nouveaux entrants " & Cel.Offset(0, -4) & " pour " & Cel.Offset(0, -6) _
                    & ", mat " & Cel.Offset(0, -7) & " arrive à échéance dans " & Cel.Offset(0, 1) & " jours." & Chr(10)
                Case 0
                    Msg = Msg & "Nouveaux entrants " & Cel.Offset(0, -4) & " pour " & Cel.Offset(0, -6) _
                    & ", mat " & Cel.Offset(0, -7) & " débute dans 5 jours." & Chr(10)
                End Select
            Next Cel
            MsgBox Msg
        End With
    End Sub
    Cette action VBA ne marche pas
    De plus je cherche juste à voir ce qui démarre dans 5 jours ou moins

  8. #8
    Membre émérite
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Par défaut
    Vous souhaitez savoir ce qui démarre dans 5 jours ou moins, mais votre code ne contient pas le chiffre 5. N'est-ce pas étrange ?
    Essayez donc ceci :
    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
    Private Sub Workbook_Open()
        Dim Cel As Range, Msg As String
        With Worksheets("Nouveaux entrants")
            For Each Cel In .Range("I2:I" & .Range("A" & Rows.Count).End(xlUp).Row)
                If DateDiff("d", Now, Cel.Value) <= 5 Then
                    Msg = Msg & "Nouveaux entrants " & Cel.Offset(0, -4) & " pour " & Cel.Offset(0, -6) _
                          & ", mat " & Cel.Offset(0, -7) & " débute dans 5 jours (ou moins)." & Chr(10)
                ElseIf DateDiff("d", Now, Cel.Value) <= 15 Then
                    Msg = Msg & "Nouveaux entrants " & Cel.Offset(0, -4) & " pour " & Cel.Offset(0, -6) & ", mat " _
                          & Cel.Offset(0, -7) & " arrive à échéance dans " & Cel.Offset(0, 1) & " jours." & Chr(10)
                End If
            Next Cel
            MsgBox Msg
        End With
    End Sub
    Il semblerait plus logique de séparer clairement les personnes pour lesquelles agir est urgent de celles pour lesquelles il s'agit d'une simple info.
    Par exemple en utilisant plusieurs variables pour construire le message. Et bien sûr en stockant le texte de la MsgBox quelque part afin que l'utilisateur puisse s'y référer si le nombre de nouveaux entrants est important.

  9. #9
    Membre confirmé
    Homme Profil pro
    Chargé de formation
    Inscrit en
    Juillet 2016
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chargé de formation
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Juillet 2016
    Messages : 85
    Par défaut
    Merci pour ce retour

    Je rencontre juste un problème avec la date à l'échéance, il me selectionne tout le monde et ne fais pas encore la différence. je pense qu'il choisis la mauvaise cell.offset mais je ne suis pas sure

  10. #10
    Membre émérite
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Par défaut
    Tel qu'écrit à l'heure actuelle, le code va chercher les infos dans les colonnes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "Nouveaux entrants " <Col. E> " pour " <Col. C> ", mat " <Col. B> " arrive à échéance dans " <Col. J> " jours."
    A vous de voir si cela correspond effectivement à la structure de votre onglet.

  11. #11
    Membre confirmé
    Homme Profil pro
    Chargé de formation
    Inscrit en
    Juillet 2016
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chargé de formation
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Juillet 2016
    Messages : 85
    Par défaut
    Le probleme c'est que le code VBA va effectivement chercher les bonne sinfos le probleme c'st que je souhaiterais ne voir que ceux dont l'échéance est =ou < à 5 jours. Or je vois tout le monde dans mon message d'alerte y compris ceux qui ont debuté en 2014

  12. #12
    Membre émérite
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Par défaut
    Dans ce cas, essayez la correction suivante :
    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 Workbook_Open()
        Dim Cel As Range, Msg As String, dDif As Double
        With Worksheets("Nouveaux entrants")
            For Each Cel In .Range("I2:I" & .Range("A" & Rows.Count).End(xlUp).Row)
                dDif = DateDiff("d", Now, Cel.Value)
                If dDif > 0 Then
                    If dDif <= 5 Then
                        Msg = Msg & "Nouveaux entrants " & Cel.Offset(0, -4) & " pour " & Cel.Offset(0, -6) _
                              & ", mat " & Cel.Offset(0, -7) & " débute dans 5 jours (ou moins)." & Chr(10)
                    ElseIf dDif <= 15 Then
                         Msg = Msg & "Nouveaux entrants " & Cel.Offset(0, -4) & " pour " & Cel.Offset(0, -6) & ", mat " _
                              & Cel.Offset(0, -7) & " arrive à échéance dans " & Cel.Offset(0, 1) & " jours." & Chr(10)
                    End If
                End If
            Next Cel
            MsgBox Msg
        End With
    End Sub
    Il reste cependant un problème : lorsque la date d'arrivée d'une ressource est dépassée, plus aucun message n'est envoyé, même si rien n'a été fait la concernant...

  13. #13
    Membre confirmé
    Homme Profil pro
    Chargé de formation
    Inscrit en
    Juillet 2016
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chargé de formation
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Juillet 2016
    Messages : 85
    Par défaut


    Magnifique, ca marche à merveille.
    Je ne souhaite pas déclencher une action particulière après la date butoir car comme les actions qui en découlent sont importantes tout être fait dans le laps de temps de j-5
    après il est vrai qu'en cas de départ en congés et si personne n'ouvre le fichier il n'y a pas la possibilité de cocher une case pour dire fait

  14. #14
    Membre confirmé
    Homme Profil pro
    Chargé de formation
    Inscrit en
    Juillet 2016
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chargé de formation
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Juillet 2016
    Messages : 85
    Par défaut
    J'ai adapté cette formule à un autre tableau néanmoins, le code m'affiche un pop up vide et je ne crois pas pourquoi

    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 Workbook_Open()
        Dim Cel As Range, Msg As String, dDif As Double
        With Worksheets("rapport")
            For Each Cel In .Range("w13:w" & .Range("A" & Rows.Count).End(xlUp).Row)
                dDif = DateDiff("d", Now, Cel.Value)
                If dDif > 0 Then
                    If dDif <= 5 Then
                        Msg = Msg & "Nouveaux entrants " & Cel.Offset(0, -4) & " pour " & Cel.Offset(0, -6) _
                              & ", mat " & Cel.Offset(0, -7) & " débute dans 5 jours (ou moins)." & Chr(10)
                    ElseIf dDif <= 600 Then
                         Msg = Msg & "Nouveaux entrants " & Cel.Offset(0, -4) & " pour " & Cel.Offset(0, -6) & ", mat " _
                              & Cel.Offset(0, -7) & " arrive à échéance dans " & Cel.Offset(0, 20) & " jours." & Chr(10)
                    End If
                End If
            Next Cel
            MsgBox Msg
        End With
    End Sub
    la colonne W comprend les dates de démarrage

  15. #15
    Rédacteur/Modérateur


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.


    Personnellement, pour commencer en VBA, je ferais ceci:
    • mise en forme conditionnelle des cellules ou lignes de la table des collaborateurs lorsque début de contrat dans J-5;
    • à l'ouverture du classeur, activation de la feuille concernée et éventuellement filtre sur la condition.



    A mon avis, plus simple, plus rapide et plus souple qu'une boucle et qu'un msgbox, pour un résultat équivalent, à savoir alerter sur les personnes dont il faut s'occuper. Qui plus est, le jour où la condition change, tu adaptes plus facilement ton classeur.
    "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...
    ---------------

  16. #16
    Membre émérite
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Par défaut
    Bonjour,

    Le seul cas où la pop-up finale peut être vide, c'est celui où toutes les cellules passées en revue dans la colonne W ont une valeur négative, nulle ou supérieure à 600.
    Plusieurs raisons possibles à cela :
    • Aucune cellule n'est passée en revue car .Range("A" & Rows.Count).End(xlUp).Row est inférieur à 13 ;
    • Le format des cellules de la colonne W n'est pas un format date ;
    • Les dates dans la colonne W sont effectivement antérieure à la date du jour, ou postérieure à la date du jour + 600 jours.


    EDIT: Je n'avais pas vu le message de Pierre, mais après lecture je ne peux qu'être d'accord avec lui.

  17. #17
    Membre confirmé
    Homme Profil pro
    Chargé de formation
    Inscrit en
    Juillet 2016
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chargé de formation
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Juillet 2016
    Messages : 85
    Par défaut
    Bonjour,


    Oui en effet j'ai revu ma base par contre j'ai un souci sur les dates dans ma mise en forme conditionnelle.

    En effet, j'ai en formule dans MFC si date d'échéance dépasse date du jour colorier la ligne en rouge.
    Mais du coup les lignes qui sont coloriés sont fausses et je ne comprend pas

  18. #18
    Rédacteur/Modérateur


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Peut-être un souci de référence relative (ou absolue) dans les références utilisées dans la formule de la MFC. Une MFC formulée comprend les références relatives par rapport à la cellule active au moment de la création de la MFC. Il faut donc être particulièrement attentif à la cellule active à ce moment-là. Pour une MFC qui marque "une ligne" (en fait chaque cellule de la ligne), j'ai pour habitude de sélectionner la cellule de la première ligne et première colonne de la plage de données.

    Pourrais-tu donner la formule utilisée, et éventuellement une copie d'écran si les données visibles ne sont pas confidentielles?
    "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...
    ---------------

  19. #19
    Membre confirmé
    Homme Profil pro
    Chargé de formation
    Inscrit en
    Juillet 2016
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chargé de formation
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Juillet 2016
    Messages : 85
    Par défaut
    Bonjour,

    Je vous joints un exemple de fichier avec mfc qui comprend des erreurs. Je demande en formule à colorier les lignes pour les personnes qui démarrent un stage à une date avant leur retour d'arrêt.
    La formule me colorie les mauvaises personnes et quelquefois les bonnes, je ne saisi pas la logique. Ci-joint un extrait du fichier.

    Cordialement,
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. [Toutes versions] Afficher un calendrier Outlook dans Excel
    Par Antoun dans le forum VBA Outlook
    Réponses: 0
    Dernier message: 24/07/2013, 10h46
  2. Comment doubler des lignes automatiquement dans excel?
    Par kisscool943 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/09/2011, 15h26
  3. images inserees automatiquement dans excel
    Par missvai dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 25/11/2008, 09h41
  4. Enregistrement automatique dans Excel
    Par kfmystik dans le forum Excel
    Réponses: 2
    Dernier message: 01/08/2008, 11h37

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