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 :

Format date alpha dans combobox de formulaire


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut Format date alpha dans combobox de formulaire
    Bonjour à tous,

    J'ai un formulaire avec des dates que je voudrais afficher avec un format personnalisé "ddd d mmm" ce qui donne par exemple "dim. 14 févr" avec la valeur 44241.

    Cela fonctionne sans souci et la source est bien un nombre date comme dans l'exemple.

    Cependant, lorsque je veux reprendre la valeur de mon combobox pour la mettre dans une cellule de feuille, VBA me dit que ce n'est pas une date ou Cdate plante sans le test.

    J'ai essayé d'utiliser datevalue avec combobox.text mais il me trouve une incompatibilité de type et il en est de même avec un format date long standard.

    Certes je peux passer sur un format standard "dd/mm/yyyyy" mais avoir le jour en alpha est un plus pour saisir.

    Comme je n'est pas trouvé de solution à ce genre de souci, si vous avez une idée pour résoudre ce problème je vous en remercie par avance.

  2. #2
    Membre Expert Avatar de Zekraoui_Jakani
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    1 671
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 671
    Par défaut
    Lorsque vous reprenez la valeur de votre combobox pour la mettre dans une cellule de feuille, c'est bien du texte que VBA renvoie, et non une date.
    Il suffit de mettre cette valeur dans une cellule quelconque non formattée, puis de la transformer en date dans la cellule cible, via "=DATEVALUE(adresse)" + le format date de la cellule cible.

  3. #3
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Bonjour,
    Citation Envoyé par Zekraoui_Jakani Voir le message
    Il suffit de mettre cette valeur dans une cellule quelconque non formattée, puis de la transformer en date dans la cellule cible, via "=DATEVALUE(adresse)" + le format date de la cellule cible.
    Merci pour l'intérêt porté à mon souci mais il ne suffit pas de mettre cette valeur dans une cellule car DATEVALUE utilisée directement comme j'avais essayé ou depuis une cellule comme suggéré se plante sur une incompatibilité de type, même en supprimant le "." qui est rajouté sur le jour dans le format combobox "dim. 14 févr".
    Si l'on reprend cette cellule texte avec la fonction excel DATEVAL l'on obtient aussi #VALEUR!

    VBA ou Excel savent mettre un format standard ou personnalisé mais ne savent pas l'interpréter pour en retrouver la valeur.

  4. #4
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Bonjour à tous,

    Je vois que mon souci n'inspire pas beaucoup pour trouver une solution alors que ce me semble élémentaire de pouvoir retrouver la valeur de la date qui a été formatée avec le nom du jour et sa valeur.

    Sans doute que les experts n'ont pas encore vu ma question.

  5. #5
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,

    If suffit de stocker la date (i.e variable de type Date) dans la seconde colonne du combobox et d'utiliser uniquement cette valeur (non formatée) dans une variable date.

  6. #6
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Bonjour Patrice,
    Citation Envoyé par Patrice740 Voir le message
    If suffit de stocker la date (i.e variable de type Date) dans la seconde colonne du combobox et d'utiliser uniquement cette valeur (non formatée) dans une variable date.
    Merci de t'intéresser à mon souci et effectivement l'on peut cacher la valeur dans la seconde colonne mais dans ce cas, l'on ne peut plus utiliser 'rowsource', il faut coder le chargement.

    Si j'utilise le combobox c'est précisément en conformité avec les docs Microsoft : le Contrôle ComboBox combine les fonctionnalités d’une zone de liste et d’une zone de texte. L’utilisateur peut entrer une nouvelle valeur, comme avec une zone de texte, ou l’utilisateur peut sélectionner une valeur existante, comme avec un objet ListBox.

    D'autre part, je fait confiance à l'utilisateur et je vais lui expliquer l'intérêt de l'objet choisi afin qu'il puisse choisir ou saisir selon son besoin ou affinité.

    Il se trouve par exemple, qu'il avait choisi 'dim. 14 Févr." et en validant il s'aperçoit qu'il s'est trompé de jour donc il passe en modification et remplace le 14 par n'importe quel autre jour ou éventuellement le mois : je pense que quand il va valider sa saisie en utilisant la colonne cachée comme valeur il va être enchanté de la subtilité que je lui aurais fournie. Dans ce cas, il faudrait lors de la saisie du combobox remettre la bonne valeur en seconde colonne et c'est précisément l'objet de mon interrogation : l'on tourne en rond !

    C'est tout de même curieux que les concepteurs excel ne sachent pas faire fonctionner 'datevalue' avec un format qu'ils ont initié.

    J'avais pas mal regardé et apparemment les solutions pour revenir à la valeur date à partir du format alpha ne sont pas légion.

    Merci à toi d'avoir essayé d'en imaginer une.

  7. #7
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Bonjour à tous,

    N'ayant rien trouvé pour répondre à mon souci je pensais bien que les solutions n'étaient pas légions et c'est tout de même curieux qu'Excel ne sache pas revenir à sa valeur date après un formatage alpha.

    Je me suis donc créé une fonction qui permet de récupérer la date après un formatage alpha que je vous livre si elle peut être utile à un lecteur.
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Option Explicit
    '------------------------------------------------ 20/02/2021 --------------
    ' reprise du format date alpha francaise en valeur de date : le jour doit être en nombre
    Public Function rep_dat(den As String, Optional a_d As Integer = 0) ' année en option
    Dim jou As Integer ' jour
    Dim moi As Integer ' mois
    Dim ann As Integer ' année
    Dim id1 As Integer ' indice 1
    Dim id2 As Integer ' indice 2
    Dim tbe            ' table éléments
    Dim t_m            ' table mois
        t_m = Array("", "janv", "févr", "mars", "avr", "mai", "juin", "juil", "août", "sept", "oct", "nov", "déc")
        tbe = Split(Replace(Replace(Replace(den, "-", " "), "/", " "), "_", " "), " ")
        For id1 = 0 To UBound(tbe)          ' éléments de la date alpha
            If IsNumeric(tbe(id1)) Then     ' élément numérique
                If jou = 0 And (tbe(id1) > 0 And tbe(id1) < 32) Then
                    jou = tbe(id1)          ' jour plausible non renseigné
                ElseIf ann = 0 Then
                    ann = tbe(id1)          ' année trouvée
                End If
            Else
                For id2 = 1 To 12           ' recherche du mois alpha
                    If InStr(LCase(tbe(id1)), LCase(t_m(id2))) > 0 Then moi = id2
                Next id2
            End If
        Next id1                            ' détermination année
        ann = IIf(a_d = 0, IIf(ann = 0, Year(Date), ann), a_d)
        rep_dat = DateSerial(ann, moi, jou) ' détermination date
    End Function
    Je n'aime pas réinventer la roue mais ceci ne remplace en aucune manière DATEVAL ou Datevalue qui ne savent pas le faire.

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

Discussions similaires

  1. [Toutes versions] Format date semaine dans un champ de formulaire
    Par Simplifi dans le forum IHM
    Réponses: 0
    Dernier message: 08/01/2021, 21h14
  2. [MySQL] Enregistrer format date fraçais dans BDD
    Par HAbroc dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 10/10/2009, 06h55
  3. [E-03] Intégrer un format date spécifique dans une textBox
    Par moilou2 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/12/2008, 14h36
  4. format date/heure dans le code
    Par Invité dans le forum VBA Access
    Réponses: 2
    Dernier message: 19/10/2007, 20h24
  5. utiliser un format "date heure" dans une formule
    Par Tonton Phil dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/08/2007, 14h37

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