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 :

Utilisation correcte de DateDiff


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    233
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 233
    Par défaut Utilisation correcte de DateDiff
    Bonjour,

    dans le bout de code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateDiff("d", Range(colTradeDate & i), .Range(colCaptureDate & i))
    est égal à 41156.

    Pourtant,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(colTradeDate & i) = 03/09/2012
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range(colCaptureDate & i)=04/09/2012
    !

    Que se passe-t-il?

    Merci d'avance pour vos conseils!

  2. #2
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 181
    Par défaut
    Bonjour à tous.

    Chez moi, ça fonctionne, j'obtiens 1.

    En ayant ajouter, pour essai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    colTradeDate = "A": i = 1: colCaptureDate = "B"
    et écrit 03/09/2012 en A1 et 04/09/2012 en B1 puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    j = DateDiff("d", Range(colTradeDate & i), Range(colCaptureDate & i))
    J'ai enlevé le "." devant le 2ème Range, sans doute pour un With ??

    Les Ranges utilisés doivent être dans le format Date.

    Cordialement.

    [EDIT] - Je suis perplexe !
    J'ai fait un essai avec une date A1 03/09/2012 sur feuille 1 et B1 04/09/2012 sur feuille2
    En conservant le ".", là j'obtiens 41156 ? avec le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    colTradeDate = "a": i = 1: colCaptureDate = "b"
    With Sheets("Feuil2")
        j = DateDiff("d", Range(colTradeDate & i), .Range(colCaptureDate & i))
    End With

  3. #3
    Membre éclairé
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2008
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2008
    Messages : 225
    Par défaut
    Bonjour,

    A quoi sert le "." devant le second "range"?
    Cela n'irait-il pas mieux en le supprimant?

    Harry

  4. #4
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 181
    Par défaut
    C'est un problème de feuille active.

    Le second Range fait appel à la bonne feuille puisqu'elle est nommée par l'instruction With ; en revanche le premier Range part du principe de la feuille active.

    si la feuille active est celle où se trouve la date, c'est bon ; à l'inverse, si c'est une autre feuille active où la date voulue n'y est pas, alors le résultat est faussé. on obtient effectivement 41156 avec une cellule vide.

    [EDIT] Pour éviter ce genre de problème qui pourrait survenir lors de changements de feuille par l'utilisateur pendant le déroulement du code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateDiff("d", Sheets("Feuil1").Range(colTradeDate & i), .Range(colCaptureDate & i))
    Préciser en dur la feuille du 1er Range

  5. #5
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour,

    Un petit complément d’explication.
    Le nombre 41156 correspond au numéro de série de la date "04/09/2012".
    Si tu obtiens ce résultat, c’est que l’autre argument vaut 0. Ta formule est alors équivalente à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateDiff("d", 0, DateValue("04/09/2012"))
    Reste à comprendre pourquoi Range(colTradeDate & i) vaut 0.
    Comme l’indique HopPopPop, l’écriture sans le point avant Range(colTradeDate & i) indique que tu fais référence à la feuille active. C’est certainement cette référence qui est incorrecte.
    Si tu places un point avant Range(colTradeDate & i), celui-ci te permet de faire référence à l’objet spécifié par l'instruction With .
    Si tu souhaites faire référence à une autre feuille, tu dois le noter explicitement (comme indiqué également par HopPopPop) .
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateDiff("d", Sheets("Feuil1").Range(colTradeDate & i), .Range(colCaptureDate & i))
    Cordialement.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    233
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 233
    Par défaut
    Merci tout le monde!

    C'est bel et bien un oubli du "." donc un problème de feuille active.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 16/08/2007, 11h40
  2. [GRASP] Est-ce que j'utilise correctement les design pattern?
    Par Tourix dans le forum Design Patterns
    Réponses: 7
    Dernier message: 21/06/2006, 18h27
  3. comment utiliser correctement les sessions?
    Par cladsam dans le forum Langage
    Réponses: 5
    Dernier message: 06/02/2006, 11h56
  4. [C#] Comment utiliser correctement Stream.Read ?
    Par ArChAnGe76 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 20/12/2005, 20h48
  5. Comment utiliser correctement le debugger de DevCPP
    Par Le Furet dans le forum Dev-C++
    Réponses: 2
    Dernier message: 29/09/2005, 09h56

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