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 :

Question sur la fonction Year() pour un débutant


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Laskar
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Mai 2002
    Messages : 230
    Par défaut Question sur la fonction Year() pour un débutant
    Salut à tous.

    Je débute complètement en VBA. Je tente d'écrire une petite routine de stats et je galère avec une erreur qui commence à me soûler ...

    Dans le procédure d'initialisation de mon formulaire, je remplis un contrôle TextBox (nommé LaRef) avec la date du jour (jusque là, pas de problème). Dans un second TextBox, je saisis un entier entre 1 et 7.
    Dans la procédure Userform_change() du formulaire, j'aimerais faire un bête calcul de date qui fait intervenir l'année de la date. Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Offset_Change()
    Dim Annee As Integer
     
            If Me.Offset <> "" Then
                Annee = Year(Me.LaRef) '   -> Ne marche pas
                ...
            End If
    End Sub
    A l'execution, j'ai une erreur 13 : Incompatibilité de type sur la ligne Annee = Year(Me.LaRef)
    Pourtant, Annee est un Integer et LaRef est bien de type Date
    Savez-vous pourquoi ?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Annee = Year(cdate(Me.LaRef) )

  3. #3
    Membre éclairé Avatar de Laskar
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Mai 2002
    Messages : 230
    Par défaut Je rame
    Toujours la même erreur !
    D'après la doc, Year renvoie un type INTEGER et accepte en paramètre un type DATE. Ces 2 conditions sont bien remplies dans mon script.
    J'ai remplacé la ligne qui merde par ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if isDate(me.LaRef) then Msg("Il s'agit d'une date !")
    J'obtiens bien mon message à l'exécution ...

    Comprends pas !

  4. #4
    Invité
    Invité(e)
    Par défaut
    fait ce test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    me.LaRef=trim("" & me.LaRef)

  5. #5
    Membre éclairé Avatar de Laskar
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Mai 2002
    Messages : 230
    Par défaut Piste
    Il me semble que je dois passer à coté de quelque chose !
    Question :
    J'ai une procédure UserForm_Initialize()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub UserForm_Initialize()
    Dim Dt As Date, Annee As Integer
     
        Dt = Date
        Annee = Year(Dt)
        Me.NoSemaine = Format(Dt, "ww", vbMonday, vbFirstFourDays)
        Me.LaRef = DateSemaineFR(Annee, NoSemaine)
     
    End Sub
    Le problème repéré est que lorsque j'affecte une valeur à Me.NoSemaine, VB déclenche aussitôt la procédure NoSemaine_Change() qui fait appel à Me.LaRef qui n'est pas encore définit (donc vide) !
    Ce comportement est-il normal ? Pourquoi VB n'attend-il pas la fin de la procédure d'initialisation ? Comment éviter ça ?

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     private sub NoSemaine_Change() 
    if trim("" &  Me.LaRef )="" then exit sub
    ça devrai régler ton problème!

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

Discussions similaires

  1. [Dates] Question sur les fonctions Date
    Par cerede2000 dans le forum Langage
    Réponses: 2
    Dernier message: 28/10/2006, 17h26
  2. Question sur la fonction recv
    Par Mr_Chut dans le forum Réseau
    Réponses: 14
    Dernier message: 15/09/2006, 12h43
  3. Question sur les fonctions "send()" et "recv(
    Par damien99 dans le forum MFC
    Réponses: 6
    Dernier message: 10/02/2006, 20h47
  4. Réponses: 1
    Dernier message: 08/02/2006, 11h18
  5. Réponses: 2
    Dernier message: 21/12/2005, 09h39

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