InputBox FormatDate [Résolu/Fermé]

Signaler
Messages postés
96
Date d'inscription
dimanche 21 avril 2013
Statut
Membre
Dernière intervention
9 septembre 2016
-
Messages postés
96
Date d'inscription
dimanche 21 avril 2013
Statut
Membre
Dernière intervention
9 septembre 2016
-
Bonjour,

Je suis en train de créer une macro Excel avec une variable qui va contenir une date de début et de fin afin de l'utiliser dans un filtre. Mon souci (et j'ignore si j'ai mal cherché dans les forum car je n'ai rien trouvé qui résolve ce "bug") c'est si ma variable Date1 = 01/08/2013, en exécutant le code, la date apparaît au format 08/01/2013. Par contre tout va bien si la date = 31/08/2013. Pourriez-vous me dire ce qui ne va pas dans mon code ?

Merci d'avance:

Sub Macro1()

    Dim Date1 As Date
    Dim Date2 As Date
        
    'Définition des variables
    
    Date1 = Application.InputBox("Entre la date de début du mois à traiter:" & Chr(10) & "au format JJ/MM/AAAA")
    If Date1 = "0" Then Exit Sub
    Date1 = Format(Date1, "dd/mm/yyyy")
    Date2 = Application.InputBox("Entre la date de début du mois à traiter:" & Chr(10) & "au format JJ/MM/AAAA")
    If Date2 = "0" Then Exit Sub
    Date2 = Format(Date1, "dd/mm/yyyy")
        
    'Création onglet de travail

    Sheets("Table_Report_by_Country").Select
    Sheets("Table_Report_by_Country").Copy After:=Sheets("Demo")
    Sheets("Table_Report_by_Country (2)").Select
    Sheets("Table_Report_by_Country (2)").Name = "DATA"
    
    'Détermination dernière ligne
    
    If Range("A3").Value = "" Then
    lastli = Range("A2")
    Else: lastli = Range("A2").End(xlDown).Row
    End If
    
    'Filtre sur la période concernée
    
    Rows("1:1").Select
    Selection.AutoFilter
    Selection.AutoFilter Field:=7, Criteria1:="<" & Date1, Operator:=xlOr, _
        Criteria2:=">" & Date2
    Range("A2:A" & lastli).Select
    Selection.EntireRow.Delete
    Selection.AutoFilter
    
End Sub


3 réponses

Bonjour,

Je ne vois pas ton code...
Sinon il faut que tu change le format : NumberFormat = "dd/mm/yy;@"
Messages postés
96
Date d'inscription
dimanche 21 avril 2013
Statut
Membre
Dernière intervention
9 septembre 2016
4
Voici mon code:

Sub Macro1()

Dim Date1 As Date
Dim Date2 As Date

'Définition des variables

Date1 = Application.InputBox("Entre la date de début du mois à traiter:" & Chr(10) & "au format JJ/MM/AAAA")
If Date1 = "0" Then Exit Sub
Date1 = Format(Date1, "dd/mm/yyyy")
Date2 = Application.InputBox("Entre la date de début du mois à traiter:" & Chr(10) & "au format JJ/MM/AAAA")
If Date2 = "0" Then Exit Sub
Date2 = Format(Date1, "dd/mm/yyyy")

'Création onglet de travail

Sheets("Table_Report_by_Country").Select
Sheets("Table_Report_by_Country").Copy After:=Sheets("Demo")
Sheets("Table_Report_by_Country (2)").Select
Sheets("Table_Report_by_Country (2)").Name = "DATA"

'Détermination dernière ligne

If Range("A3").Value = "" Then
lastli = Range("A2")
Else: lastli = Range("A2").End(xlDown).Row
End If

'Filtre sur la période concernée

Rows("1:1").Select
Selection.AutoFilter
Selection.AutoFilter Field:=7, Criteria1:="<" & Date1, Operator:=xlOr, _
Criteria2:=">" & Date2
Range("A2:A" & lastli).Select
Selection.EntireRow.Delete
Selection.AutoFilter

End Sub

Merci d'avance de votre aide.
Messages postés
24016
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
18 avril 2021
6 738
Bonjour,

inputbox retourne un texte. Ce n'est peut-être pas une bonne idée de le mettre directement dans Date1. Si la date est mal interprétée par excel (c'est un pb courant en vba, il croit voir une date anglaise et inverse jour/mois) c'est trop tard, la date est erronée dans Date1.

Essaie qcq chose comme ça :
    Saisie= Application.InputBox("Entre la date de début du mois à traiter:" & Chr(10) & "au format JJ/MM/AAAA")
    If Date1 = "0" Then Exit Sub
    Date1 = datevalue(Saisie)


eric
Messages postés
96
Date d'inscription
dimanche 21 avril 2013
Statut
Membre
Dernière intervention
9 septembre 2016
4
Bonjour Eric,

ça ne fonctionne pas. Lors de l'exécution du code, la date dans le filtre est au format inverse: 01/08/2013 = 08/01/2013.

Une autre idée s'il vous plait ?

Merci d'avance.

https://www.cjoint.com/?0AeufXwLZrL
Messages postés
24016
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
18 avril 2021
6 738
Bonsoir,

Si tu avais fais du pas à pas et mis des espions tu aurais pu préciser tout de suite que ton problème était sur le filtre.
Essaie avec :
 Selection.AutoFilter Field:=7, Criteria1:="<" & CLng(Date1), Operator:=xlOr, _
        Criteria2:=">" & CLng(Date2)

Sans enlever ce que je t'ai dit auparavant.

eric
Messages postés
96
Date d'inscription
dimanche 21 avril 2013
Statut
Membre
Dernière intervention
9 septembre 2016
4
C'est super ça fonctionne bien. Tu peux me dire ce qui n'allait pas dans mon premier code ? Quel est le rôle de "Clng" ? Merci beaucoup!est le rôle de "Clng" ? Merci beaucoup!
Messages postés
24016
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
18 avril 2021
6 738
Bonjour,

le filtre veut le N° du jour depuis le 01/01/1900, pas une date.
Clng converti la date en un entier long.
Saisi une date dans une cellule et met en format d'affichage : Standard, tu verras la différence.

eric
Messages postés
96
Date d'inscription
dimanche 21 avril 2013
Statut
Membre
Dernière intervention
9 septembre 2016
4
Intéressant! Merci beaucoup!