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 :

Récupérer une date à partir des valeurs de 3 ComboBox


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 21
    Points : 5
    Points
    5
    Par défaut Récupérer une date à partir des valeurs de 3 ComboBox
    Bonjour à tous,

    C'est la première fois que je poste ici, donc je m'excuse par avance si ma demande n'est pas assez claire du premier coup


    Je programme en VBA pour mon école et je bloque sur une procédure que j'essaie de réaliser. Voici l'explication:

    J'ai placé dans un UserForm trois ComboBox faisant chacune référence à une plage de cellules distinctes.
    L'utilisateur devra renseigner:
    - Dans la 1ère: le jour, allant de 1 à 31
    - Dans la 2nd: le mois, écrit en toutes lettres (Janvier, Février, ..., Décembre)
    - Et enfin dans la dernière: l'année, à partir de 2014

    Je voudrais récupérer les valeurs choisies dans ces 3 ComboBox afin d'obtenir une date sous le format : jj/mm/aaaa
    Le problème étant que deux des valeurs sont des nombres, et la dernière du texte, ceci complique la tâche.
    J'aimerais placer cette "concaténation" de caractère dans une case précise de mon classeur, afin de pouvoir l'utiliser pour générer une calendrier débutant à cette même date.

    Est-ce qu'une bonne âme accepterait de m'aider ?

    Je vous remercie d'avance.

  2. #2
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonsoir CH0ubida, bonsoir le forum,

    Essaie comme ça
    :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim DT As String 'déclare la variable DT (Date en Texte)
    Dim D As Date 'déclare la variable D (Date)
     
    DT = Me.ComboBox1.Value & "/" & Me.ComboBox2.Value & "/" & Me.ComboBox3.Value 'définit la variable DT
    D = Format(DT, "dd/mm/yyyy") 'définit la variable D
    MsgBox D 'affiche la date D
    À plus,

    Thauthème

    Je suis Charlie

  3. #3
    Membre éprouvé
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Points : 1 124
    Points
    1 124
    Par défaut
    Bonsoir,
    Sauf erreur de ma part les données issues de TextBox sont au format String, je suppose qu'il en est de même pour les ComboBox.
    Dans ce cas il faudrait préciser le format désiré pour la variable DT.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DT =CDate( Me.ComboBox1.Value & "/" & Me.ComboBox2.Value & "/" & Me.ComboBox3.Value )
    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    ne jamais passer une date au format français mais international:

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 21
    Points : 5
    Points
    5
    Par défaut
    Bonsoir,

    Merci beaucoup Thautheme pour ta solution. Elle me paraît tout à fait correcte Je n'avais pas pensé à passer par une variable "tampon" en String...

    eric4459, si DT est déjà déclaré en String, je ne comprends pas pourquoi déclarer le format souhaité pour DT. A quoi cela sert de rajouter CDate ? Est-ce que cela évite de passer par la variable D As Date ?

    rdurupt: Si je comprends bien ce que tu dis, il faut que j'écrive:
    D = Format(DT, "yyyy-mm-dd") ? Mais comment faire si je le veux en effet dans le format français, soit D = Format(DT, "dd/mm/yyyy") comme Thautheme l'a suggéré ?

    Je vous remercie de votre aide. Je suis étonnée de la rapidité de vos réponses, ça fait plaisir

  6. #6
    Invité
    Invité(e)
    Par défaut
    ce que j'ai voulue dire c'est que les date dans vba au format string vont être interprété comme des date américaine;
    en d'autre terme tous les 4 de chaque mois ce convertiront en poissons d'avril 04/01, 04/02,04/03 en 01/04,02/04,03/04!

  7. #7
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 21
    Points : 5
    Points
    5
    Par défaut
    J'ai du mal à comprendre comment je peux éviter ça.
    Si j'écris D = Format(DT, "dd/mm/yyyy"), je force le format à prendre celui du jour/mois/année et non mois/jour/année , non ?

  8. #8
    Invité
    Invité(e)
    Par défaut
    tu n'as pas besoin de variable intermédiaire, de cdate ou quoique ce soit tu peux écrire directement dans ta cellule!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cell=Me.ComboBox3.Value & "-" & Me.ComboBox2.ListeIdex + 1 & "-" & Me.ComboBox1.Value 'ça c'est une date valide pour Excel!
    tu formate dans un string une date française ( j'écris D = Format(DT, "dd/mm/yyyy")) ce sera vue comme une date américaine!

    Pour qu'une string soit vue comme une date toujous au format internationale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     D = Format(DT, "yyyy-mm-dd")
    Dernière modification par Invité ; 02/12/2014 à 00h13.

  9. #9
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonjour Le fil bonjour le forum,

    Arf ! Robert comme je te hais de ne pas m'avoir donnée cette réponse avant, comme je te aime de me la donner maintenant. Toutes mes galères de dates avec le jour et le mois inversé sont désormais résolues !!! J'ai passé parfois plus de 26 heures dans une journée à essayer en vain de résoudre ce problème. Merci, merci et encore merci !
    À plus,

    Thauthème

    Je suis Charlie

  10. #10
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 21
    Points : 5
    Points
    5
    Par défaut
    Bonjour le forum,

    Voilà ce que j'ai écrit dans le module:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Sub RecupDateDebutEtFin()
    Dim Cell1 As Range
    Dim Cell2 As Range
     
        Cell1 = Me.ComboBoxAnneeDebut.Value & "-" & Me.ComboBoxMoisDebut.ListeIndex + 1 & "-" & Me.ComboBoxJourDebut.Value
        Cell2 = Me.ComboBoxAnneeFinValue & "-" & Me.ComboBoxMoisFin.ListeIndex + 1 & "-" & Me.ComboBoxJourFin.Value
     
    End Sub
    Malheureusement ça ne marche pas. J'ai supposé que c'était ".ListeIndex" et non ".ListeIdex" mais même en remplaçant ça ne change rien. ça marque "Utilisation incorrecte du mot clé Me".

    Je voulais aussi savoir s'il était possible de remplacer les cellules par des variables dates, donc d'écrire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Sub RecupDateDebutEtFin()
    Dim Date1 As Date
    Dim Date2 As Date
     
        Date1 = Me.ComboBoxAnneeDebut.Value & "-" & Me.ComboBoxMoisDebut.ListeIndex + 1 & "-" & Me.ComboBoxJourDebut.Value
        Date2 = Me.ComboBoxAnneeFinValue & "-" & Me.ComboBoxMoisFin.ListeIndex + 1 & "-" & Me.ComboBoxJourFin.Value
     
    End Sub
    Merci d'avance !

  11. #11
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Public Sub RecupDateDebutEtFin()
    Dim Cell1 As Range
    Dim Cell2 As Range
    If Me.ComboBoxAnneeDebut.ListIndex = -1 Then MsgBox "ERR": Exit Sub
    If Me.ComboBoxMoisDebut.ListIndex = -1 Then MsgBox "ERR": Exit Sub
    If Me.ComboBoxJourDebut.ListIndex = -1 Then MsgBox "ERR": Exit Sub
    If Me.ComboBoxAnneeFin.ListIndex = -1 Then MsgBox "ERR": Exit Sub
    If Me.ComboBoxMoisFin.ListIndex = -1 Then MsgBox "ERR": Exit Sub
    If Me.ComboBoxJourFin.ListIndex = -1 Then MsgBox "ERR": Exit Sub
     
    If IsDate(Me.ComboBoxAnneeDebut.Value & "-" & Me.ComboBoxMoisDebut.ListeIndex + 1 & "-" & Me.ComboBoxJourDebut.Value) = False Then MsgBox "ERR": Exit Sub
    If IsDate(Me.ComboBoxAnneeFin.Value & "-" & Me.ComboBoxMoisFin.ListeIndex + 1 & "-" & Me.ComboBoxJourFin.Value) = False Then MsgBox "ERR": Exit Sub
     
    Set Cell1 = ActiveSheet.Range("A1")
    Set Cell2 = ActiveSheet.Range("A2")
    Cell1 = Me.ComboBoxAnneeDebut.Value & "-" & Me.ComboBoxMoisDebut.ListeIndex + 1 & "-" & Me.ComboBoxJourDebut.Value
    Cell2 = Me.ComboBoxAnneeFin.Value & "-" & Me.ComboBoxMoisFin.ListeIndex + 1 & "-" & Me.ComboBoxJourFin.Value
     
    End Sub

Discussions similaires

  1. creation d'une table à partir des valeurs de 2 tables
    Par esmarlandes dans le forum Macro
    Réponses: 2
    Dernier message: 29/01/2010, 09h55
  2. Récupérer une date à partir d'un format UNIX
    Par Spack dans le forum Programmation et administration système
    Réponses: 8
    Dernier message: 09/02/2009, 14h46
  3. calcul d'une date à partir des données de textbox
    Par jffaber dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/06/2008, 10h24
  4. Creer une date avec des valeurs prédéfinies
    Par baedal dans le forum VB.NET
    Réponses: 4
    Dernier message: 22/05/2007, 10h58
  5. Réponses: 1
    Dernier message: 23/01/2006, 18h53

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