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 :

Vérification présence date [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de m@tix
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 304
    Par défaut Vérification présence date
    Bonjour,

    Dans un classeur excel, la colonne A d’une feuille est constituée de dates sous la forme janv 11, fevr 11, mars 11, etc… (en réalité, il s’agit de 01/01/2011, 01/02/2011, 01/03/2011, etc..), et les cellules sont formatées en « mmm aa ».
    Je souhaiterais qu’à l’ouverture du classeur, une macro vérifie si la date du mois actuel est bien présente sur la cellule en dessous du mois précédent et à défaut, qu’elle soit créée sous le même formatage.

    Pouvez-vous m’aider pour cette macro svp ?

    J'avais déjà voulu commencer par rechercher via le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim le_mois As Date
     
    le_mois = Format(DateSerial(Year(Date), Month(Date), 1), "dd/mm/yyyy")
     
    Dim Cel As Range
     
    Set Cel = Workbooks("xxx").Worksheets("yyy").Columns(1).Find(le_mois, LookIn:=xlValues)
    Sans succès, ça ne trouve même pas que la date actuelle y est bien..

    Merci d'avance !

  2. #2
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Bonjour,

    Une solution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Range("A" & Range("A:A").End(xlDown).Row).Value <> CDate("01/" & Month(Now) & "/" & Year(Now)) Then
        Range("A" & Range("A:A").End(xlDown).Row + 1).Value = CDate("01/" & Month(Now) & "/" & Year(Now))
    End If

  3. #3
    Membre éclairé Avatar de m@tix
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 304
    Par défaut
    Bonjour jfontaine,

    Merci pour ta réponse.
    Mais j'ai l'impression qu'avec ton code, dès qu'on va trouver une cellule dans la colonne A qui ne contient pas la date actuelle, alors on va l'y mettre... C''est d'ailleurs vérifé en l'exécutant. Alors que j'aimerais que la date actuelle soit rajoutée en fin de colonne A si, et seulement si elle n'y est pas déjà. Dis-moi si tout n'est pas clair..

    P.S.: pourquoi mon premier code ne fonctionne pas pour trouver si la date actuelle est présente ?

  4. #4
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    En effet je suis partis avec l'hypothèse que les période était dans l'ordre

    il faut ajouter cette ligne a ton code, sinon c'est bon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Dim le_mois As Date
     
    le_mois = Format(DateSerial(Year(Date), Month(Date), 1), "dd/mm/yyyy")
     
    Dim Cel As Range
     
    Set Cel = Workbooks("xxx").Worksheets("yyy").Columns(1).Find(le_mois, LookIn:=xlValues)
     
    If Cel Is Nothing Then Workbooks("xxx").Worksheets("yyy").Range("A" & Range("A:A").End(xlDown).Row + 1).Value = le_mois

  5. #5
    Membre éclairé Avatar de m@tix
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 304
    Par défaut
    Mon problème reste le même malheureusement.

    En testant ça, je rentre dans le If alors que 01/08/2011 est déjà présent sur la colonne A... Cel est à Nothing.

  6. #6
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Workbook_Open()
     
    With Worksheets(1)
        If DateDiff("m", Date, Application.Max(.Range("A:A"))) <> 0 Then
            With .Cells(.Rows.Count, "A").End(xlUp)(2)
                .Value = DateValue("01/" & Format(Date, "mm/yyyy"))
                .NumberFormat = "mmm yyyy"
            End With
        End If
    End With
    End Sub

  7. #7
    Membre éclairé Avatar de m@tix
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 304
    Par défaut
    Bonjour mercatog,

    Merci pour ton aide. Cependant, je ne comprends pas bien ce que fait ton code.. Peux-tu expliquer stp ?

    Mon interrogation précédente reste cependant toujours valable..

  8. #8
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Ca fonctionne si tu mets xlFormulas au lieu de xlValues
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Cel = Me.Columns(1).Find(le_mois, LookIn:=xlFormulas)

  9. #9
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut recherche de date
    Bonjour,

    Si je peux me permettre de rebondir sur la remarque de l'ami Jérôme, un très bon exposé à ce sujet sur le laboratoire (déjà cité) :

    Rechercher une date

  10. #10
    Membre éclairé Avatar de m@tix
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 304
    Par défaut
    Toujours pas non...

  11. #11
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par m@tix Voir le message
    B...
    Je souhaiterais qu’à l’ouverture du classeur, une macro vérifie si la date du mois actuel est bien présente sur la cellule en dessous du mois précédent et à défaut, qu’elle soit créée sous le même formatage....
    Quand tu dis cela cela ne revient pas à contrôler que la dernière ligne de ton tableau contient en colonne A la date du premier jour du mois courant ?

    @jpfontaine juste une petite remarqe pour :

    Citation Envoyé par jfontaine Voir le message
    Je ne sais quoi te dire

    Ce code fonctionne parfaitement sur mon poste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim le_mois As Date
     
    le_mois = Format(DateSerial(Year(Date), Month(Date), 1), "dd/mm/yyyy")
     
    Dim Cel As Range
     
    Set Cel = Me.Columns(1).Find(le_mois, LookIn:=xlFormulas)
     
    If Cel Is Nothing Then me.Range("A" & Range("A:A").End(xlDown).Row + 1).Value = le_mois
    Tu mélange des type de données (string et date) ton formatage ne sert à rien la fonction "Format" qui envoi une chaine de caractére (un String) ne sert à rien la ...
    pour définir ta date utilise seulement DateSerial qui renvoi une valeur de type Date

  12. #12
    Membre éclairé Avatar de m@tix
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 304
    Par défaut
    Ok, voici en pièce-jointe mon fichier avec uniquement la colonne A.

    En effet bbil pour ta remarque, mais c'est moi qui avais écrit le début du code, donc n'en veux pas à jfontaine.

    Ok mercatog, merci, je n'avais pas bien compris ce que faisait la fonction DateDiff en fait (malgré l'aide).

    Edit: je viens de fermer le fichier et de le réouvrir: ça fonctionne... Les mystères de l'info.. (je retire donc la pj).

  13. #13
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Tu mélange des type de données (string et date) ton formatage ne sert à rien la fonction "Format" qui envoi une chaine de caractére (un String) ne sert à rien la ...
    pour définir ta date utilise seulement DateSerial qui renvoi une valeur de type Date
    En effet, je n'ai pas analysé cette partie de code fournie par m@tix

    il est normal que la macro n'ajoute rien car la période existe ligne 266


    edit : de plus si inexistant, le code d'ajout met la période sur la première ligne vide qu'il trouve

  14. #14
    Membre éclairé Avatar de m@tix
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 304
    Par défaut
    Citation Envoyé par jfontaine Voir le message
    il est normal que la macro n'ajoute rien car la période existe ligne 266
    Ce n'était pas ça le souci en fait, ce qui n'allait pas était le fait que la variable Cel restait à Nothing... alors que la période est bien là comme tu dis.

  15. #15
    Membre éclairé Avatar de m@tix
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 304
    Par défaut
    Citation Envoyé par jfontaine Voir le message
    edit : de plus si inexistant, le code d'ajout met la période sur la première ligne vide qu'il trouve
    Ah oui en effet, ça ne va pas alors.. J'aimerais si possible qu'on l'ajoute en dessous du mois précédent la date actuelle (qui lui devrait être présent). Ou, dit autrement, sur la dernière cellule non remplie de la colonne. Cela devrait revenir au même.

    Edit: avec ça, ça devrait sûrement faire l'affaire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim Cel As Range
     
    Set Cel = Workbooks("xxx").Worksheets("yyy").Columns(1).Find(le_mois, LookIn:=xlFormulas)
     
    If Cel Is Nothing Then
     
        Workbooks("xxx").Worksheets("yyy").Range("A65536").End(xlUp).Value = le_mois
     
    End If

  16. #16
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par jfontaine Voir le message
    En effet, je n'ai pas analysé cette partie de code fournie par m@tix
    oups désolé pour l'erreur de destinataire j'avais pas lu tous les codes ...



    m@tix , tu ne m'as pas répondu ... pourquoi as tu besoin de faire une recherche ? la dernière ligne de ton tableau ne doit pas correspondre au mois courant ?

  17. #17
    Membre éclairé Avatar de m@tix
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 304
    Par défaut
    Citation Envoyé par bbil Voir le message
    m@tix , tu ne m'as pas répondu ... pourquoi as tu besoin de faire une recherche ? la dernière ligne de ton tableau ne doit pas correspondre au mois courant ?
    En principe si, c'était juste une précaution, pour voir si elle y était déjà ailleurs, par erreur.

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

Discussions similaires

  1. vérification de date
    Par mariafan dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 29/12/2006, 15h31
  2. vérification de date
    Par arnogef dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 30/11/2006, 18h23
  3. [MySQL] Probleme script concernant vérification de dates
    Par bilou95 dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 10/10/2006, 13h37
  4. Vérification de date [SQL SERVER 2K]
    Par gwadakillah dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 03/07/2006, 15h17
  5. vérifications des dates
    Par smail21 dans le forum Bases de données
    Réponses: 5
    Dernier message: 05/11/2005, 16h02

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