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 :

Problème argument Date fonction perso VBA [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 20
    Points : 19
    Points
    19
    Par défaut Problème argument Date fonction perso VBA
    Bonjour,

    J'ai un problème avec la fonction que j'ai codé. Quand je l'écris dans une cellule avec ses arguments de date type "jj/mm/aaaa", la fonction renvoie une erreur #VALEUR! et un message "Le type de données d'une valeur utilisée dans la formule est incorrect". Quand je regarde le détail, je m'aperçois que les deux arguments passés ne sont pas des dates mais la division des trois nombres !!!

    Voici le code :

    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
    Option Explicit
     
    Function calculJoursNonOuvres(dateDebut As Variant, dateFin As Variant) As Integer
        Application.Volatile
        Application.Calculation = xlCalculationManual
    Dim datePlanning As Range
        Dim adresseDebut As String
        Dim adresseFin As String
        Dim Plage As Range
        Dim cell, cpt
        cpt = 0
     
        For Each datePlanning In Worksheets("Planning").Range("C4:BU34")
            If datePlanning.Value = dateDebut Then
                adresseDebut = datePlanning.Address
            End If
            If datePlanning.Value = dateFin Then
                adresseFin = datePlanning.Address
            End If
        Next datePlanning
     
        Plage = adresseDebut & ":" & adresseFin
        For Each cell In Plage
            If cell.Interior.ColorIndex = 33 Then
                cpt = cpt + 1
            End If
        Next cell
        calculJoursNonOuvres = cpt
        Application.Calculation = xlCalculationAutomatic
    End Function
    Je n'y comprends rien. Pouvez vous m'aider svp ?
    Merci d'avance.
    Cordialement.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Bonjour,

    Sous quelle forme entres-tu les dates; donne un exemple, s'il te plait.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 20
    Points : 19
    Points
    19
    Par défaut
    Merci pour la réactivité !
    Voici exactement ce que j'écris dans ma cellule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =calculJoursNonOuvres(12/4/2014;18/4/2014)
    Cordialement.

  4. #4
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 699
    Points
    6 699
    Par défaut
    Bonjour,

    en se tenant strictement à tes données :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Function calculJoursNonOuvres(dateDebut As Date, dateFin As Date) As Integer
    ....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =calculJoursNonOuvres("12/5/2012";"26/5/2012")
    Pour ce qui est de ceci qui va planter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Plage = adresseDebut & ":" & adresseFin
    , voir :
    http://silkyroad.developpez.com/VBA/LesVariables/#LII-K

    cordialement,

    Didier

  5. #5
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Puis-je ajouter que 12/04/2014 va être considéré comme 12 divisé par 4 divisé par 2014 et de même pour la seconde "date".

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 20
    Points : 19
    Points
    19
    Par défaut
    Daniel. C : Oui, c'était considéré comme des divisions mais maintenant que j'ai mis les guillemets, cela reste au format date.

    Ormonth : Merci de tes réponses. J'ai toujours le même problème car je n'arrive pas, même avec ton lien, à enlever l'erreur de cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Plage = adresseDebut & ":" & adresseFin
    J'ai essayé ceci (en déclarant adresseTotale comme un String au début de mon code car si c'est un Object, je ne peux pas concaténer les deux adresses) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    adresseTotale = adresseDebut & ":" & adresseFin
        Set Plage = Range(adresseTotale)
    Merci d'avance.
    Cordialement.

  7. #7
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 699
    Points
    6 699
    Par défaut
    Bonjour,

    Si tu ne veux pas perdre du temps à galérer, gagne-en en lisant les tutos VBa de DVP genre :
    http://bidou.developpez.com/tutoriels/ExcelVBA/

    Il te faut bien un objet Range, pour que ça fonctionne, il faut que tu emploies la bonne syntaxe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Plage = Range(adresseDebut & ":" & adresseFin)
    cordialement,

    Didier

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 20
    Points : 19
    Points
    19
    Par défaut
    Merci de tes réponses et de ta patience mais mon code ne marche toujours pas .

    J'ai toujours la même erreur #VALEUR! et un message "Le type de données d'une valeur utilisée dans la formule est incorrect". J'ai lu ton tutoriel mais je ne vois pas d'aide pour mon problème. Je ne vois pas où cela peut coincer. Voici le code mis à jour avec vos réponses :

    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
    Function calculJoursNonOuvres(dateDebut As Date, dateFin As Date) As Integer
        Application.Volatile
        Application.Calculation = xlCalculationManual
     
    Dim datePlanning As Range
        Dim adresseDebut As String
        Dim adresseFin As String
        Dim Plage As Range
        Dim cell, cpt
        cpt = 0
     
        For Each datePlanning In Worksheets("Planning").Range("C4:BU34")
            If datePlanning.Value = dateDebut Then
                adresseDebut = datePlanning.Address
            End If
            If datePlanning.Value = dateFin Then
                adresseFin = datePlanning.Address
            End If
        Next datePlanning
     
        Set Plage = Range(adresseDebut & ":" & adresseFin)
        For Each cell In Plage
            If cell.Interior.ColorIndex = 33 Then
                cpt = cpt + 1
            End If
        Next cell
     
        calculJoursNonOuvres = cpt
        Application.Calculation = xlCalculationAutomatic
    End Function
    Et voici ce que j'écris dans ma cellule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =calculJoursNonOuvres("12/5/2014";"26/5/2014")
    Merci de votre patience.
    Cordialement.

  9. #9
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 699
    Points
    6 699
    Par défaut
    Bonjour,

    je n'aurais pas plus de temps, mais ton code n'est pas en cause à la base, c'est l'ensemble qui a un souci quelque part...

    Je te mets en PJ un classeur qui reprend ton code et est OK, c'est une approche pour certifier cette partie et ensuite analyser ce qui peut poser souci dans l'autre classeur.

    DGSoluce.xls

    cordialement,

    Didier

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 20
    Points : 19
    Points
    19
    Par défaut
    Merci et bonne continuation Ormonth, c'est bizarre que ça marche sur un nouveau classeur et pas sur le mien.

    Quelqu'un d'autres a-t-il une idée sur la possible provenance du problème vu que mon code marche maintenant svp ?

    Cordialement.

  11. #11
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Peux-tu mettre ton classeur - sans données confidentielles - en PJ ?

  12. #12
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 20
    Points : 19
    Points
    19
    Par défaut
    Le voici.
    Cordialement.
    Fichiers attachés Fichiers attachés

  13. #13
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Les cellules BR32:BR34 renvoient une valeur d'erreur et font planter la fonction.

  14. #14
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 699
    Points
    6 699
    Par défaut
    Bonjour,

    Ce sont tes cellules en erreur qui posent problème, moyens de débogage primaires, donc faciles, pour arriver à tomber dessus :

    tu rajoutes ces 2 lignes à ton code (en affichant la fenêtre "Exécution" / VBE si pas le cas)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each datePlanning In Worksheets("Planning").Range("C4:BU34")
        Debug.Print datePlanning.Address
        Debug.Print datePlanning.Value
    tu relances ta formule, ça défile et tu vois que l’endroit qui pose problème est la cellule BR32 dont la valeur "Erreur 2015" fait planter ta fonction.

    à partir de là tu vas tester si en supprimant les erreurs, ça tourne, si oui, il suffira de traiter à la source ou de prévoir un filtre etc...

    Tu invalides ta cellule O40 en mettant un ' avant le signe =, ainsi elle ne sortira plus en erreur ni ne fera de calculs...(c'est devenu du texte).
    Pour faire vite sous l'onglet Accueil, tu va dans le groupe Editon, tu cliques sur Rechercher et remplacer, Sélectionner des cellules, tu coches formules, tu ne laisse coché que Erreurs et tu fais OK. Excel t'a sélectionné le plage discontinue de cellules en erreur.

    Dans ta fenêtre Exécution du VBA, tu tapes :

    ça te donnera les adresses de toutes tes cellules en erreur

    ensuite tu tapes :

    selection.clear
    ça efface toutes les cellules en erreur.

    Tu met en commentaire les 2 lignes de code rajoutées précédemment "
    Ensuite tu va en O40, tu efface le " ' " que tu avais mis pour récupérer ta formules et tu vois...

    Bon ça, c'est pour l'approche débogage, les cellules en erreur qui ne sont pas concernées dans la plage cible ne feraient rien mais constituent de bombes à retardement...

    cordialement,

    Didier

  15. #15
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 20
    Points : 19
    Points
    19
    Par défaut
    Super merci, ça marche !!!!
    Impressionnant votre connaissance en VBA !!!

    Bonne continuation à vous.
    Cordialement.

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

Discussions similaires

  1. [AC-2007] Problème avec la fonction openform VBA sur runtime
    Par guillaume50 dans le forum Runtime
    Réponses: 3
    Dernier message: 31/10/2014, 09h04
  2. [XL-2007] Problème arguments fonction slope (VBA)
    Par Tortapoya dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/04/2014, 14h13
  3. [AC-2010] Problème avec la fonction Requery VBA
    Par redojackson dans le forum VBA Access
    Réponses: 2
    Dernier message: 20/06/2013, 11h43
  4. Problème argument dans fonction
    Par flo1411 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/05/2013, 04h37
  5. Problème argument de fonction
    Par Lordryder dans le forum Débuter
    Réponses: 19
    Dernier message: 10/08/2012, 17h38

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