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 :

Créer une alerte lorsqu'une date dans le tableau correspond à la date du jour


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Juillet 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2020
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Créer une alerte lorsqu'une date dans le tableau correspond à la date du jour
    Bonjour,

    J'ai besoin du code qui me permettrait d'avoir une boite de dialogue à l'ouverture de mon fichier excel, lorsqu'une date notée dans le tableau correspond à la date d'aujourd'hui. Et il faut que la boite indique le nom de la personne correspondante (sur la même ligne).

    Merci par avance!

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Une idée, un truc du genre :

    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
    public function LirePersonneDuJour() as variant
        'Trouve le nom de la personne en date du jour.
        'Retourne Null si pas trouvé.
     
        dim result as  variant:result=null
        dim zone as range
        set zone=thisWorkbook.Worksheets("ListeDatePersonne").Columns("A") 'Suppose que les date sont dans la colonne A de la feuille [ListeDatePersonne]
        dim cell as range
        set cell=zone.Find(date)
     
        if not cell is nothing
            'On a trouvé la date
            'nbColonne doit être le nombre de colonnes entre la colonne des dates et celle des noms -1 (ex : si les noms sont dans la colonne B, nbColonne doit être 1).
            result=cell.offset(0, nbColonne).Value
        end if
     
        LirePersonneDuJour=result
    end function
    Dans ThisWorkBook
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Workbook_Open()
     
        dim nomPersonneDuJour as variant: nomPersonneDuJour=LirePersonneDuJour()
     
        if not isnull(nomPersonneDuJour ) then
            msgbox "Trouvé " & nomPersonneDuJour  & " en date du " & Date
       end if
     
    End Sub
    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Juillet 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2020
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci pour votre réponse !
    Je ne m'y connais pas du tout en code Est-ce que je dois recopier l'un des 2 codes sans rien changer ou adapter selon l'intitulé des colonnes ?

    Ma colonne avec le nom des personnes s'intitule "REMPLACANT NOM PRENOM" et la colonne avec la date s'intitule "Date limite pour la prochaine évaluation". Ces colonnes ne sont pas toujours fixes (certaines colonnes sont ajoutées, supprimées…)

    Merci par avance!

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Oui il faut copier et adapter mais mon code suppose une structure fixe de pour retrouver ses données.
    Avec une structure variable c'est plus compliqué.
    Et peut-être serait-ce plus facile à faire avec une formule au lieu de code VBA.
    Tu n'aurai pas un message qui s'affiche dans une fenêtre mais tu pourrais avoir une cellule dans une feuille.

    Pourrais-tu poster une copie d'écran de ta feuille source ? (Pense à masquer ou brouiller les données nominatives).
    Et indiquer où les variations de colonnes se produisent ?

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  5. #5
    Nouveau Candidat au Club
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Juillet 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2020
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci marot_r

    Voici une copie d'écran, un extrait du tableau Nom : Composition1.jpg
Affichages : 83
Taille : 254,4 Ko

    C'est la colonne F qui est susceptible de disparaître.

    Les colonnes L et P sont celles qui m'intéressent.

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    J'ai modifié le code pour qu'il trouve les bonnes colonnes tout seul.

    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
    public function LirePersonneDuJour() as variant
        'Trouve le nom de la personne en date du jour.
        'Retourne Null si pas trouvé.
     
        dim result as  variant:result=null
        dim feuille as worksheet: set feuille=thisWorkbook.Worksheets("ListeDatePersonne") 'Mettre ici le nom de la feuille qui contient la liste
     
        'Trouve la colonne des noms
        dim cell_entete_remplacant as range
        set cell_entete_remplacant=feuille.rows(6).Find("REMPLACANT NOM PRENOM")
     
        'Trouve la colonne des dates
        dim cell_entete_date as range
        set cell_entete_date=feuille.rows(6).Find("Date limite pour la prochaine évaluation")
     
        'Calcul le décalage horizontale entre les colonnes
        dim offset as long:offset=cellule_entete_remplacant - cell_entete_date + 1
     
        dim zone_date as range
        set zone_date=feuille.Columns(cell_entete_date.column) 
     
        dim cell as range
        set cell=zone.Find(date)
     
        if not cell is nothing
            'On a trouvé la date, prenons le nom correspondant
            result=cell.offset(0, offset ).Value 'Nom correspondant
        end if
     
        LirePersonneDuJour=result
     
        'Libère la mémoire utilisée.
        set zone_date=nothing
        set cell_entete_remplacant=nothing
        set cell_entete_date=nothing
        set feuille=nothing
     
    end function
    Tu peux le mettre dans ThisWorkbok avec l'autre code.
    Pour accéder au code appuis sur les touches [alt][f11].
    À gauche tu va avoir tes feuilles et en bas ThisWorkbook qui est ton classeur courant.
    Tu copies les 2 codes là et tu ajustes la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dim feuille as worksheet: set feuille=thisWorkbook.Worksheets("ListeDatePersonne") 'Mettre ici le nom de la feuille qui contient la liste
    Pour indiquer entre les guillemets (") le nom de la feuille qui contient ta liste dans ton classeur.
    Et il faut sauvegarder ton classeur au format xlsm si ce n'est pas déjà fait.

    Note que je n'ai pas testé ce code donc il pourrait y avoir des erreurs.
    J'ai un petit doute sur ma formule de calcul de l'offset.

    Donc si tu as une erreur, poste :
    • Le message d'erreur indiqué par le système.
    • La ligne sur laquelle l'erreur a été détecté.
    • Si il n'y a pas de message et que tu n'obtiens pas le résultat voulu, indique ce que tu attendais et ce que tu as eu.


    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  7. #7
    Membre chevronné Avatar de mfoxy
    Homme Profil pro
    Automation VBA
    Inscrit en
    Février 2018
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Automation VBA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Points : 1 971
    Points
    1 971
    Par défaut
    Bonjour,

    Il est dommage d'utiliser un simple range au lieu de listObject dans une version 2016 d'excel.

    Ça éviterait notamment de devoir faire des finds sur les en-tête de colonne.

    Dans le cas d'un listObject, j'ajouterais simplement une colonne avec une formule conditionnelle si datex égal date du jour, et un simple filtre ou boucle sur les cellule répondant positif à cette condition, la problématique serait résolue en moins de 10 lignes de code.

    Et sans une seule ligne de code, via Power Query, on il suffirait d'un refresh pour voir les lignes concernées.

    Bav
    Michaël

    Si mon aide/avis vous a été profitable , n'hésitez pas à cliquer sur , ça fait toujours plaisir...
    _________________________________________________________________________________________________________________

    "Tout le monde est un génie. Mais si on juge un poisson sur sa capacité à grimper à un arbre, il passera sa vie à croire qu'il est stupide..."
    Albert Einstein

  8. #8
    Nouveau Candidat au Club
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Juillet 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2020
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci marot_r

    C'est la 1ère fois que je rentre du "code" sur excel alors pardonnez mon ignorance…

    J'ai cliqué dans "développeur" puis "visual basic" et j'ai copié le code que vous m'avez donné dans "ThisWorkbook".

    J'ai mis le nom de la feuille à la place de 'Mettre ici le nom de la feuille qui contient la liste (est-ce qu'il fallait mettre des guillemets autour du nom de la feuille ?)

    Nom : Composition2.jpg
Affichages : 66
Taille : 187,4 Ko

    Cela ne fonctionne pas donc j'ai sûrement loupé quelque chose… vous parlez de 2 codes ? quel est le second ? doivent-ils se suivre dans "ThisWorkbook" ?
    J'ai enregistré le fichier sous le format "classeur excel prenant en charge des macros".

    Encore merci …

    N.

Discussions similaires

  1. [XL-2010] Créer une symétrie dans un tableau
    Par alphakhan dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 17/10/2019, 19h19
  2. comment créer une date dans un champ input de type text
    Par le maire dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 05/06/2014, 11h58
  3. Réponses: 3
    Dernier message: 20/05/2009, 13h33
  4. Créer une arborescence dans un tableau
    Par npirard dans le forum Zend Framework
    Réponses: 5
    Dernier message: 05/03/2008, 14h40
  5. Créer une série dans un chart
    Par cyrose dans le forum C++Builder
    Réponses: 5
    Dernier message: 28/11/2002, 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