Problème "Date - VBA"

Bonjour tout le monde,

A chaque jour son soucis

Je viens vers vous car j'avoue ne pas comprendre pourquoi ma macro ne fonctionne pas comme il faut ...

Mon problème est le suivant :

Lorsque j'exécute la macro sur des cases où la date est bien aujourd'hui il me renvoi un "2" alors qu'il devrait renvoyer un "1"

Voici ma formule (j'espère qu'elle vous suffira car le fichier est très lourd je ne sais pas si je pourrais le partager, surtout avec des données "confidentielles")

tablo = .Range("A1").CurrentRegion

For m = 2 To UBound(tablo, 1)
If tablo(m, 16) <> "" And tablo(m, 17) <> "" Or tablo(m, 18) <> "" Or tablo(m, 19) <> "" Or tablo(m, 20) <> "" Or tablo(m, 21) <> "" Or tablo(m, 21) <> "" Or tablo(m, 22) <> "" Or tablo(m, 23) <> "" Then
If tablo(m, 16) >= Date Then
tablo(m, 3) = 1
ElseIf tablo(m, 16) - Date < -1 And tablo(m, 16) - Date > -14 Then tablo(m, 3) = 2
ElseIf tablo(m, 16) - Date < -14 Then tablo(m, 3) = 3
End If
Else
tablo(m, 3) = ""
End If
Next m
.Columns(1).Resize(UBound(tablo, 2)).ClearContents
.Range("A1").Resize(UBound(tablo, 1), UBound(tablo, 2)) = tablo

Merci d'avance à vous

Bonjour,

Ton code n'étant pas indenté, il est assez indigeste, et sans le fichier avec c'est effectivement plus difficile de comprendre ce que tu essayes de faire.

Pour l'instant j'ai surtout une remarque : à mon avis il manque une parenthèse après le premier "And" jusqu'au premier "Then".

Plutôt que des ElseIf, il serait peut-être plus lisible d'utiliser Select Case.

Bonjour,

Tes dates sont-elles au bon format (numérique) ?

Pour le savoir, --> Format de cellule puis choisir "Standard" si tu as un nombre comme par exemple 43640 (Aujourd'hui le 24/06/2019) tes dates ont le bon format et le problème est ailleurs si ça reste affiché comme une date, il y a de forte chance que ce soit du texte donc, à adapter !

Bonjour,

Ton code n'étant pas indenté, il est assez indigeste, et sans le fichier avec c'est effectivement plus difficile de comprendre ce que tu essayes de faire.

Pour l'instant j'ai surtout une remarque : à mon avis il manque une parenthèse après le premier "And" jusqu'au premier "Then".

Plutôt que des ElseIf, il serait peut-être plus lisible d'utiliser Select Case.

Hello,

Oui je comprends,

J'ai supprimé tout ce qui est inutile pour la macro, ça devrait pouvoir t'aider comme ça dis-moi si c'est ok pour toi tu as le bon nombre de colonnes comme ça

Merci d'avance !

14date-vba.xlsm (947.00 Ko)

Bonjour,

Tes dates sont-elles au bon format (numérique) ?

Pour le savoir, --> Format de cellule puis choisir "Standard" si tu as un nombre comme par exemple 43640 (Aujourd'hui le 24/06/2019) tes dates ont le bon format et le problème est ailleurs si ça reste affiché comme une date, il y a de forte chance que ce soit du texte donc, à adapter !

Après test c'est le bon format ça bouge comme ton exemple lorsque je change en "Standard"

Merci à toi

A tester :

Sub test()

Dim m As Variant

With Sheets(1)
    tablo = .Range("A1").CurrentRegion
    For m = 2 To UBound(tablo, 1)
        If tablo(m, 16) <> "" And (tablo(m, 17) <> "" Or tablo(m, 18) <> "" Or tablo(m, 19) <> "" Or tablo(m, 20) <> "" Or tablo(m, 21) <> "" Or tablo(m, 21) <> "" Or tablo(m, 22) <> "" Or tablo(m, 23) <> "") Then
            Select Case tablo(m, 16)
                Case Is >= Date
                    tablo(m, 3) = 1
                Case Date - 14 To Date - 1
                    tablo(m, 3) = 2
                Case Is < Date - 14
                    tablo(m, 3) = 3
                Case Else
                    MsgBox "Cas de figure non répertorié !"
            End Select
        Else
            tablo(m, 3) = ""
        End If
    Next m
    .Columns(1).Resize(UBound(tablo, 2)).ClearContents
    .Range("A1").Resize(UBound(tablo, 1), UBound(tablo, 2)) = tablo
End With

End Sub

A tester :

Sub test()

Dim m As Variant

With Sheets(1)
    tablo = .Range("A1").CurrentRegion
    For m = 2 To UBound(tablo, 1)
        If tablo(m, 16) <> "" And (tablo(m, 17) <> "" Or tablo(m, 18) <> "" Or tablo(m, 19) <> "" Or tablo(m, 20) <> "" Or tablo(m, 21) <> "" Or tablo(m, 21) <> "" Or tablo(m, 22) <> "" Or tablo(m, 23) <> "") Then
            Select Case tablo(m, 16)
                Case Is >= Date
                    tablo(m, 3) = 1
                Case Date - 14 To Date - 1
                    tablo(m, 3) = 2
                Case Is < Date - 14
                    tablo(m, 3) = 3
                Case Else
                    MsgBox "Cas de figure non répertorié !"
            End Select
        Else
            tablo(m, 3) = ""
        End If
    Next m
    .Columns(1).Resize(UBound(tablo, 2)).ClearContents
    .Range("A1").Resize(UBound(tablo, 1), UBound(tablo, 2)) = tablo
End With

End Sub

Hello,

Hélas non ça ne fonctionne pas je comprends vraiment pas pourquoi ... J'ai l'impression qu'il ne tient pas compte de la date du jour ... Je me rends compte que même sur des dates d'hier ça met 2 au lieu de 1

Je comprend vraiment pas ...

Hello,

Hélas non ça ne fonctionne pas je comprends vraiment pas pourquoi ... J'ai l'impression qu'il ne tient pas compte de la date du jour ... Je me rends compte que même sur des dates d'hier ça met 2 au lieu de 1

Je comprend vraiment pas ...

Peux-tu détailler, indépendamment du code, ce que tu souhaites faire en fonction de la date ?

Hello,

Hélas non ça ne fonctionne pas je comprends vraiment pas pourquoi ... J'ai l'impression qu'il ne tient pas compte de la date du jour ... Je me rends compte que même sur des dates d'hier ça met 2 au lieu de 1

Je comprend vraiment pas ...

Peux-tu détailler, indépendamment du code, ce que tu souhaites faire en fonction de la date ?

Oui je vais essayer d'être compréhensible

Alors le but est de remplir la colonne C en fonction de deux paramètres (obligatoire tous les deux) :

1er paramètre :

- Il faut que l'une des colonnes entre W et Q soit remplit : une seule colonne suffit et peut importe le numéro dedans on n'en tient pas compte

2ème paramètre :

  • 1er cas : la colonne P comporte une date égale ou déjà passée par rapport à aujourd'hui ==> Alors on obtient un 1 dans la colonne C
  • 2ème cas : la colonne P comporte une date qui arrive entre 7 et 14 jours par rapport à aujourd'hui ==> alors on obtient un 2 en colonne C
  • 3ème cas : la colonne P comporte une date qui arrive dans plus de 14 jours par rapport à aujourd'hui ==> alors on obtient un 3 en colonne C

Merci d'avance à toi, dis-moi si ce n'est pas compréhensible

Oui c'est plus compréhensible. Une simple MFC ne serait pas suffisante ?

Sinon je crois juste que tes conditions sont inversées dans la macro :

Sub test()

Dim m As Variant

With Sheets(1)
    tablo = .Range("A1").CurrentRegion
    For m = 2 To UBound(tablo, 1)
        If tablo(m, 16) <> "" And (tablo(m, 17) <> "" Or tablo(m, 18) <> "" Or tablo(m, 19) <> "" Or tablo(m, 20) <> "" Or tablo(m, 21) <> "" Or tablo(m, 21) <> "" Or tablo(m, 22) <> "" Or tablo(m, 23) <> "") Then
            Select Case tablo(m, 16)
                Case Is <= Date
                    tablo(m, 3) = 1
                Case Date + 1 To Date + 14
                    tablo(m, 3) = 2
                Case Is > Date + 14
                    tablo(m, 3) = 3
                Case Else
                    MsgBox "Cas de figure non répertorié !"
            End Select
        Else
            tablo(m, 3) = ""
        End If
    Next m
    .Columns(1).Resize(UBound(tablo, 2)).ClearContents
    .Range("A1").Resize(UBound(tablo, 1), UBound(tablo, 2)) = tablo
End With

End Sub

Oui c'est plus compréhensible. Une simple MFC ne serait pas suffisante ?

Sinon je crois juste que tes conditions sont inversées dans la macro :

Sub test()

Dim m As Variant

With Sheets(1)
    tablo = .Range("A1").CurrentRegion
    For m = 2 To UBound(tablo, 1)
        If tablo(m, 16) <> "" And (tablo(m, 17) <> "" Or tablo(m, 18) <> "" Or tablo(m, 19) <> "" Or tablo(m, 20) <> "" Or tablo(m, 21) <> "" Or tablo(m, 21) <> "" Or tablo(m, 22) <> "" Or tablo(m, 23) <> "") Then
            Select Case tablo(m, 16)
                Case Is <= Date
                    tablo(m, 3) = 1
                Case Date + 1 To Date + 14
                    tablo(m, 3) = 2
                Case Is > Date + 14
                    tablo(m, 3) = 3
                Case Else
                    MsgBox "Cas de figure non répertorié !"
            End Select
        Else
            tablo(m, 3) = ""
        End If
    Next m
    .Columns(1).Resize(UBound(tablo, 2)).ClearContents
    .Range("A1").Resize(UBound(tablo, 1), UBound(tablo, 2)) = tablo
End With

End Sub

Ecoute en modifiant avec la nouvelle formule que tu m'as envoyée ça fonctionne ^^ c'était donc ma faute dû à ma mauvaise explication.

Pour la MFC tu veux dire mettre ne couleur les cases ? ça sera pas plus "énergivore" ?

Merci à toi

Pour la MFC tu veux dire mettre ne couleur les cases ? ça sera pas plus "énergivore" ?

Oui, il s'agit d'appliquer en code couleur selon la date, et ce n'est pas plus "énergivore". Je te laisse consulter les nombreux sujets qui en parlent, si le sujet t'intéresse. Si tu n'y parviens pas, redis moi que je te fasse un exemple.

Pour la MFC tu veux dire mettre ne couleur les cases ? ça sera pas plus "énergivore" ?

Oui, il s'agit d'appliquer en code couleur selon la date, et ce n'est pas plus "énergivore". Je te laisse consulter les nombreux sujets qui en parlent, si le sujet t'intéresse. Si tu n'y parviens pas, redis moi que je te fasse un exemple.

Ok je vais regarder ça

Car ça peut en effet être plus visuel. Il faut que je vois avec mon équipe pour savoir leur ressenti

Un énorme merci à toi encore en tout cas

Je clôture ce sujet comme le problème de base est résolu

Merci du retour !

Pour la MFC (cas 1) :

=ET(NBVAL($Q2:$W2)>=1;$P2<=AUJOURDHUI())
Rechercher des sujets similaires à "probleme date vba"