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 :

Pb Format da date [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Responsable d'exploitation informatique
    Inscrit en
    Décembre 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable d'exploitation informatique
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9
    Par défaut Pb Format da date
    Bonjour à toutes et à tous,
    J'ai développé une appli qui me calcule des Heures supplémentaires. OK tout va bien, mais les utilisateurs ne respectent pas toujours le format de date "jj/mm/aaaa".
    1) Dans une plage B7:B20 comment faire pour que quelque soit la façon dont est rentrée la date (01 01 2011, 1er janvier 2011, 01.01.2011.....) le résultat dans la celulle soit "jj/mm/aaaa". Par VBA dans le code de la feuille serait mieux car pas de risque d'éffacement de la formule.
    2) dans cette plage, comment en colonne C, je peux extraite le jour en toutes lettres.
    merci d'avance pour votre aide.
    Bonnes Fêtes de Fin d'année.
    MBEN69

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    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 208
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Intersect(Target, [B7:B20]) Is Nothing Then Exit Sub
        Application.EnableEvents = False
        Target.Value = CDate(Target.Value)
        Target.Offset(, 1).Value = Day(Target)
        Application.EnableEvents = True
        Target.NumberFormat = "dd/mm/yyyy"
    End Sub

  3. #3
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    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 208
    Par défaut
    Oui, moi aussi. Je suppose que c'est parce que le point est mon symbole décimal (et toi ?). Raison de plus pour adopter la solution de Qwazerty ou ma seconde proposition.

  4. #4
    Membre habitué
    Homme Profil pro
    Responsable d'exploitation informatique
    Inscrit en
    Décembre 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable d'exploitation informatique
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9
    Par défaut Pb Format de Date,
    Daniel.C
    Tu as raison, moi aussi.
    Cependant en colonne C, quand la date s'affiche au bon format, j'ai pas le nom du jour mais 01/01/1900 ? Tu vois d'ou ça vient ?
    MBen69

  5. #5
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    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 208
    Par défaut
    Ca vient que j'avais mal compris ce que tu voulais. "01/01/1900", c'est 1 au format date. Mets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Intersect(Target, [B7:B20]) Is Nothing Then Exit Sub
        Application.EnableEvents = False
        Target.Value = CDate(Target.Value)
        Target.Offset(, 1).Value = Format(Target.Value, "dddd")
        Application.EnableEvents = True
        Target.NumberFormat = "dd/mm/yyyy"
    End Sub

  6. #6
    Membre habitué
    Homme Profil pro
    Responsable d'exploitation informatique
    Inscrit en
    Décembre 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable d'exploitation informatique
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9
    Par défaut
    Bonjour Daniel.C,
    Pour le jour en colonne C celà fonctionne impéccable. Merci encore.
    J'ai tjrs ce Pb de format de date, mais je ne désespère pas.
    Merci encore pour toutes vos contributions
    MBen69

  7. #7
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut

    Le plus simple je pense est de forcer l'utilisateur à ne pas mettre n'importe quoi, regarde les validations de données dans Excel, tu peux choisir une validation Date, ainsi seule les date valide seront autorisé, si l'utilisateur tape une date dans un format non reconnu, tu peux afficher le message d'erreur que tu veux (c'est dans les options de la validation)

    Je te déconseilles de faire un système qui reconnait des format de date, ce sera toujours aléatoire, prend l'exemple du 12/06/2011 : le 12 juin ou le 06 décembre?

    Pour ta colonne C regarde dans les fonction, tu doit avoir Jour() qui te permet d'extraire la jour d'une date.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  8. #8
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Bonsoir,

    Dans l'idée de faire coup double, forcer le format de la date, et aider les utilisateurs à la saisie, en faisant apparaître un calendrier (DateTimePicker sous XLS2003).

    Attention, ce type d'objet existe bien sous la version 2003, mais sauf erreur de ma part, PAS dans la version 2010 d'Office )

    Pour une question de portabilité, tu peux également créer ta propre fenêtre de sélection de date. (ex basique 3 ComboBox JJ, MM, AAAA).
    Dans ce dernier cas, il faudra déterminer si ça vaut toujours le coup d'implémenter ça (par rapport à la méthode de Quazerty),
    parce que la simplification n'est plus énorme. (au moins 8 clics pour une saisie de Date, alors qu'avec le DateTimePicker
    en 3 clics la date est choisie)

  9. #9
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut

    Pour abonder dans le sens de BlueMonkey il existe même un xla tout fait qui traîne sur le net, une fois celui-ci lancé un calendrier est automatiquement affiché sur les cellules contenant un format date.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  10. #10
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    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 208
    Par défaut
    Bonjour,

    Attention, ce type d'objet existe bien sous la version 2003, mais sauf erreur de ma part, PAS dans la version 2010 d'Office
    On peut l'avoir avec Office 2010 en chargent mscomctl2.ocx.
    Ci-joint un exemple en ajoutant la commande "Date ?" au menu contextuel "Cell" (bouton droit de la souris. Voici le code (nécessite un contrôle DTPicker et un command button sur un userform. Dans le module "ThisWorkbook" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
        On Error Resume Next
        Application.CommandBars("Cell").Controls("Date ?").Delete
    End Sub
     
    Private Sub Workbook_Open()
        On Error Resume Next
        Set myControl = Application.CommandBars("Cell").Controls _
            .Add(Type:=msoControlPopup)
        With myControl
            .Caption = "Date ?"
            .OnAction = "ShowUF"
        End With
    End Sub
    Dans le module de l'userform :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub CommandButton1_Click()
        ActiveCell = Me.DTPicker1.Value
        Unload Me
    End Sub
     
    Private Sub DTPicker1_Change()
        ActiveCell = Me.DTPicker1.Value
        Unload Me
    End Sub
     
    Private Sub UserForm_Initialize()
        Me.DTPicker1.Value = Date
    End Sub
    Dans un module standard :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub ShowUF()
        UserForm1.Show
    End Sub
    Fichiers attachés Fichiers attachés

  11. #11
    Membre habitué
    Homme Profil pro
    Responsable d'exploitation informatique
    Inscrit en
    Décembre 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable d'exploitation informatique
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9
    Par défaut
    Bonjour Daniel.C
    Merci pour ta réponse rapide. Celà fonctionne parfaitement pour tous les formats sauf si je rentre une date avec des points comme séparateurs (ex : 21.12.2011). Plantage ligne 4 du code "Target.value=cdate(target.value)
    Cordialement
    MBen69

    Citation Envoyé par Daniel.C Voir le message
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Intersect(Target, [B7:B20]) Is Nothing Then Exit Sub
        Application.EnableEvents = False
        Target.Value = CDate(Target.Value)
        Target.Offset(, 1).Value = Day(Target)
        Application.EnableEvents = True
        Target.NumberFormat = "dd/mm/yyyy"
    End Sub
    Qwazerty Bonjour,
    Merci pour ta réponse. je vais le chercher
    Bonnes Fêtes
    MBen69



    Citation Envoyé par Qwazerty Voir le message
    Salut

    Pour abonder dans le sens de BlueMonkey il existe même un xla tout fait qui traîne sur le net, une fois celui-ci lancé un calendrier est automatiquement affiché sur les cellules contenant un format date.

    ++
    Qwaz

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

Discussions similaires

  1. Format de date
    Par royrremi dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 01/06/2004, 17h32
  2. Détecter le format de date au démarrage
    Par stigma dans le forum Access
    Réponses: 2
    Dernier message: 20/02/2004, 11h04
  3. Réponses: 11
    Dernier message: 02/09/2003, 14h20
  4. Problème de Format de date
    Par titititi007 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 18/06/2003, 08h19
  5. Réponses: 3
    Dernier message: 06/05/2002, 18h24

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