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 :

Control saisie DatePicker


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 44
    Par défaut Control saisie DatePicker
    Bonjour le Forum!

    je me permets de poster ici car j'ai un problème que je n'arrive pas à ressoudre.

    Dans un fichier j'ai mis sur 3 colonnes un contrôle DatePicker qui permet à l'utilisateur de rentrer des dates valides. Jusqu'au ici pas de problème, mais le souci est que je veux faire des contrôles sur les dates, par exemple que la date debut soit estrictement inférieur à ma date de fin, que ma date de fin soit supérieur à ma date de début.

    J'ai essayé de faire plusieur macro mais il y a rien qui marcher. SVP quelqu'un peut me dire commet faire?

    merci de votre aide!

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 141
    Par défaut Précisez votre usage du DatePicker
    Bonjour Otero,

    Citation Envoyé par Otero Voir le message
    J'ai essayé de faire plusieur macro mais il y a rien qui marche
    Dire que quelque chose ne marche pas n'est pas suffisant. Qu'est-ce qu'il ne marche pas ?
    Mieux préciser les données en entrée et le résultat attendu.

    Il faut fournir entre les balises [CODE] et [/CODE] les tentatives et essais de code VBA
    ainsi qu'au moins les constantes ligne et colonne de la date de début et de la date de fin à valider.
    Cela montrera l'utilisation du DatePicker et ce qui est attendu quand une date n'est pas valide.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 44
    Par défaut
    MattChess

    voici mon code :

    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
    Private Sub CommandButton1_Click()
     
    datedebut = CDate(DTPicker1.Value)
    datefin = CDate(DTPicker1.Value)
     
     
    If datedeb > datefin Then
       res = MsgBox("La date de début doit être inférieur à la date de fin", vbOKOnly)
    Else
        If CDate(DTPicker1.Value) Then
            rep = True 'MsgBox("Confirmer votre choix: " & DTPicker1.Value, vbYesNo)
            If rep = True Then
                DTPicker1.SetFocus
            ElseIf rep = False Then
                DTPicker1.SetFocus
                Load Me
                Exit Sub
            End If
        End If
    End If
     
     
    ActiveCell = DTPicker1
    Unload Me
     
    End Sub
    Je ne sais pas comment faire pour comparer la date de la colonne K avec la date de ma colonne M, car la date début de ma colonne K doit, logiquement être inférieur à la date de fin de ma colonne M.

    Le contrôl DTpicker est active quand on click sur n'importe quelle cellule de la colonne K et de la colonne M. Un Useforme avec le calendrier apparait et on peut choisir la date. Cet useforme comporte deux boutons un 'OK' et 'Annuler' si bouton 'OK' alors il met la date dans la cellule sinon il affiche un message 'la date est obligatoire'.

    Je veux qu'au moment de appuyer sur 'OK' il vérifie si la date début (colonne K-->date debut) est inférieur à la date fin (colonne M)

    Merci de ton aide.

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 141
    Par défaut Saisie et validation de date dans un UserForm Excel VBA
    1. Décrire la feuille de calcul avec des constantes nommées

    La description de la feuille de calcul avec des constantes nommées est une étape indispensable et basique.

    Citation Envoyé par Otero Voir le message
    comparer la date de la colonne K avec la date de ma colonne M
    Quand je demandais les constantes ligne et colonne des dates de début et de fin, cela voulait dire créer un module :
    Cliquez sur le VBE menu "Insérer" > "Module"
    Copier-coller la déclaration suivante des constantes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Option Explicit
    Public Const colDateDebut = 11 'K
    Public Const colDateFin = colDateDebut + 2 ' M
    Important : les constantes doivent être déclarées Public pour être vues de l'ensemble du projet.

    Pour avoir l'équivalence du nom des colonnes en nombre, on peut temporairement basculer l'affichage par :
    Excel menu "Outils" > "Options" onglet général
    [x] R1C1 reference style.
    Alternativement on peut compter la position de la colonne dans l'alphabet.

    2. La détection du changement de sélection dans les colonnes de date

    Dans cette maquette, on a laissé le nom par défaut UserForm1.
    Il faudrait lui donner un nom plus compréhensible tel que UserFormDate.
    Le code suivant est à copier-coller dans le module ThisWorkbook :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Option Explicit
     
    Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Excel.Range)
        If Target.Column = colDateDebut Or Target.Column = colDateFin Then
            UserForm1.Show
        End If
    End Sub
    Notez l'utilisation des deux constantes Public pour détecter la sélection dans les deux colonnes de date.

    3. Saisie et validation de la date

    Citation Envoyé par Otero Voir le message
    Dans un fichier j'ai mis sur 3 colonnes un contrôle DatePicker
    La difficulté dans la compréhension initiale du problème c'est que le contrôle DatePicker n'a pas été inséré sur 3 colonnes mais dans un UserForm qui s'affiche en avant plan au centre de la feuille de calcul.

    L'UserForm1 a une paire classique de boutons OK / Cancel de validation du DatePicker.
    La phase d'initialisation UserForm_Initialize() sera éventuellement à supprimer car je n'ai pas le contrôle DTPicker.
    Je l'ai remplacé par un TextBox dénommé DTPicker1 dans cette maquette mais le fonctionnement de la validation est strictement identique à un DTPicker.

    Sélectionner UserForm1 dans la fenêtre projet du VBE.
    VBE menu "Affichage" > "Code"

    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
    34
    35
    36
    37
    38
    39
    40
    Option Explicit
     
    Private Sub UserForm_Initialize()
        DTPicker1.Value = Date
    End Sub
     
    Private Sub CmdOk_Click()
    Dim dateDebut As Date, dateFin As Date, dateSaisie As Date
     
        dateSaisie = CDate(DTPicker1.Value)
        Select Case ActiveCell.Column
        Case colDateDebut
            dateDebut = dateSaisie
            dateFin = Cells(ActiveCell.Row, colDateFin)
            If dateDebut > dateFin And dateFin <> 0 Then
                Warning "La date de début doit être inférieure à la date de fin": Exit Sub
            End If
     
        Case colDateFin
            dateDebut = Cells(ActiveCell.Row, colDateDebut)
            dateFin = dateSaisie
            If dateFin < dateDebut Then
                Warning "La date de fin doit être supérieure à la date de début": Exit Sub
            End If
     
        Case Else
            Stop
        End Select
        ActiveCell = dateSaisie ' correcte
        Unload Me
    End Sub
     
    Private Sub CmdCancel_Click()
        Unload Me
    End Sub
     
    Private Sub Warning(ByVal strMsg As String)
        MsgBox strMsg, vbExclamation, "Saisie date"
        DTPicker1.SetFocus
    End Sub
    Sur clic du bouton OK, on récupère la date saisie dans dateSaisie.
    Il faut pouvoir identifier si on se trouve dans la saisie de la date de début ou de fin d'où le Select Case ActiveCell.Column.
    Cela permet de comparer la date saisie avec la date de fin si on est dans la colonne de la date de début et réciproquement.

    Notez le test supplémentaire dateFin non nul dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If dateDebut > dateFin And dateFin <> 0 Then
    Car la date de fin peut être initialement vide (valeur par défaut 0 soit 00:00:00 ou "").

    En cas d'erreur de saisie, sur la même ligne de code que l'appel de Warning(), on s'autorise à sortir immédiatement de la procédure par Exit Sub.
    L'User Form est toujours présent pour que l'utilisateur corrige son erreur de date.

    Le Stop dans le Case Else ne devrait jamais arriver si Workbook_SheetSelectionChange() est correct. C'est plus une vérification de la validité de la colonne courante quand on appelle l'User Form.

    Quand on sort du Select Case, la date saisie est correcte. On peut faire l'affectation avec la cellule courante. Il faut voir s'il faut vraiment demander à l'utilisateur de confirmer.
    ______________

    Si la discussion est résolue, vous pouvez cliquer sur le bouton

    En bas de ce message s'il vous a apporté des éléments de réponse, pensez également à voter en cliquant sur le bouton vert

Discussions similaires

  1. controle saisie zone de text
    Par Emcy dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 01/03/2007, 14h50
  2. controle saisie mail dans fichier.php3
    Par metatron dans le forum Général JavaScript
    Réponses: 19
    Dernier message: 13/09/2006, 14h22
  3. [RegEx] Controle saisie
    Par yoda7666 dans le forum Langage
    Réponses: 9
    Dernier message: 13/12/2005, 11h00
  4. [C#.NET] Controle Saisie cellule du Datagrid
    Par lefebvse dans le forum Windows Forms
    Réponses: 2
    Dernier message: 21/04/2005, 14h56
  5. controle saisie
    Par star_light dans le forum C++
    Réponses: 14
    Dernier message: 15/03/2005, 19h19

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