IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

If qui ne fonctionne pas


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 147
    Par défaut If qui ne fonctionne pas
    Bonjour, j'ai le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    Public Function Lister(chemin As String)
    Dim fs, nomFich As String
    Dim A, B, C, JT, MT, AT As String
    Dim wsb As Worksheet
     
        Set fs = CreateObject("Scripting.FileSystemObject")
        Set wsb = ThisWorkbook.Sheets(2)
        Lister = fs.getfolder(chemin).Files.Count
        nomFich = Dir(chemin & "\*.cmp")
    'je récupère l'année, le mois et le jour de la dernière mise à jour
        A = wsb.Range("A1").Value
        M = wsb.Range("B1").Value
        J = wsb.Range("C1").Value
     
        Do While nomFich <> ""
    'je récupère le jour le mois et l'année du fichier
            JT = Left(nomFich, 2)
            MT = Right(Left(nomFich, 4), 2)
            AT = Right(Left(nomFich, 8), 4)
    'si le fichier est ultérieur à la date de mise à jour, on charge le fichier dans la base et on fait les modifs
            If ((AT >= A) And (MT >= M) And (JT >= J)) Then
    'chargement du fichier et mise en forme
                chargementFichier nomFich, chemin
                ExportToutesDonneesVersAccess
                Range("A1:H3000").Delete
            End If
    'je regarde le prochain fichier
            nomFich = Dir
        Loop
    Quand tous les fichiers sont explorés, je change la date de mise à jour
        wsb.Range("A1") = Year(Date)
        wsb.Range("B1") = Format(Month(Date), "00")
        wsb.Range("C1") = Format(Day(Date), "00")
    End Function
    Mais mon IF ne fonctionne pas, il ne prend en compte que l'année.
    donc si mon fichier date du 01/01/2008 et que la mise à jour a été faite jusqu'au 23/05/2007, alors il va exécuter le code, c'est comme s'il ne prenait en compte que l'année

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 288
    Par défaut
    je ne sais pas si ça va changer quelque chose mais j'ai eu aussi des problemes de if parcequ'il y avait des parenthese en trop!
    en enelevant une paire de parentheses, ca donne ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If (AT >= A) And (MT >= M) And (JT >= J) Then
    tiens moi au courant!

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 147
    Par défaut
    non ce n'est pas ça
    désolée

  4. #4
    Membre chevronné Avatar de mordrhim
    Inscrit en
    Avril 2007
    Messages
    270
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Avril 2007
    Messages : 270
    Par défaut
    Bonjour,

    Une petite question sur ton environnement déjà :
    - Les noms de fichier que tu vas analyser sont de quelle forme ?

    ensuite deux petites remarques :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MT = Right(Left(nomFich, 4), 2)
    AT = Right(Left(nomFich, 8), 4)
    Ces petites "tricheries" te font prendre :
    • les 3e et 4e caractères pour la premiere ligne (MT)
    • les 5e-> 8e caractères pour la seconde ligne (AT)
    Essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mid("Ta chaine de caractères",Val_de_départ,Longueur)
    qui te donnera pas exemple mid("123456789",4,3) = "456"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If ((AT >= A) And (MT >= M) And (JT >= J)) Then
    Ton raisonnement est simpliste pour ce if,
    On va fonctionner par exemple : 10/07/200824 comparé à /08/1982
    Avec AT = 2008, MT = 7 JT = 10, A = 1982, M = 8, J = 24
    2008 > 1982, 7 < 8, 10 < 24
    Donc meme si la deuxième date est supérieure à la première, ton test donnera faux.

    Edit :
    pour comparer des dates transforme tes A, M, J, AT, MT, et JT en dates : DateSerial(Année, Mois, Jour)

    Edit 2 : Arf ^^

  5. #5
    Membre émérite
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Par défaut
    bonjour
    peux tu tester
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    Public Function Lister(chemin As String)
    Dim fs, nomFich As String
    Dim A, B, C, JT, MT, AT As String
    Dim wsb As Worksheet
     
        Set fs = CreateObject("Scripting.FileSystemObject")
        Set wsb = ThisWorkbook.Sheets(2)
        Lister = fs.getfolder(chemin).Files.Count
        nomFich = Dir(chemin & "\*.cmp")
    'je récupère l'année, le mois et le jour de la dernière mise à jour
        A = wsb.Range("A1").Value
        M = wsb.Range("B1").Value
        J = wsb.Range("C1").Value
     
        Dim DateMaJ As Date
        DateMaJ = DateSerial(A, M, J)
     
        Do While nomFich <> ""
    'je récupère le jour le mois et l'année du fichier
            JT = Left(nomFich, 2)
            MT = Right(Left(nomFich, 4), 2)
            AT = Right(Left(nomFich, 8), 4)
     
        Dim DateFich As Date
        DateFich = DateSerial(AT, MT, JT)
     
    'si le fichier est ultérieur à la date de mise à jour, on charge le fichier dans la base et on fait les modifs
          '  If ((AT >= A) And (MT >= M) And (JT >= J)) Then
            If DateFich > DateMaJ Then
    'chargement du fichier et mise en forme
                chargementFichier nomFich, chemin
                ExportToutesDonneesVersAccess
                Range("A1:H3000").Delete
            End If
    'je regarde le prochain fichier
            nomFich = Dir
        Loop
    'Quand tous les fichiers sont explorés, je change la date de mise à jour
        wsb.Range("A1") = Year(Date)
        wsb.Range("B1") = Format(Month(Date), "00")
        wsb.Range("C1") = Format(Day(Date), "00")
    End Function
    @+

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 147
    Par défaut
    marf, c'est vrai pour le if, je n'avais pas fait attention. Comment puis-je faire alors?
    Sinon merci le mid, c'est vrai que c'est plus compréhensible

  7. #7
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour,

    vous êtes tous fachés avec les fonctions Year, Month et Day ?
    Elles sont pourtant là pour cà !!!
    Ouvrir l'aide en ligne sur ces mots me partait fortement conseillé

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 147
    Par défaut
    fred65200, ça ne fonctionne pas désolée

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 147
    Par défaut
    je crois voir ce qui ne fonctionne pas
    la date de mise à jour est pour le moment basée pour le mois de juillet 2007 donc 7 2003 et non pas 07 2003, je pense que c'est ça qui peut poser problème

  10. #10
    Membre émérite
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Par défaut
    re

    peux tu nous donner les valeurs de
    DateMaJ et DateFich avec un debug.print ou MsgBox
    @+

Discussions similaires

  1. Code qui ne fonctionne pas sur Mac
    Par malbaladejo dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 14/01/2005, 11h08
  2. [SQL] Requête à jointure qui ne fonctionne pas
    Par Bensor dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/12/2004, 16h10
  3. Jointure externe qui ne fonctionne pas
    Par Guizz dans le forum Langage SQL
    Réponses: 3
    Dernier message: 05/02/2004, 12h26
  4. CREATEFILEMAPPING qui ne fonctionne pas???
    Par Jasmine dans le forum MFC
    Réponses: 2
    Dernier message: 06/01/2004, 19h33
  5. UNION qui ne fonctionne pas
    Par r-zo dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/07/2003, 10h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo