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 :

Comparer date avec VBA


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Comparer date avec VBA
    Bonsoir à tous, j'espère que vous passez une agréable journée ensoleillée : ) Je me permets de vous transmettre une problématique sur laquelle je bloque.

    Sur un tableau de saisies, j'ai deux colonnes J et K où sont renseignées des dates. Si date(J) > date (K) alors la colonne L renseigne le champ "oui" en guise de retard, sinon les cellules en (L) restent vides.

    Voilà ce que j'ai essayé pour le moment, si vous pouviez le commenter et/ou me diriger vers une meilleure piste (passé par les variables var par exemple)

    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
    option explicit
    Sub essai()
    Dim fichier As String
    Dim extension As String
    Dim chemin As String
    Dim date1 As Date
    Dim date2 As Date
    Dim tardif As String
    Application.ScreenUpdating = False
     
    Range("H1").Value = Date
    Range("G31").Value = "Mon nom et prénom"
     
    extension = ".xls"
    chemin = "C:\excel\"
    ActiveSheet.Copy
    fichier = Range("G31") & "-" & Range("E3") & extension
    probleme = Range("I" & Rows.Count).End(xlUp).Row + 1
    date1 = Range("J" & Rows.Count).End(xlUp).Row + 1
    date2 = Range("K" & Rows.Count).End(xlUp).Row + 1
     
    Application.ScreenUpdating = True
     
    If date1 ' je bloque sur cette partie du code, après avoir testé plein de possibilités ..
     
    With ActiveWorkbook
    .SaveAs Filename:=chemin & Day(Date) & "-" & Month(Date) & "-" & Year(Date) & "-" & fichier
    .Close
    End With
    ThisWorkbook.Save
    Application.Quit
    En attendant de vous lire, je vous remercie beaucoup de votre aide ! Excellente soirée.

  2. #2
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    Regarde l'aide sur DateDiff
    Renvoie une valeur de type Variant (Long) indiquant le nombre d'intervalles de temps entre deux dates données.
    Syntaxe
    DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]])
    La syntaxe de la fonction DateDiff comprend les arguments nommés suivants :
    Élément Description
    interval Expression de chaîne correspondant à l'intervalle de temps utilisé pour calculer la différence entre date1 et date2.
    date1
    , date2 De type Variant (Date), représentent les deux dates utilisées dans le calcul.
    firstdayofweek
    Facultatif. Constante précisant le premier jour de la semaine. Si aucune valeur n'est précisée, la valeur par défaut est dimanche.
    Firstweekofyear Facultatif. Constante précisant la première semaine de l'année. Si aucune valeur n'est précisée, la première semaine est par défaut celle du 1er janvier.
    Valeurs
    L'argument interval peut prendre les valeurs suivantes :
    Valeur Description
    yyyy Année
    q Trimestre
    m Mois
    y Jour de l'année
    d Jour
    w Jour de la semaine
    ww Semaine
    h Heure
    n Minute
    s Seconde
    PS sur ton code: Attention quand même, tu récupère dans ton code pour date1 et date2 le n° de la première ligne vide de tes colonnes

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Au temps pour moi, je n'avais pas capté la bourde, je corrige ma plage tout de suite. Je regarde tout ça avec le Datediff, merci.

  4. #4
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Bonjour,

    Tu peux commencer avec ce code qui utilise la fonction DateDiff indiquée par mercatog.
    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
    Sub Test()
    Dim DerLigneJ As Long
    Dim MaPlage As Range, Cel As Range
        With ThisWorkbook.Worksheets("Feuil1") 'Nom de la feuille, à adapter éventuellement.
            'Recherche du numéro de la dernière ligne renseignée dans la colonne J
            DerLigneJ = .Range("J" & Rows.Count).End(xlUp).Row
            'Définition de la plage de traitement (cellules renseignées de la colonne J)
            Set MaPlage = .Range("J2:J" & DerLigneJ)
            'Le traitement doit être effectué sur toutes les cellules de MaPlage
            For Each Cel In MaPlage
                'Si la cellule en colonne J et la cellule en colonne K sont des dates _
                (la cellule en colonne K étant celle décalée d'une colonne par rapport à J)
                If IsDate(Cel) And IsDate(Cel.Offset(0, 1)) Then
                    'On compare les 2 dates
                    'Si la date en J est supérieure à la date en K, on inscrit "Oui" en L
                    If DateDiff("d", Cel.Offset(0, 1), Cel) > 0 Then
                        Cel.Offset(0, 2) = "Oui"
                    Else
                        'Sinon, on vide la cellule
                        Cel.Offset(0, 2) = ""
                    End If
                Else
                    Cel.Offset(0, 2) = "SO"
                End If
            Next Cel
            'On libère la mémoire
            Set MaPlage = Nothing
        End With
    End Sub
    Cordialement.

Discussions similaires

  1. Comparer Date avec variable mois et année
    Par Brialex dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 26/11/2014, 17h52
  2. [Toutes versions] incrementation de date avec VBA
    Par info009 dans le forum Excel
    Réponses: 5
    Dernier message: 22/05/2014, 17h40
  3. Réponses: 2
    Dernier message: 08/07/2013, 13h39
  4. Comparer Date avec intervalle
    Par synolog dans le forum Langage
    Réponses: 4
    Dernier message: 06/06/2012, 10h42
  5. [AC-2003] Problème de dates avec VBA
    Par Ric500 dans le forum VBA Access
    Réponses: 5
    Dernier message: 13/09/2010, 17h39

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