Excel 2007 VBA : Pb format de colonne "date"

Résolu
Eaheru Messages postés 205 Statut Membre -  
Eaheru Messages postés 205 Statut Membre -
Bonjour,

J'ai un sérieux soucis avec mes macros. En effet je dois effectuer des filtres "temporels" sur certaines colonnes contenant des dates.
J'importe un fichier texte et le problème est que mes dates ne sont pas au format "date" mais plutôt du style "dd/mm/yyyy hh:mm"

J'ai tenté pour éviter l'inversion des jours et des mois, propre au VB, de faire l'importation de ces colonnes en format "texte" puis de passer une boucle effectuant ceci :

For Lig1 = 2 To derlig1

Cells(Lig1, 8).Value = CDate(Cells(Lig1, 8).Value)
Cells(Lig1, 9).Value = CDate(Cells(Lig1, 9).Value)
Cells(Lig1, 10).Value = CDate(Cells(Lig1, 10).Value)
Cells(Lig1, 11).Value = CDate(Cells(Lig1, 11).Value)

Next Lig1

Mais je tombe sur un message d'erreur "incompatibilité de types"
Bref .. ca va pas.

Connaitriez vous un moyen simple de manipuler des dates venant d'un fichier CSV ? en évitant les inversions jour/mois.
Encore une fois, merci d'avance pour votre aide !

7 réponses

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Re-
    Peux tu nous faire vite fait un fichier "type" d'un import que tu fais? Place un lien vers un fichier xls (version<2007).
    2
  2. Eaheru Messages postés 205 Statut Membre 20
     
    Merci de ton aide. :)
    J'ai fait un fichier Excel 2003 d'exemple. La autres colonnes étant "confidentielles" je les ai supprimées. cela explique le décalage de colonnes entre mon code et ce fichier

    http://www6.play-host.net/?tdfs=1&searchbox=1&showDomain=1
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Alors ceci devrait te satisfaire :

      Dim Lig1 As Integer, derlig1 As Integer, Col1 As Integer
      
      For Lig1 = 2 To derlig1
          For Col1 = 8 To 11
              'ici on traite le cas de 00/00/00 00:00 par un simple test, sinon il y a incompatibilité
              If Left(Cells(Lig1, Col1).Value, 2) <> "00" Then 
                  'CDate() renvoyait un format : mm/dd/yyyy, 
                  'en passant par format(Cells,"dd/mm/yyyy")le format est bon
                  Cells(Lig1, Col1).Value = Format(Left(Cells(Lig1, Col1).Value, 10), "dd/mm/yyyy")
              Else
                  'ici mets la valeur souhaitée si ta date est 00/00/0000 00:00
                  Cells(Lig1, Col1).Value = ""
              End If
          Next Col1
      Next Lig1
      0
  3. Eaheru Messages postés 205 Statut Membre 20
     
    Merci ca me permet un gros pas en avant.
    Toutefois, je n'arrive pas encore à pouvoir placer mes filtres de type :

    Dim Off1date As Date
    Off1date = Date + 14

    ActiveSheet.Range("A1:S" & Range("A65536").End(xlUp).Row).AutoFilter Field:=11, Criteria1:= _
    "<" & Off1date, Operator:=xlAnd
    ' Filtrage "date de début" > Aujourd'hui +14
    ActiveSheet.Range("A1:S" & Range("A65536").End(xlUp).Row).AutoFilter Field:=9, Criteria1:= _
    ">" & Off1date, Operator:=xlAnd

    Les dates dans les colonnes ne semblent pas être accessibles à un filtrage temporel, (impossible a placer manuellement, ca reste grisé)
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Chez moi, les filtres fonctionnent... Que veux tu faire exactement?
      0
  4. Eaheru Messages postés 205 Statut Membre 20
     
    Le but est de filtrer les dates, en colonne 11, qui sont strictement inférieure à aujourd'hui + 14 jours et celle de la colonne 9 qui sont strictement supérieures à aujourd'hui + 14 jours.

    Manuellement j'utilise un filtre chronologique "avant" pour la colonne 11, puis un autre filtre chronologique "après" pour la colonne 9

    J'avais récupéré le codage de mes actions manuelles, mais peut être que je m'entête dans une mauvaise voie et qu'en VB il vaut mieux réécrire complètement ces filtres ?
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Le but est de filtrer les dates, en colonne 11, qui sont strictement inférieure à aujourd'hui + 14 jours Dans l'exemple que tu m'as transmis : 0 dates...

      Mais par contre, je ne m'y connait pas suffisamment pour t'aider sur les filtres...
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Eaheru Messages postés 205 Statut Membre 20
     
    Ah, j'ai du copié une plage déjà filtrée.
    C'est pas grave, merci de ton aide, ça m'a vraiment aidé :)
    0
  7. Eaheru Messages postés 205 Statut Membre 20
     
    Par contre mon probleme n'est pas reglé, car apres avoir copié les ates dans les d'autres colonnes (ou la j'ai bien des dates au bon format, je peux manuellement faire un filtre chronogique < date +14 (par exemple) mais si je fais la meme chose par ma macro, le seul filtre dispo semble etre un filtre textuel....

    Du coup mon filtre ne sort aucune ligne ...
    Quelqu'un verrait comment gérer ça svp ?
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Plutôt que de filtrer par les fonctions d'excel : Données/Filtrer, pourquoi ne pas faire un "filtre" en VBA. Tu filtrerais alors par macro.
      Quelque chose comme :
      For lign = 2 To derlig
          If Cells(lign, 9).Value > Date +14 Then
              Cells(lign, 1).EntireRow.Hidden = true
          End If
      Next
      0
  8. Eaheru Messages postés 205 Statut Membre 20
     
    Ah oui, c'est une bonne idée :)
    J'y ai travaillé tard hier soir et je suis passé par un autre biais qui est de comparer la date puis d'afficher un oui dans une autre colonne, ensuite je filtre les "oui"

    Ta proposition est plus propre. Je vais tester !
    Merci de ton aide :)
    0