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

VBA Access Discussion :

Transformation de fonction en VBA


Sujet :

VBA Access

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 092
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 092
    Points : 268
    Points
    268
    Par défaut Transformation de fonction en VBA
    Bonjour à tous,

    Je cherche à transformer correctement la fonction Format suivante pour pouvoir l'appliquer en vba :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    format$(dmax("CalculMois";"RqMoisDisponiblesFacturesEtAvoirs");'mmmm\ aaaa')
    Cela marche parfaitement dans les requêtes mais quand je la remplace par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Format$(DMax("CalculMois", "RqMoisDisponiblesFacturesEtAvoirs"), "mmmm\ yyyy")
    le mois est correct mais pas l'année (il met 1966 alors que cette année n'existe pas !)...

    Une idée de ce qu'il faut écrire ?

    Merci d'avance

  2. #2
    Membre averti
    Homme Profil pro
    Amateur
    Inscrit en
    Octobre 2010
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Octobre 2010
    Messages : 205
    Points : 360
    Points
    360
    Par défaut
    Bonjour,

    De quel nature est le champ "CalculMois" (date/heure ?), parce que quand je fais format$(Now,"mmmm\ yyyy), il me renvoie "avril 2012", donc cela viendrait peut-être plus du résultat renvoyé par Dmax.

    Est il possible que la valeur renvoyée soit Null (parce qu'il n'y aurait pas de données)

    Cordialement
    Pierre.

    Dans un monde passablement absurde, il y a quelque chose qui ne l'est pas, c'est ce qu'on peut faire pour les autres.

    André Malraux


    Ce message vous a aidé ? alors

    Votre souci est résolu ? alors

  3. #3
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 092
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 092
    Points : 268
    Points
    268
    Par défaut
    Bonjour,

    1 / Le champ [calculmois] extraie le mois et l'année en format numérique (ce qui permet aussi d'ordonner par mois/année), et non, il ne peut pas y avoir de valeur null.

    2 / Lorsque je mets cette expression dans un champ indépendant de formulaire cela sort bien la bonne réponse... A n'y rien comprendre ...


    Merci

  4. #4
    Membre averti
    Homme Profil pro
    Amateur
    Inscrit en
    Octobre 2010
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Octobre 2010
    Messages : 205
    Points : 360
    Points
    360
    Par défaut
    D'accord, mais sous quel forme ? En effet, si il y un seul champ et qu'il y a le mois et l'année est-ce :
    -un champ texte avec "12/2011"
    -un champ numérique avec 201112 ou 122011
    -ou....
    Pierre.

    Dans un monde passablement absurde, il y a quelque chose qui ne l'est pas, c'est ce qu'on peut faire pour les autres.

    André Malraux


    Ce message vous a aidé ? alors

    Votre souci est résolu ? alors

  5. #5
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 092
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 092
    Points : 268
    Points
    268
    Par défaut
    Format numérique d' access , pas format date...

    (par ex: Mars 2012 = 24146, Février 2012 = 24145)

    Je dois transformer ce format numérique pour qu'il donne le Mois_Année le plus récent dans un combobox.

    Marche parfaitement dans un champ indépendant mais pas en VBA !

  6. #6
    Membre averti
    Homme Profil pro
    Amateur
    Inscrit en
    Octobre 2010
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Octobre 2010
    Messages : 205
    Points : 360
    Points
    360
    Par défaut
    C'est étrange, parce que si je convertis le 24146 en date :
    on trouve le 08/02/1966. Ce qui après vérification semble correcte car le 6/04/2012, c'est 41005.

    Pour enfoncer le clou, si vous collez 24146 dans une cellule Excel et que vous sélectionnez le format date, vous trouvez bien 08/02/1966

    Donc 24146 = Mars 2012 semble faux.

    Comment générer vous 24146 depuis une date ?

    (j'admets cependant qu'il est étrange que cela semble fonctionner dans un champ indépendant, mais vous avez tout intérêt à lever ce lièvre maintenant !)
    Pierre.

    Dans un monde passablement absurde, il y a quelque chose qui ne l'est pas, c'est ce qu'on peut faire pour les autres.

    André Malraux


    Ce message vous a aidé ? alors

    Votre souci est résolu ? alors

  7. #7
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 092
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 092
    Points : 268
    Points
    268
    Par défaut
    Oui en effet il doit y avoir un hic :

    Je mettais dans la requête ce code pour permettre ensuite de faire un Order By décroissant dessus afin de voir la date la plus proche apparaitre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CalculMois: Année([Datedoc])*12+PartDate('m';[Datedoc])-1
    En ce qui concerne le Dmax si je le mets en VBA comme valeur de champ il me donne comme résultat "Septembre 2011" alors qu'il devrait me donner "Mars 2012":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Format$(DMax("[mois de]", "RqMoisDisponiblesFacturesEtAvoirs"), "mmmm\ yyyy")

  8. #8
    Membre averti
    Homme Profil pro
    Amateur
    Inscrit en
    Octobre 2010
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Octobre 2010
    Messages : 205
    Points : 360
    Points
    360
    Par défaut
    Ok.

    Expliquez-moi un peu plus...

    Pourquoi vouloir absolument convertir en mois.

    Pourquoi :

    a) ne pas garder la date tel quel puisque si vous faites format$(dateX,"mmmm yyyy), vous n'aurez que "mois année" d'afficher.

    b) mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CalculMois: DatePart(Year(Datedoc],Month[DateDoc],1)
    ce qui vous donnerai, quelque soit la valeur de DateDoc, le 1er jour du mois. (et ensuite faire format$ sur CalculMois)

    Bref quel est votre besoin final en lien avec CalculMois ?

    (Mais c'est bien, on avance )
    Pierre.

    Dans un monde passablement absurde, il y a quelque chose qui ne l'est pas, c'est ce qu'on peut faire pour les autres.

    André Malraux


    Ce message vous a aidé ? alors

    Votre souci est résolu ? alors

  9. #9
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 092
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 092
    Points : 268
    Points
    268
    Par défaut
    Bonjour Pepito 78

    Il s'agît de pouvoir classer par ordre croissant / décroissant les mois / années extraits de la date.

    Vu que la colonne qui affiche les mois/années sont la résultante d'une commande "format" il n'est plus possible de les classer en tant que date...

    Il faut donc laisser un champs dans la requête en format numérique de date access pour pouvoir faire un tri dessus .

    Je me sers ensuite de ce tri pour afficher une liste de mois disponibles dans un combobox, cela marche parfaitement, mais lorsque j'injecte la fonction Dmax() par VBA en tant que valeur par défaut du combobox, c'est là que le mois qui sort est erronné.

  10. #10
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 092
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 092
    Points : 268
    Points
    268
    Par défaut
    Bon, j'ai réussi à le faire fonctionner en changeant les arguments de requête ...

    Merci à tous

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

Discussions similaires

  1. [VBA-E]import de fonction dans vba
    Par vincent.tr dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/12/2006, 22h05
  2. [vba-e]Transformation d'un projet vba-e en un projet exécutable
    Par Lexot2 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 09/09/2006, 20h53
  3. Réponses: 7
    Dernier message: 31/08/2006, 09h41
  4. [Tableaux] Transformer en fonction
    Par Tr@nkill dans le forum Langage
    Réponses: 6
    Dernier message: 18/04/2006, 14h07
  5. code OK transformation en fonction non OK
    Par zulot dans le forum Langage
    Réponses: 1
    Dernier message: 01/04/2006, 21h05

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