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 :

Message d'erreur si le format n'est pas respecté


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2011
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Novembre 2011
    Messages : 28
    Points : 11
    Points
    11
    Par défaut Message d'erreur si le format n'est pas respecté
    Bonjour a tous,

    J'ai preparer une Base de donnees sur excel avec des formules de calculs (principalement sur des dates) le format que j'utilise est M/DD/YYYY.

    Afin de forcer les utilisateur a entrer les informations uniquement selon ce format je sollicite votre aide pour un code VBA qui ne permetrai aucune autre ecriture que celle dans le format mentionne ci-dessus si possible avec un message d'erreur.

    Merci d'avance pour votre aide.

  2. #2
    Membre chevronné Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Points : 2 131
    Points
    2 131
    Par défaut
    Bonjour,
    Pourrais-tu préciser un peu ton besoin ? Y a-t-il une zone spécifique pour la saisie de ces informations ? Y a-t-il déjà un traitement VBA à cette occasion ?

    Il y a plusieurs approches. Tu dois pouvoir t'en sortir avec une validation personnalisée.
    Ou en VBA, tu cherches d'abord les positions des "/". Tu dois en trouver 2. Et ensuite tu vérifies que les données autour de ces "/" sont bien des nombres cohérents avec ton système de date.

    En revanche tu auras un problème, tu ne pourras jamais savoir si par exemple 1/1/2012 est au format D/M/AAAA ou M/D/AAAA. Le plus propre sera peut-être donc de faire entrer à l'utilisateur les informations à 3 endroits différents (ou sur 3 colonnes) bien identifiés comme étant D, M et A. Et mettre des validations sur ces 3 zones.

    A ta disposition pour t'aider de manière plus poussée en fonction des précisions que tu pourras apporter.

  3. #3
    Membre à l'essai
    Inscrit en
    Novembre 2011
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Novembre 2011
    Messages : 28
    Points : 11
    Points
    11
    Par défaut
    Bonjour,

    J'ai peut etre manque de clarte.

    Au fait j'ai des colonnes ou les utilisateur vont rentrer des dates au format M/DD/YYYY.

    e.g

    dans la colonne A la colonne C, g, f, AC ....

    Si il rentrent les dates dans un autres format les formules ne marcherons pas.

    Donc afin de les forcer a utiliser uniquement ce format je suis a la recherche d'un code VBA que je voudrais associer a un message d'erreur disant par exp:

    Format incorrect please enter the date in the format M/DD/YYYY

    ps: JE SUIS DEBUTANT AVEC VBA

    Merci d'avance

  4. #4
    Membre chevronné Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Points : 2 131
    Points
    2 131
    Par défaut
    Normalement, quel que soit le format qu'utilise l'utilisateur, si excel le reconnait comme une date, la formule devrait marcher. Donc tu peux utiliser la validation (sous Excel 2003, menu : Données / Validation...) pour être sûr que l'entrée soit une date valide. Après cela dépendra si excel est en notation anglo-saxonne ou française pour l'ordre M/D ou D/M.

    On peut faire plus élaboré avec du VBA, mais je ne voudrais pas te faire te lancer dans une usine à gaz s'il y a une solution beaucoup plus simple.

    Juste pour être sûr : tu ne veux pas que ta formule génère une erreur ou qu'elle donne une résultat faux parce qu'elle a confondu M/D avec D/M quand D est inférieur ou égal à 12 ?

  5. #5
    Membre à l'essai
    Inscrit en
    Novembre 2011
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Novembre 2011
    Messages : 28
    Points : 11
    Points
    11
    Par défaut
    Meme en utilisant la validation de donnes la formule n accepte pas le format date suivant:

    dd/mm/yyyy


    La formule que j'utilise est la suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =IF(OR(AK8="",AL8=""),"",(DAYS360(AK8,AL8)))
    Est ce que quelqu'un peux m'aider (peut etre quelque chose lui manque) pour qu'elle puisse fonctionner quelque soit le format date que j'utilise.

    Un fichier simplifie est en PJ, je pense qu'il parle par lui meme.

    Merci d'avance pour toute contribution a resoudre ce probleme
    Fichiers attachés Fichiers attachés

  6. #6
    Membre chevronné Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Points : 2 131
    Points
    2 131
    Par défaut
    Quelle est le message dans la cellule ? #VALEUR! ?

    J'ai fait un essai chez moi, la formule marche bien dès que la cellule en entrée est bien une date. Et si je rentre 1/13/2010 dans une cellule, la validation de données me l'interdit bien (Je suis en version française, pour toi, je suppose que c'est 13/1/2010 qui devrait être impossible).

    Comment as-tu fait ta validation de données ?

  7. #7
    Membre chevronné Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Points : 2 131
    Points
    2 131
    Par défaut
    Voici un petit exemple (il faut peut-être remplacer jour/mois/années par mois/jour/années).

    Dis-moi ce qui ne te convient pas ici pour mieux comprendre le problème
    Fichiers attachés Fichiers attachés

  8. #8
    Membre à l'essai
    Inscrit en
    Novembre 2011
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Novembre 2011
    Messages : 28
    Points : 11
    Points
    11
    Par défaut
    Salut,

    La est toute la question. je veux utiliser un format europeen: jour/mois/annee

    (En PJ le probleme que je rencontre sur le fichhier que tu as envoye)
    Images attachées Images attachées  

  9. #9
    Membre chevronné Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Points : 2 131
    Points
    2 131
    Par défaut
    Le problème est que tu ne peux pas utiliser le format que tu veux. Il va dépendre du poste sur lequel est installé Excel. Même si tu changeais le format sur ton poste via les "regional settings", le comportement serait différent si quelqu'un d'autre utilise ton fichier Excel.

    La seule solution serait de ne pas utiliser le format de date d'excel, mais uniquement du texte. Tu pourras faire toutes les vérifications que tu veux et préciser un format bien précis, mais les fonctions Excel comme DAYS360 que tu utilisais ne fonctionneront plus. Il faudra donc non seulement écrire les fonctions VBA d'analyse de date, mais aussi réécrire les fonctions de calcul que tu utilises.

    En revanche, on doit pouvoir trouver un petit bout de VBA qui donne à l'utilisateur le format de date accepté sur son poste.
    EDIT : Afin que le message d'erreur ne soit pas trompeur comme dans le fichier que je t'ai envoyé.

    Dernière idée : Je ne connais pas ton application, mais peut-être que l'utilisateur pourrait entrer dans des cellules séparées le jour le mois et l'année, comme ça tu as ensuite la main sur tout dans tes calculs. Ou encore utiliser des dtPicker.

  10. #10
    Membre à l'essai
    Inscrit en
    Novembre 2011
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Novembre 2011
    Messages : 28
    Points : 11
    Points
    11
    Par défaut
    C'est pour mon entreprise et le fichier sera mis dans un endroit unique ou les utilisteurs vont y acceder. Est ce que ca reduit le degres de complexite du probleme. Peux tu m'indiquer le code vba qui permet d'utiliser avec cette formule le dormat JJ/MM/AAAA

  11. #11
    Membre chevronné Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Points : 2 131
    Points
    2 131
    Par défaut
    Juste entre-temps, j'ai fait ce petit exemple de passage par un calendrier pour éviter tout problème. Je ne sais pas si ça peut servir. EDIT : Il faut double-cliquer sur une cellule pour activer le calendrier.

    Sinon, très franchement, je n'ose pas me lancer dans un truc trop compliqué pour gérer les dates au format texte. J'ai peur que ça soit plus une source de bugs pour ton fichier qu'autre chose et que ça soit galère après à chaque fois que tu voudras changer un formule ou autre.
    C'est vraiment un problème si certains utilisateurs doivent rentrer du J/M/A et d'autres du M/J/A du moment qu'on les prévient ? Parce que s'ils utilisent déjà Excel, ils doivent avoir l'habitude des dates dans le format de leur PC, non ?

    Ce n'est pas que je ne veux pas t'aider, mais je ne voudrais pas te lancer sur une fausse piste surtout si tu es débutant(e) en VBA.
    Fichiers attachés Fichiers attachés

  12. #12
    Membre à l'essai
    Inscrit en
    Novembre 2011
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Novembre 2011
    Messages : 28
    Points : 11
    Points
    11
    Par défaut
    L'idee du calendrier me plait bien.

    Cepandant je n'arrive pas a le voir sur mon PC. J'ai un msg d'erreur comme quoi l'objet n'existe pas sur mon Ordinateur.

    Peux tu me monter comment faire le calendrier.

    Merci bcp d'avance.

  13. #13
    Membre chevronné Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Points : 2 131
    Points
    2 131
    Par défaut
    Tu as quelle version d'office ?
    Je suis sous 2003 et j'utilise le contrôle Calendrier 11.0
    Je pensais qu'il était par défaut sur toutes les versions, je vais regarder.

  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,

    Comment installer les contrôles MonthView et DTPicker ?

    http://www.developpez.net/forums/d11...x/#post6264281

    Cordialement,

    Ps : si le côté technique de la réponse = OK ou pas => pensez à cliquer sur les pouces et quand question résolue à la taguer résolue, et chaque action vous raporte des points

    Didier

  15. #15
    Membre chevronné Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Points : 2 131
    Points
    2 131
    Par défaut
    Essaie ce fichier, c'est peut-être un contrôle plus commun. Si ça marche, je t'expliquerais le code et les modifications éventuelles à faire.
    Fichiers attachés Fichiers attachés

  16. #16
    Membre à l'essai
    Inscrit en
    Novembre 2011
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Novembre 2011
    Messages : 28
    Points : 11
    Points
    11
    Par défaut
    dsl ca ne marche pas non plus

  17. #17
    Membre chevronné Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Points : 2 131
    Points
    2 131
    Par défaut
    Un dernier essai sans contrôle spécifique. C'est moins joli, mais bon...
    Fichiers attachés Fichiers attachés

  18. #18
    Membre à l'essai
    Inscrit en
    Novembre 2011
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Novembre 2011
    Messages : 28
    Points : 11
    Points
    11
    Par défaut
    Salut,

    La ca marche. Je voudrais juste apporter quelques precisions:

    Je travail sur Excel 2010.

    Je voudrais utiliser ce calendrier le long de plusieur colonnes eparpillees par-ci par la dans ma feuillle excel.

    Y- a il un moyen pour que le calendrier apparait du premier clic ou bien de faire en sorte que toute entree dans ces cellules la n'est possible qu'a travers une saisie dans le calendrier.

    Merci beaucoup d'avance.

  19. #19
    Membre chevronné Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Points : 2 131
    Points
    2 131
    Par défaut
    Dans l'exemple que je t'ai envoyé, j'ai protégé les cellules sur les 2 premières colonnes donc on ne peut entrer de valeurs que via le calendrier (dans le code on déprotège et reprotège la cellule). Si tu veux protéger par mot de passe, il faudra modifier cette partie dans le code CommandButton1_Click() de UserForm1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        targetRange.Worksheet.Unprotect
        targetRange.Value = dt
        targetRange.Worksheet.Protect
    Remplace par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        targetRange.Worksheet.Unprotect "MonMotDePasse"
        targetRange.Value = dt
        targetRange.Worksheet.Protect "MonMotDePasse"
    Pour rappel, avant de protéger une feuille, en faisant click droit après avoir sélectionné une zone et "Format de cellules", tu as un onglet pour choisir si cette zone est protégée ou pas.

    Pour ce qui est d'activer le calendrier sur un click simple, dans le code de Feuil1 (ou toute feuille dans laquelle tu entreras des dates), il faudra utiliser l'évènement Worksheet_SelectionChange, plutôt que Worksheet_BeforeDoubleClick, en pensant à enlevant le Cancel = True qui ne sert à rien et provoquera une erreur.

    Ensuite le choix des cellules sur lequel le calendrier est actif se fait dans ce code justement, au niveau de la condition If
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        'On vérifie si c'est dans une plage qui nous intéresse
        If (Target.Column = 1 Or Target.Column = 2) And Target.Row >= 2 Then
            Set UserForm1.targetRange = Target
            UserForm1.Show
        End If
    End Sub
    Comme tu peux le voir, cela ne se produit que s'il s'agit de la colonne 1 ou 2 et à partir de la ligne 2. Mais tu peux rajouter d'autres conditions.

  20. #20
    Membre à l'essai
    Inscrit en
    Novembre 2011
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Novembre 2011
    Messages : 28
    Points : 11
    Points
    11
    Par défaut
    Salut,

    Ca se precise mais il me reste un petit soucis:

    Intialement ma feuille est protege par un mot de passe (avec un code VBA) qui verouille certaines colonnes. En utilisant le code que tu m'as fourni ces restrictions disparaissent.

    je m'explique je veux utiliser ce calendrier pour 4 colonnes par e.g

    je veux que pour deux d'entre elles aucun mot de passe ne soit demande et l'entree faite uniquement via le calendrier. pour les deux restantes je veux qu'un mot de passe soit demande et l'entree possible uniquement via le calendrier.

    Esperant que cela soit faisable.

    MERCI D'AVANCE

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Message d'erreur : La ressource demandée () n'est pas disponible.
    Par leara500 dans le forum Tomcat et TomEE
    Réponses: 9
    Dernier message: 27/12/2013, 17h13
  2. Message d'erreur: Le cast spécifié n'est pas valide.
    Par giscard85 dans le forum ASP.NET MVC
    Réponses: 1
    Dernier message: 30/03/2011, 12h10
  3. Réponses: 2
    Dernier message: 11/02/2010, 00h10
  4. [GD] Obtention aléatoire d'un message d'erreur et l'image enregistrée est toute noire
    Par maty2006 dans le forum Bibliothèques et frameworks
    Réponses: 10
    Dernier message: 30/05/2006, 11h14

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