InputBox FormatDate

Résolu
conrade82 Messages postés 96 Date d'inscription   Statut Membre Dernière intervention   -  
conrade82 Messages postés 96 Date d'inscription   Statut Membre Dernière intervention   -
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


A voir également:

3 réponses

Magali
 
Bonjour,

Je ne vois pas ton code...
Sinon il faut que tu change le format : NumberFormat = "dd/mm/yy;@"
0
conrade82 Messages postés 96 Date d'inscription   Statut Membre Dernière intervention   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.
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 275
 
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
0
conrade82 Messages postés 96 Date d'inscription   Statut Membre Dernière intervention   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
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 275
 
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
0
conrade82 Messages postés 96 Date d'inscription   Statut Membre Dernière intervention   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!
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 275
 
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
0
conrade82 Messages postés 96 Date d'inscription   Statut Membre Dernière intervention   4
 
Intéressant! Merci beaucoup!
0