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 :

Formulaire de choix et d'alimentation de données


Sujet :

Macros et VBA Excel

  1. #21
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Février 2019
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Février 2019
    Messages : 177
    Points : 45
    Points
    45
    Par défaut
    Je n'arrive déjà pas à obtenir les valeur unique du lieu dans le Combobox1

  2. #22
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 755
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 755
    Points : 28 606
    Points
    28 606
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je n'arrive déjà pas à obtenir les valeur unique du lieu dans le Combobox1
    Pourriez vous publier le code que vous avez utilisé ?

    Si vous avez une version récente (365) d'excel, vous serez certainement inspiré par le billet de Pierre Fauconnier titré Excel 365: Filter les lignes d'une listbox selon la saisie d'un textbox (saisie intuitive) (Attention toutefois de ne pas devoir partager l'application avec des utilisateurs qui auraient des versions antérieures.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #23
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Février 2019
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Février 2019
    Messages : 177
    Points : 45
    Points
    45
    Par défaut
    Je parviens à afficher un tri avec un combobox par rapport au champs de la table.
    Mais ce n'est pas ce que je souhaiterais par rapport à mon projet.
    Nom : Capture.PNG
Affichages : 111
Taille : 34,0 Ko

  4. #24
    Responsable
    Office & Excel


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 942
    Points
    55 942
    Billets dans le blog
    131
    Par défaut
    Et que souhaites-tu? Dans un message, tu parles de devoir obtenir la liste des villes sans doublons, et dans le message suivant, on comprend que tu veux trier sur base d'une colonne...

    Avec la version 2010 que tu as taguée, tu vas devoir "chipoter" pour récupérer les valeurs uniques. On pourrait t'aiguiller vers l'utilisation d'un dictionary, mais perso, fidèle à ma maxime (VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...), je n'aime pas et je me tournerais plus volontiers vers un tableau temporaire dans une feuille masquée dans lequel je supprimerais les doublons. Je procéderais de la même manière avec les noms pour une ville choisie: copier les contacts dans un tableau temporaire, trier par ville, déterminer la plage qui correspond aux contacts de la ville choisie et passer cette plage à la listbox.

    Avec les trois tableaux suivants t_contacts, t_VillesUniques et t_NomsVilleChoisie

    Nom : 2020-11-21_172252.png
Affichages : 106
Taille : 5,4 Ko

    Voici comment j'afficherais le userform en préparant les contrôles. Je pense que le code se lit et se comprend facilement, surtout en pas à pas.
    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
    Sub Test()
      Dim Target As Range
     
      ClearTable "t_VillesUniques"
      ClearTable "t_NomsVilleChoisie"
     
      Set Target = Range("t_VillesUniques").ListObject.ListRows.Add().Range(1)
      Target.Resize(Range("t_Contacts").Rows.Count).Value = Range("t_Contacts[Ville]").Value
      Range("t_VillesUniques").ListObject.DataBodyRange.RemoveDuplicates 1
     
      With UserForm1
        .cboVilles.List = Range("t_VillesUniques").Value
        .lboNoms.List = Range("t_Contacts[Nom]").Value
        .Show
      End With
    End Sub
     
    Sub ClearTable(Name As String)
      If Not Range(Name).ListObject.DataBodyRange Is Nothing Then Range(Name).ListObject.DataBodyRange.Delete
    End Sub

    Au changement de ville dans le userform, on utilise le code suivant:
    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
    Private Sub cboVilles_Change()
      AdaptLboNoms
    End Sub
     
    Sub AdaptLboNoms()
      Dim Target As Range
      Dim Pos As Long, CountOf As Long
      ClearTable "t_NomsVilleChoisie"
      Set Target = Range("t_NomsVilleChoisie").ListObject.ListRows.Add().Range(1)
      Target.Resize(Range("t_Contacts").Rows.Count, Range("t_Contacts").Columns.Count).Value = Range("t_Contacts").Value
      With Range("t_NomsVilleChoisie").ListObject.Sort
        .SortFields.Clear
        .SortFields.Add Key:=Range("t_NomsVilleChoisie[Ville]"), Order:=xlAscending
        .SortFields.Add Key:=Range("t_NomsVilleChoisie[Nom]"), Order:=xlAscending
        .Apply
      End With
      Pos = Application.Match(cboVilles.Value, Range("t_NomsVilleChoisie[Ville]"), 0)
      CountOf = Application.CountIfs(Range("t_NomsVilleChoisie[Ville]"), cboVilles.Value)
      lboNoms.List = Range("t_NomsVilleChoisie[Nom]")(Pos).Resize(CountOf).Value
    End Sub
    Nom : 2020-11-21_172310.png
Affichages : 86
Taille : 15,5 Ko

    Nom : 2020-11-21_172324.png
Affichages : 83
Taille : 15,9 Ko

    Le fichier: ComboboxListBoxFiltrés.xlsm
    "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. #25
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Février 2019
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Février 2019
    Messages : 177
    Points : 45
    Points
    45
    Par défaut
    Bonjour,
    Tout d'abord je vous remercie pour l'aide apportée.

    J'ai essayé votre code, mais je n'arrive pas à tout comprendre. Je dois avoir un problème avec les index de mes colonnes.
    J'ai le tableau Tb_Site, le tableau Tb_Sitechoisi, et le tableau Tb_Garde. Lorsque je lance la macro du module test j'ai un décalage, la macro va chercher la date...
    Je n'arrive pas à déterminer ou cela dysfonctionne
    Tb_Site et Tb_SiteChoisi :
    Nom : Capture.PNG
Affichages : 83
Taille : 11,2 Ko

    Tb_Garde :
    Nom : Capture.PNG
Affichages : 76
Taille : 31,1 Ko

    Le code de la macro SUB test du module :
    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
    Sub Test()
      Dim Target As Range
     
      ClearTable "Tb_Site"
      ClearTable "Tb_SiteChoisi"
     
      Set Target = Range("Tb_Site").ListObject.ListRows.Add().Range(1)
      Target.Resize(Range("Tb_Garde").Rows.Count).Value = Range("Tb_Garde[NOMPRE]").Value
      Range("Tb_Site").ListObject.DataBodyRange.RemoveDuplicates 1
     
      With UserForm1
        .ComboBox1.List = Range("Tb_Site").Value
        .ListBox1.List = Range("Tb_Garde[NOMPRE]").Value
        .Show
      End With
    End Sub
     
    Sub ClearTable(Name As String)
      If Not Range(Name).ListObject.DataBodyRange Is Nothing Then Range(Name).ListObject.DataBodyRange.Delete
    End Sub

  6. #26
    Responsable
    Office & Excel


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 942
    Points
    55 942
    Billets dans le blog
    131
    Par défaut
    Les lignes 7, 8 et 9 du code que tu donnes crée la liste des sites dans doublons. A la ligne 8, tu dois donc prendre la colonne du site et pas la colonne NOMPRE
    "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...
    ---------------

  7. #27
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Février 2019
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Février 2019
    Messages : 177
    Points : 45
    Points
    45
    Par défaut
    A l'initialisation c'est ok, sauf que le tableau Tb_SiteChoisi est désorganiser
    Au changement dans la combo j'ai un problème sur le SOrt key.
    VBA_TABSTRUC.xlsm
    Nom : Capture.PNG
Affichages : 85
Taille : 35,9 Ko

  8. #28
    Responsable
    Office & Excel


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 942
    Points
    55 942
    Billets dans le blog
    131
    Par défaut
    Tu as mélangé mes tableaux intermédiaires, donc ça ne sait forcément pas fonctionner. De plus, je vois des tableaux sur d'autres feuilles.

    Le plus simple serait probablement que tu nous dises ce que tu souhaites obtenir au départ des tableaux de garde et d'activités, en français, sans jargon excel ou vba et sans dire le "comment". Nous pourrons probablement mieux t'aiguiller.
    "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...
    ---------------

  9. #29
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Février 2019
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Février 2019
    Messages : 177
    Points : 45
    Points
    45
    Par défaut
    Bonjour,

    J'ai trois feuilles dans mon classeurs : PARAM; ACTIVITES; GARDE_JOUR

    ==> La feuille garde jour est alimentée avec un tableau Tb_Garde dans le quel on trouve un champ date, un champ matricule, un champ nompre;un champ site; un champ motif un champ poste
    ==> Je souhaiterais alimenter le tableau Tb_Activité la feuille activités à l'aide de la feuille garde jour par l'intermédiaire d'un formulaire. J'aimerais que ce formulaire comporte le choix du site et le choix d'un thème ( thème qui se trouve dans la feuille PARAM sous la tableau Tb_THEME). L'idée serait que l'utilisateur puisse sélectionner plusieurs nom dans la listbox issue du choix du combo du choix du site.
    Aussi et avant le choix du thème, je souhaiterais que l'utilisateur puisse également avoir un état du dernier thème vu par les noms ( Date et thème) et voir le ou les thèmes les moins vu parmi les nom de la listBox.
    Enfin une fois les noms choisis et le thème choisi, je souhaiterais pouvoir affecter un nom en qualité de formateur.

    Le tableau Tb_Garde de la feuille GARDE_JOUR :
    Nom : Capture.JPG
Affichages : 73
Taille : 74,3 Ko

    Le tableau Tb_Activites de la feuille ACTIVITES
    Nom : Capture.JPG
Affichages : 90
Taille : 117,9 Ko

    Les tableaux Tb_Sites et Tb_Themes de la feuille PARAM
    Nom : Capture.JPG
Affichages : 85
Taille : 41,3 Ko

    Une idée de formulaire avec le bouton état d'aide au choix :
    Nom : Capture.JPG
Affichages : 66
Taille : 45,2 Ko

Discussions similaires

  1. [AC-2013] Créer un formulaire avec choix multiples de données
    Par nicolasdurupt dans le forum IHM
    Réponses: 4
    Dernier message: 22/10/2015, 12h09
  2. choix d'une base de données simple
    Par semenzato dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 12/07/2005, 14h18
  3. choix d'une base de donnée
    Par frisouille dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 17/06/2005, 15h52
  4. Choix d'une base de données
    Par AlexB59 dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 07/06/2005, 17h02
  5. Choix d'une base de données
    Par maurice66 dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 15/07/2004, 10h14

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