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 de date [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations forums :
    Inscription : Décembre 2012
    Messages : 73
    Par défaut Problème de date
    Bonjour à tous,

    j'essaie dans un userform de mettre une date et de la faire changer via un spinbutton. Cela fonctionne, mon problème est qu'ensuite je veux ré-utiliser cette date dans une fonction pour savoir qu'elle est le jour de la semaine et par rapport à ce jour il m'affiche ou non des feuilles spécifiques.
    Mon problème est que ma date je veux la voir en format complet "vendredi 1 janvier 2014" et elle est donc mise en format String.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Label1.Caption = Format(Date + SpinButton1.Value, "dddd d mmmm yyyy")
    et quand je veux la remettre en format date impossible ça bug.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim DateLabel As Date
     
    DateLabel = CDate(Label1.Caption)
     
    If DatePart("w", DateLabel, vbSunday) = 2 Then
     Sheets("EPI").Visible = True
            Else
            Sheets("EPI").Visible = False
     
     End If
    Pouvez-vous me donner un petit coup de pouce SVP ?

    Merci, cdlt.
    PLV

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bonjour, bonjour !

    "ça bug" ne veut rien dire mis à part, VBA ne se trompant jamais, un problème entre la chaise et le clavier ‼
    Ce n'est pas compliqué d'indiquer la ligne en erreur et le message !

    Un texte n'est pas forcément une date ! Simple à vérifier pourtant avec la fonction IsDate :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Demo()
        D = Format(Date, "dddd d mmmm yyyy")
        Debug.Print """"; D; """ est une date : "; IsDate(D)
        L = InStr(D, " ") + 1
        D = Mid(D, L)
        Debug.Print Tab(L); """"; D; """ est une date : "; IsDate(D)
    End Sub
    Résultat affiché dans la fenêtre Exécution (Ctrl + G) du VBE …

    _________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations forums :
    Inscription : Décembre 2012
    Messages : 73
    Par défaut
    Bonjour Marc,

    Je sais que j'ai un problème de Date et que ce n'est pas un bug...

    J'essaie justement de transformer mon format date qui est en réalité un format texte en format Date pur et dur.

    Dans mes petits bouquins qui me servent en auto-apprentissage, il est écrit que je peux utiliser CDate() pour remettre un texte en format Date.

    A chaque fois que je lance ma procédure j'ai donc un blocage à ce niveau pour une incompatibilité de type...logique.
    Comment puis-je faire pour mettre mon format date version texte en format date version date... et donc poursuivre mon code pour qu'il m'affiche les feuilles souhaitées selon le jour de la semaine.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub CmdValider_Click()
    Dim DateLabel As Date
     
    DateLabel = CDate(Label1.Caption)
     
    If DatePart("w", DateLabel, vbSunday) = 2 Then
     Sheets("EPI").Visible = True
            Else
            Sheets("EPI").Visible = False
     
     End If
    Code erreur pour incompatibilité de type à ce niveau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DateLabel = CDate(Label1.Caption)
    Merci de votre aide,
    Cdlt PLV.

  4. #4
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Citation Envoyé par phanoulevoyou Voir le message
    Comment puis-je faire pour mettre mon format date version texte en format date version date...
    Et pourtant tu as une solution dès le post #2 dans le code de mon message ‼‼
    Suffit de lire et de tester ! Et rien qu'en lisant l'aide VBA de CDate

    Sinon effectivement tu peux aussi utiliser la propriété Tag


    _________________________________________________________________________________________________
    L'avenir n'appartient pas qu'à ceux se levant tôt mais surtout à ceux se donnant la peine de lire …

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations forums :
    Inscription : Décembre 2012
    Messages : 73
    Par défaut Merci à tous
    Bon désolé je n'ai pas pu répondre ces derniers jours...

    En ce qui concerne la solution finale j'ai effectivement retenu la solution de Marc, il m'a juste fallut un peu de temps pour la comprendre car ce qui parait simple pour certain est compliqué ou plus tortueux pour d'autre.

    Merci encore pour votre aide, n'oubliez pas que parfois de l'autre côté de l'écran, il y a des personnes qui n'ont pas la même connaissance que vous. Et une explication simple pour vous devient un autre problème pour nous.

    Bonne journée à tous et encore merci.

    Cdlt,
    PLV

  6. #6
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut



    En fait Tag est la solution vers laquelle je tendais mais une fois le problème d'origine solutionné.
    Mais pgz a eu la même idée !

    Lorsqu'un code est fourni dès le deuxième message et qu'au message suivant le demandeur ne l'a même pas testé,
    c'est sûr l'intervenant peut devenir quelque peu piquant ! Sans compter une présentation initiale incomplète …

    Pour rappel concernant les dates, il y a tout ce qu'il faut entre la et les tutoriels de ce forum !

  7. #7
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    En testant ton code, je n'ai pas rencontré de problème, tout dépend de ce que comporte "Label1.Caption", perso je le rédige ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub CommandButton1_Click()
    Dim DateLabel As Date
    Label1.Caption = "22/12/2014"'à voir
    DateLabel = CDate(Label1.Caption)
    MsgBox DatePart("w", DateLabel, vbSunday)
    If DatePart("w", DateLabel, vbSunday) = 2 Then
      Sheets("EPI").Visible = True
    Else
      Sheets("EPI").Visible = False
    End If
     
    End Sub
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  8. #8
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations forums :
    Inscription : Décembre 2012
    Messages : 73
    Par défaut
    Bonjour Casefayere,

    dans mon bout de code Label1.caption à la valeur lors de l'initialisation de mon USF :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Label1.Caption = Format(Date + 2, "dddd d mmmm yyyy")
    et il prend ensuite la valeur suivante dans le Spinbutton1 au moment ou on fait changer la valeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Label1.Caption = Format(Date + SpinButton1.Value, "dddd d mmmm yyyy")
    Ce qui fait qu'au moment de la CmdValider, il se trouve dans un format de texte et non de date.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub CmdValider_Click()
    Dim DateLabel As Date 
    'ici Label1.caption à le format : "mardi 30 décembre 2014"
    DateLabel = CDate(Label1.Caption) 
     
    If DatePart("w", DateLabel, vbSunday) = 2 Then
     Sheets("EPI").Visible = True
            Else
            Sheets("EPI").Visible = False
     
     End If
    d'ou mon problème pour l'utiliser ensuite en tant que date dans la suite du code...

    Cdlt, PLV

  9. #9
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonsoir.

    Tu pourrais sauvegarder la date calculée dans une autre variable. Assez amusant : dans la propriété Tag de ton étiquette.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Label1.Caption = Format(Date + SpinButton1.Value, "dddd d mmmm yyyy")
    Label1.Tag = Date + SpinButton1.Value
    Et quand tu as besoin de la date, tu récupèresPas testé, mais devrait marcher.

    Cordialement,

    PGZ

  10. #10
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    A l'arrache
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    datelabel = CDate(Split(Label1.Caption, " ")(1) & " " & Split(Label1.Caption, " ")(2) & " " & Split(Label1.Caption, " ")(3))
    à vérifier la valeur du spin
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

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

Discussions similaires

  1. Problème de date dans requête de màj imbriquée
    Par VirginieGE dans le forum Langage SQL
    Réponses: 11
    Dernier message: 20/07/2004, 15h34
  2. problème de date
    Par baboune dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 10/06/2004, 10h52
  3. Problème de date dans MONTHS_BETWEEN
    Par ghostlord79 dans le forum Oracle
    Réponses: 10
    Dernier message: 07/04/2004, 11h21
  4. Problème conversion date
    Par mat.M dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/03/2004, 15h05
  5. Encore un probléme de date avec TADO !
    Par bNoureddine dans le forum Bases de données
    Réponses: 2
    Dernier message: 22/02/2004, 18h22

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