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 :

Remplir une liste déroulante avec des dates seulement [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    apt
    apt est déconnecté
    Membre éclairé
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Par défaut Remplir une liste déroulante avec des dates seulement
    Bonjour à tous,

    Afin d'utiliser une liste déroulante comme l'un des criteres d'un filtre élaboré, je dois la renseigner avec des dates seulement depuis une colonne qui contient des dates sous forme de jj/mm/yyyy hh:mm

    10/05/2012 15:25
    10/05/2012 15:25
    10/05/2012 16:18
    10/05/2012 16:18
    10/05/2012 21:33
    10/05/2012 21:33
    15/05/2012 00:05
    15/05/2012 09:48
    15/05/2012 14:28
    16/05/2012 11:24
    16/05/2012 11:24
    16/05/2012 11:24
    16/05/2012 11:24
    16/05/2012 11:24
    16/05/2012 11:24
    16/05/2012 11:24

    Alors comment avoir une liste de validation de données avec des dates seulement (jj/mm/aaaa) sans les heures et minutes ?

    Merci.

  2. #2
    Membre chevronné Avatar de Bear the french
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations forums :
    Inscription : Mai 2012
    Messages : 352
    Par défaut
    Bonsoir apt,

    Pour convertir, en admettant que tes dates sont en colonne A :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub convertiondate()
        For i = 1 To Range("A" & Rows.Count).End(xlUp).Row
            Cells(i, 1).NumberFormat = "dd/mm/yyyy"
        Next
    End Sub
    C'est ce que tu cherches à obtenir ?

    Bertrand

  3. #3
    apt
    apt est déconnecté
    Membre éclairé
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Par défaut
    Bonjour Bear the french,

    C'est ce que tu cherches à obtenir ?
    Non j'aimerais alimenter une liste déroulante sur la feuille.

  4. #4
    Membre chevronné Avatar de Bear the french
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations forums :
    Inscription : Mai 2012
    Messages : 352
    Par défaut
    Bonjour,

    Si tu ne veux pas passer par VBA (menu données, validation des données, liste...), je pense que le format de ta colonne est répercuté automatiquement dans ta liste de validation. Hors, tu voudrais peut-être garder le format avec les heures sur ta feuille Excel mais ne pas l'avoir dans ta liste de validation. Sans vba, modifier le format d'une plage de cellule et cela en une unique formule --> je ne sais pas faire et je ne sais pas si celà est faisable

    Peut-être que créer une colonne "à masquer" pour y loger tes dates au bon format afin que ta liste pointe dessus...

    Avec VBA, ta liste de validation peut devenir une ComboBox. Dans ce cas, ta liste présente dans ComboBox peut avoir un format différent de celui de ta feuille Excel.

    Je t'ai fait un petit 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
    Sub convertiondate_et_combobox()
    Dim i As Integer
     
    ReDim tabl((Range("A" & Rows.Count).End(xlUp).Row) - 1) As Date
     
        For i = 0 To Range("A" & Rows.Count).End(xlUp).Row - 1
            tabl(i) = Sheets("feuil1").Range("A" & i + 1).Value
            ' je change le format de la variable en enlevant les heures/minutes
            tabl(i) = Format(tabl(i), "dd/mm/yyyy")
        Next
     
        UserForm1.ComboBox1.List() = tabl
        UserForm1.Show
     
    End Sub
    Bertrand

  5. #5
    apt
    apt est déconnecté
    Membre éclairé
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Par défaut
    Bonsoir Bear the french,

    Citation Envoyé par Bear the french Voir le message
    je ne sais pas faire et je ne sais pas si celà est faisable
    C'est faisable avec cette formule matricielle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(LIGNES($8:9)<=NB(1/FREQUENCE(EQUIV(ENT(Col_Arret);ENT(Col_Arret);0);LIGNE(INDIRECT("1:"&LIGNES(Col_Arret)))));MIN(SI(NB.SI(H$7:H8;ENT(Col_Arret))=0;ENT(Col_Arret)));"")
    Col_Arret : colonne des dates et heures

    Colonne H : colonne de la liste des dates sans doublons, elle commence à la ligne 8

    Mais est-ce pratique d'appliquer cette formule pour tous les jours de l'année, avec doublons, tout au long de centaines de ligne en bas ?

  6. #6
    apt
    apt est déconnecté
    Membre éclairé
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Par défaut
    Bonjour,

    J'ai voulu combiné ton code de la ComboBox avec un code trouvé qui constitue une liste de validation dans la feuille en VBA :

    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
    Sub test()
        Dim i As Integer
        ReDim tabl((Range("A" & Rows.Count).End(xlUp).Row) - 1) As Date
     
        For i = 0 To Range("A" & Rows.Count).End(xlUp).Row - 1
            tabl(i) = Sheets("feuil1").Range("A" & i + 1).Value
            ' je change le format de la variable en enlevant les heures/minutes
            tabl(i) = Format(tabl(i), "dd/mm/yyyy")
        Next
        '-- RefersTo ??? On a un tableau tabl et non pas une plage
        ActiveWorkbook.Names.Add Name:="MaListe", RefersTo:="=Feuil1!$B$3:$B$96"
        With Selection.Validation
            .Delete
            .Add Type:=xlValidateList, Formula1:="=MaListe"
            .InCellDropdown = True
            .ShowError = True
        End With
    End Sub
    Mais reste le problème du nommage de la plage "MaListe" qui se réfère a une plage, or on a un tableau.

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

Discussions similaires

  1. [MySQL] Remplir une liste déroulante avec des données de la base de données
    Par moukit233 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 12/08/2009, 11h05
  2. Remplir une liste déroulante avec PHP
    Par beegees dans le forum Langage
    Réponses: 3
    Dernier message: 16/03/2009, 11h51
  3. [AJAX] Remplir une liste déroulante avec la réponse du réquête d'Ajax
    Par duppp2000 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 05/12/2007, 16h28
  4. Comment remplir une liste déroulante avec une macro sans doublons
    Par alex.a dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 14/06/2007, 18h34
  5. [Oracle] Remplir une liste déroulante avec une table
    Par CYCLOPE91440 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 26/12/2006, 15h26

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