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 :

Code VBA date dans Textbox change de format quand je valide [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 108
    Par défaut Code VBA date dans Textbox change de format quand je valide
    Bonjour j'ai un problème de date dans une TextBox je clic en "C4" je renseigne les 2 dates et valide. je reclique en "C4" le valide sans rien changer et les dates changent de format.
    je souhaiterai que cela reste au format écrit ex. samedi 03 avril 2021 et dimanche 04 avril 2021.
    Philippe
    A l'avance merci
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    VBA, a contrario d'Excel, ne gère pas les dates selon le format "Windows settings" mais à la mode anglosaxonne. Donc, pour VBA, une date est sous la forme mm/dd/yyyy. Tu dois donc recomposer la date avec DateSerial, dans la proc évènementielle de ta feuille:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            Target(-1, 1).Value = DateSerial(Right(.TextBox2.Value, 4), Mid(.TextBox2.Value, 4, 2), Left(.TextBox2.Value, 2))
            Target(0, 1).Value = DateSerial(Right(.TextBox3.Value, 4), Mid(.TextBox3.Value, 4, 2), Left(.TextBox3.Value, 2))

    Il conviendrait bien sûr de vérifier que la valeur saisie est bien une date.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 108
    Par défaut Effacer le contenu de la TextBox et aussi des cellules qui vont avec
    Bonsoir Pierre,
    Merci je ne savais pas pour la gestion des dates, c'est résolu mais je souhaiterai pouvoir effacer les cellules qui vont avec.
    Je sais effacer les TextBox mais je n'arrive pas à effacer les cellules associées.
    A l'avance merci
    Fichiers attachés Fichiers attachés

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Ce serait bien que tu expliques dès le départ ce que tu souhaites réaliser, car je pense que tu t'y prends mal. Je me demande l'intérêt de compliquer ton classeur par du vba alors que normalement, une personne dotée d'un cerveau moyen en bon état est à mon avis capable de remplir des cellules Excel sans devoir être guidé par du VBA mal torché.

    Tu as un On Error Resume Next qui n'est vraiment pas une bonne pratique, puisque cette ligne masque les erreurs, c'est-à-dire fait comme s'il n'y en avait pas, et continue l'exécution du code comme si de rien n'était.

    Le code qui "guide" la saisie de la date dans les textbox amène à des incohérences lorsque l'on veut corriger une saisie erronée en revenant en arrière. Le "mieux" est l'ennemi du bien. Si la personne saisissait la date en Excel, ça lui poserait bien moins de soucis que de la saisir dans un userform, et ça t'éviterait de devoir la retourner au passage.


    Voilà un code qui effacera les cellules de date si tu cliques sur Effacer. C'est du bricolage, vu que je ne connais ni les tenants ni les aboutissants et que ta manière d'amener les problèmes au cas par cas empêche une vue d'ensemble sur ton projet. C'est le code qui est enclenché lors du changement de sélection dans la feuille.

    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
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    On Error Resume Next
      If Not Intersect(Target, Range("TOTO")) Is Nothing Then
        With UserForm1
            .TextBox2.Value = Target(-1, 1).Value 'récupère les données des deux cellules
            .TextBox3.Value = Target(0, 1).Value 'récupère les données des deux cellules
                .Show
            If .TextBox2.Value = "" Then
              Target(-1, 1).Value = ""
              Target(0, 1).Value = ""
            Else
              Target(-1, 1).Value = DateSerial(Right(.TextBox2.Value, 4), Mid(.TextBox2.Value, 4, 2), Left(.TextBox2.Value, 2))
              Target(0, 1).Value = DateSerial(Right(.TextBox3.Value, 4), Mid(.TextBox3.Value, 4, 2), Left(.TextBox3.Value, 2))
            End If
        End With
      End If
      Unload UserForm1 'Ferme l'UserForm1
    End Sub


    Je le répète, c'est vraiment du bricolage. Perso, je jette ce classeur à la poubelle et je repars d'une feuille blanche en m'appuyant sur les bonnes pratiques. Mettre deux lignes de code en sparadrap au fur et à mesure de l'avancement du projet ne sera jamais une bonne pratique.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 108
    Par défaut Effacer Textbox et cellules
    Bonjor Pierre
    Merci pour ta réponse effectivement tu as raison j'ai le fichier sous Excel sans VBA, je voulais juste voir si avec un code VBA cela serait plus pratique, j'ouvre un Userform de le renseigne et cela rempli mes cellules.
    Excuse moi je vais garder un simple fichier Excel.
    Merci

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par Philippe76 Voir le message
    [...]
    Excuse moi je vais garder un simple fichier Excel.
    Merci
    Tu n'as pas à t'excuser . Tu développes ce que tu veux et si tu préfères "guider" l'utilisateur ou "te simplifier la vie" avec du VBA, pourquoi pas? Je n'ai rien contre, mais je pense que, si petit soit-il, un projet VBA se réfléchit un minimum et, surtout, s'appuie sur une bonne conception de classeur.

    Je te l'ai dit dans une autre discussion qui traite du même fichier: Pour moi, le userform doit aider à saisir des données qui seront poussées dans un tableau structuré, et la feuille utilisée actuellement n'est qu'un "rendu visuel" qui sera alimenté par formules ou par VBA.

    Il pourrait être judicieux de penser Excel avant de penser VBA, même si tu développes du VBA et, par exemple, de penser qu'une feuille de classeur peut être un formulaire de saisie qui permet pas mal de choses au niveau de la validation des données. Tu évites ainsi les pièges classiques du VBA, notamment la gestion des dates dans des contrôles qui reçoivent du texte, et tu simplifies alors ton approche tout en automatisant ce qui doit l'être avec du VBA.

    Mais je le répète encore une fois: Construire du VBA sur une conception de classeur bancale est tout sauf productif
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

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

Discussions similaires

  1. [Débutant] Format date dans TextBox
    Par LAIDAROS dans le forum VB.NET
    Réponses: 2
    Dernier message: 19/04/2019, 13h49
  2. [XL-2007] Changement auto format date dans textbox
    Par capi81 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/09/2012, 04h37
  3. [XL-2003] [VBA] Format de saisie DATE dans TextBox
    Par Teh Metil dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/12/2010, 11h05
  4. Masque de saisie date dans textbox
    Par akmer dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 08/08/2008, 13h15
  5. afficher dates dans textbox d'un Userform
    Par newsinfos dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 19/11/2007, 10h41

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