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 Formulaire à partir d'une liste de données [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4
    Points : 0
    Points
    0
    Par défaut Problème Formulaire à partir d'une liste de données
    Bonjour à tous,

    Si je m'adresse à vous c'est que je suis confronté à un problème qui me dépasse.
    A partir d'une liste de matériel dans un onglet (des données brutes, que j'ai filtré dans un premier temps) j'ai voulu établir un formulaire d'emprunt.

    En lançant le formulaire (en cliquant sur un bouton que j'ai spécialement créé) l'utilisateur doit remplir plusieurs champs dans des textbox tels que: "nom", "prénom", "désignation", "constructeurs", "modèle" (ces trois dernières sont des combobox liées où 2 successifs filtres sont opérés; cela permet de sélectionner dans 1 premier temps l'appareil recherché, puis le constructeur et enfin le modèle liées) "date d'emprunt", "date de retour"...

    Une fois ces données entrées, elles sont envoyées sur un nouvel onglet qui a pour but de relever tous les emprunts. Le premier problème, est que lorsque les textbox sont remplies par l'user, celles-ci sont au format texte, je présume, et c'est problématique au niveau des 2 champs de dates. Les dates d'emprunt et de retour ont beau être affichées mais celles ci ne réagissent absolument pas aux mises en forme conditionnelles que j'applique histoire de voir qui est en retard ou presque...
    Voilà pourquoi je pense qu'il s'agit d'un problème de conversion mais je ne sais pas ni où ni comment le règler..

    Mon deuxième problème porte au niveau de la mise à jour des données : étant donné que les filtres sont faits à partir de la liste figée d'appareils, dès lors que je souhaite en rajouter un nouveau il n'est pas pris en compte..comment puis-je faire pour mettre en place une sorte de mise à jour des données à chaque fois que je lance mon formulaire ?

    Si une âme généreuse pouvait ne fût-ce que m'éclairer, ce serait vraiment génial

  2. #2
    Membre du Club
    Homme Profil pro
    Consultant Lean Manufacturing
    Inscrit en
    Juillet 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant Lean Manufacturing

    Informations forums :
    Inscription : Juillet 2013
    Messages : 20
    Points : 56
    Points
    56
    Par défaut
    Bonjour,


    Un exemple de résolution à l'aveugle pour le problème 1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If IsDate(TextBox1) = True Then
    Range("a1") = TextBox1
    Else
    MsgBox "format de date incorrect" & Chr(10) & "La saisie doit être de type jj/mm/aaaa"
     
    End If
    Cordialement

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4
    Points : 0
    Points
    0
    Par défaut
    Merci beaucoup Chaman pour ton intervention mais j'ai quelques remarques : j'ai essayé ta formule (elle fonctionne très bien) mais telle que j'ai placée dans mon code, elle n'empêche aucunement l'enregistrement du formulaire et donc que malgré le message d'avertissement un texte peut s'afficher dans une case réservée à une date.

    De même est-ce que cela suffit en soit à convertir le texte tapé en une date ?

    Je mets mon fichier en PJ pour être plus explicite.

    Cdlt,
    Fichiers attachés Fichiers attachés

  4. #4
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Pour empêcher l'enregistrement du formulaire en cas de date non valide :

    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
    30
    31
    32
    33
    Private Sub enreg_Click()
     
        Dim lr As ListRow
     
       If IsDate(empr) = True Then
        Range("a1") = empr
       Else
        MsgBox "format de date incorrect" & Chr(10) & "La saisie doit être de type jj/mm/aaaa"
         Exit Sub
       End If
     
       If IsDate(retour) = True Then
         Range("a1") = retour
       Else
        MsgBox "format de date incorrect" & Chr(10) & "La saisie doit être de type jj/mm/aaaa"
        Exit Sub
       End If
     
        Set lr = Feuil5.ListObjects(1).ListRows.Add(1)
        lr.Range(1, 1) = Me.nom
        lr.Range(1, 2) = Me.prenom
        lr.Range(1, 3) = Me.service
        lr.Range(1, 4) = Me.designation
        lr.Range(1, 5) = Me.constructeur
        lr.Range(1, 6) = Me.modele
        lr.Range(1, 7) = DateValue(Me.empr)
        lr.Range(1, 8) = DateValue(Me.retour)
        lr.Range(1, 9) = Me.zone
     
        ThisWorkbook.Save
        Unload Me
     
    End Sub
    L'utilisation de DateValue sert à standardiser le format de la date enregistrée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    lr.Range(1, 7) = DateValue(Me.empr)
    lr.Range(1, 8) = DateValue(Me.retour)
    Tu peux aussi utiliser les commandes Format ou CDate:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    lr.Range(1, 7) = Format(Me.empr, "Short Date")  
    lr.Range(1, 7) = CDate(Me.empr)

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4
    Points : 0
    Points
    0
    Par défaut
    Merci pour votre aide !
    Docmarti tu viens de m'apprendre quelque chose concernant les commandes. Hormis une utilisation pour la date, la commande Format peut donc servir à standardiser un autre "format" si je comprends bien ?

  6. #6
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Je dirais que la commande FORMAT permet de standardiser et aussi de personnaliser.
    Mais son résultat est toujours de type STRING surtout utile pour un affichage personnalisé dans un texte. Ce qui n'est pas le cas avec CDate et DateValue dont le résultat en VBA est de type DATE, mieux adapté pour être transféré dans une cellule d'une feuille d'un classeur Excel.

    Tu peux voir ici les nombreuses possibilités d'affichage de la fonction FORMAT :
    http://msdn.microsoft.com/en-us/libr.../gg251755.aspx

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

Discussions similaires

  1. [AC-2000] Ouvrir un formulaire à partir d'une liste
    Par JazzKDU dans le forum IHM
    Réponses: 8
    Dernier message: 13/10/2009, 11h13
  2. [XL-2000] formulaire à partir d'une liste dans différent fichiers
    Par Avinetor dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 02/06/2009, 18h51
  3. Réponses: 1
    Dernier message: 05/03/2009, 12h26
  4. Réponses: 32
    Dernier message: 22/09/2005, 10h40
  5. Réponses: 9
    Dernier message: 07/10/2004, 19h41

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