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 :

Listes déroulantes et macros renvois PLUSIEURS valeurs


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2011
    Messages : 26
    Par défaut Listes déroulantes et macros renvois PLUSIEURS valeurs
    Bonjour,

    J'ai un problème qui m'embête, je vous explique le contexte. D'abord j'ai une BD qui stocke des montants investits, selon la date, le compte, etc.

    Comme vous le remarquez, pour une date correspond plusieurs entrées.
    (cecis n'est qu'un test, la réel BD comporte plus de 1900 entrées )
    Sur une autre feuille "consulter" je souhaite pouvoir faire "sortir" les entrées que je désire, selon un critère (comme la date par exemple).

    Voilà ce que j'ai tenté de faire:
    1. J'ai crée un nom "bd_date" qui sélectionne automatiquement toutes la colonne des dates, sans l'entête. (Dans l'exemple, de A2 à A6)
      bd_date
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      =DECALER(Mouvement!$A$1;1;0;NBVAL(Mouvement!$A:$A)-1;1)
      Ce qui donne:
    2. J'ai donc essayé de créer ma liste déroulante en lien avec ce nom, mais comme je l'avais prédit, elle me sort toutes les dates, n'éliminant pas les doublons, tripples, etc.


    Ainsi, mes questions:

    1. Comment faire pour ne garder qu'une seule date par jour? (donc un seul 07/27, 07/28, 07/29)
    2. Éventuellement, est-ce avec une macro que je devrais faire resortir tous les entrées pour cette date? Comment faire ci dépendament de la date il y a 5,10,38,1 (bref un nombre inconstant) d'entrée.


    Merci, Cordialement.
    Maxime

  2. #2
    Membre éclairé Avatar de bastou93
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2010
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

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

    Informations forums :
    Inscription : Août 2010
    Messages : 217
    Par défaut
    Bonjour,

    N'ayant pas compris ce problème:
    Éventuellement, est-ce avec une macro que je devrais faire resortir tous les entrées pour cette date? Comment faire ci dépendament de la date il y a 5,10,38,1 (bref un nombre inconstant) d'entrée.
    Je verrai sa a ta place pour ta list:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub test()
     
    Dim lastrow As Long
    Dim i As Integer
     
    lastrow = Range("A1").End(xlDown).Row
    For Each cel In Range("A2:A" & lastrow) 'parcour toutes tes dates
        If ItemExist(cel.Value) = False Then    'si l'élément n'est pas dans la liste
            ListBox1.AddItem (cel.Value)    'on l'ajoute
        End If
    Next cel
     
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    'Fonction qui retourne vrai si l'élément existe et faux sinon
    Private Function ItemExist(item As String) As Boolean
     
    ItemExist = False
    For i = 0 To ListBox1.ListCount - 1
        If ListBox1.List(i) = item Then
            ItemExist = True
        End If
    Next i
     
    End Function
    J'ai séparé en 2 fonctions pour que sa soit plus lisible à reprendre et sa peut toujours servir
    je viens de le tester et sa marche

    bastien

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2011
    Messages : 26
    Par défaut
    Re,
    Merci pour vos réponses aussi rapide.

    Règlons mon premier problème d'abord .

    J'ai deux petites questions (car j'aime bien comprendre)
    1- Dans ta fonction ItemExist, je ne comprend pas cette ligne. Pourrais-tu me la mettre en mot?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = 0 To ListBox1.ListCount - 1
    "Pour i = 0 à nombre de ligne dans ma liste déroulante -1?"

    2- Si j'ai bien compris je dois mettre c'est deux bouts de code (que j'adapterai à mon document biensur) dans une macro associé à ma liste déroulante?

    Merci,
    Maxime

  4. #4
    Membre éclairé Avatar de bastou93
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2010
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

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

    Informations forums :
    Inscription : Août 2010
    Messages : 217
    Par défaut
    "Pour i = 0 à nombre de ligne dans ma liste déroulante -1?"
    En gros cela parcours tous les élements de ta liste.
    Ensuite je test si le 1er élément est égale a item si c'est oui alors c'est qu'il est dans la liste sinon on passe au suivant...


    Si j'ai bien compris je dois mettre c'est deux bouts de code (que j'adapterai à mon document biensur) dans une macro associé à ma liste déroulante?
    Tu peux soit les mettres dans ton userform.
    Soit dans un module mais la tu dois mettre:

    bastien

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2011
    Messages : 26
    Par défaut
    En gros cela parcours tous les élements de ta liste.
    Ensuite je test si le 1er élément est égale a item si c'est oui alors c'est qu'il est dans la liste sinon on passe au suivant...
    Exacte, mais je ne comprend pas où tu défini item. Dsl, je suis sur le point de comprendre toute la logique du code, sauf ce bout.

    Merci,
    Maxime

  6. #6
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Bonsoir,
    Item est un paramètre de la fonction ItemExist , fonction déclaré par la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Function ItemExist(item As String) As Boolean
    puis Item est renseigné lors de l'appel de la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If ItemExist(cel.Value) = False Then

  7. #7
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonjour
    Réalise un tableau croisé dynamique pour créer des états de synthèse.

  8. #8
    Membre éclairé Avatar de bastou93
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2010
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

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

    Informations forums :
    Inscription : Août 2010
    Messages : 217
    Par défaut
    Bonjour
    Réalise un tableau croisé dynamique pour créer des états de synthèse.
    A j'ai pigé, oui en effet un tableau croisé et la meilleure solution
    Mais moi j'ai tendance à usé (abusé) des collections par leur facilité

    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
    Private Sub test()
     
    Dim lastrow As Long
    Dim i As Integer
    dim collecdate as collection
     
    set collecdate = New Collection
    lastrow = Range("A1").End(xlDown).Row
    For Each cel In Range("A2:A" & lastrow) 'parcour toutes tes dates
     
        If ItemExist(cel.Value) = False Then    'si l'élément n'est pas dans la liste
            collecdate New collection,cel.value     'Crée une collection pour l'heure
            ListBox1.AddItem (cel.Value)    'on l'ajoute
        End If
     
        collecdate(cel.value).Add cel.row    'Y ajoute la ligne dans la collection
    Next cel
     
    End Sub
    Comme cela après si l'utilisateur choisi une heure tu peux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    For i = 0 To ListBox1.ListCount - 1
            If ListBox1.Selected(i) = True Then
                  for each ligne in collecdate(ListBox1.List(i))
                            msgbox ligne
                  next ligne
    Next i
    tu reçois ici toutes les lignes (normalement pas testé )

    Bastien

  9. #9
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Et tu as essayé :


    Citation Envoyé par mercatog Voir le message
    Bonjour
    Réalise un tableau croisé dynamique pour créer des états de synthèse.

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2011
    Messages : 26
    Par défaut
    Re,

    Oui, mais je n'arrive pas à inclure les données que me sort ce tableau croisé dans ma liste déroulante... Je continue d'essayer.

    Autre petite question, comment masquer ce gros tableau croisé afin qu'il ne soit pas visible? La seule facon est-elle de masquer les cellules?

  11. #11
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    avec un tableau croisé dynamique tu n'as plus besoin de ta liste et tu place ce tableau dans ta feuille consultation ...
    Les tableaux croisés dynamiques dans Excel2007


  12. #12
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2011
    Messages : 26
    Par défaut
    Oui d'accord,

    Avec une petite bd, c'est parfait. Sauf qu'avec plus de 4000 entrées, c'est plutôt "chiant" de chercher, même si c'est par ordre de date, etc?

    J'élaborerai peut-être une facon de mettre un petit outil de recherche servant à faire surbrier les champs désirés.

    Merci pour votre aide!
    Maxime

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 16/06/2014, 12h14
  2. Liste déroulante et macro
    Par ricolarico dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 30/09/2009, 15h07
  3. Réponses: 12
    Dernier message: 08/06/2007, 10h11
  4. [Système] Fonction qui renvoie plusieurs valeurs
    Par sebhm dans le forum Langage
    Réponses: 6
    Dernier message: 26/01/2007, 08h43
  5. Réponses: 3
    Dernier message: 14/08/2006, 21h27

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