InputBox FormatDate

Résolu
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

  1. Bonjour,

    Je ne vois pas ton code...
    Sinon il faut que tu change le format : NumberFormat = "dd/mm/yy;@"
    1. 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.
      1. Contributeur
        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
        1. 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
        2. Contributeur
          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
        3. 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!
        4. Contributeur
          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
        5. Intéressant! Merci beaucoup!