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 :

USF récupérer dans une valeur en fonction d'un choix dans une liste (Combobox) [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 631
    Points : 255
    Points
    255
    Par défaut USF récupérer dans une valeur en fonction d'un choix dans une liste (Combobox)
    Bonjour,
    Duns une USF, j'ai une liste déroulante (Cbx1) qui est incrémentée par une colonne de base de donnée (Tb[[ColonneB]]) ; je voudrais faire apparaître dans ma USF la valeur de la cellule d'à coté.
    Pour ce faire, j'ai mis un contrôle label (LbNewUo) dans lequel je voudrais faire apparaître Tb[[ColonneC]] correspondant au choix
    J'ai commencé comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Cbx1_Change()
    If Me.Cbx1.Value = "" Then Exit Sub
            LbNewUo.Caption = ???
    End Sub
    Est-ce que quelqu'un peut m'aider svp
    Je ne sais pas si je dois récupérer le N° de la ligne du Cbx1 choisit, faire une rechercheV
    Merci à tous

  2. #2
    Inactif  
    Homme Profil pro
    Analyste-Programmeur / Intégrateur ERP
    Inscrit en
    Mai 2013
    Messages
    2 511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste-Programmeur / Intégrateur ERP
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2013
    Messages : 2 511
    Points : 10 334
    Points
    10 334
    Par défaut
    Bonjour,

    Citation Envoyé par mouftie Voir le message
    Je ne sais pas si je dois récupérer le N° de la ligne du Cbx1 choisit, faire une rechercheV
    Tu peux arriver au résultat souhaité via les deux méthodes, après suivant le contenu et la taille de ton tableau de données, l'une sera peut-être plus optimisée que l'autre, mais pour un nombre limité de choix je ne pense pas que cela joue suffisamment niveau temps de réponse.

    Essais déjà de le faire via la méthode que tu maitrises le plus entre les deux, et si jamais tu bloques, nous pourrons t'apporter des pistes en fonction de l'erreur rencontrée.

  3. #3
    Membre actif
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 631
    Points : 255
    Points
    255
    Par défaut
    Bonjour Zirak,
    Merci de ta réponse, le problème, c'est que je ne maitrise aucune des deux, sinon, j'aurai essayé avant de poster ;<

  4. #4
    Inactif  
    Homme Profil pro
    Analyste-Programmeur / Intégrateur ERP
    Inscrit en
    Mai 2013
    Messages
    2 511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste-Programmeur / Intégrateur ERP
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2013
    Messages : 2 511
    Points : 10 334
    Points
    10 334
    Par défaut
    La solution en rechercheV sera peut-être plus simple alors.

    Sais-tu faire une rechercheV dans une feuille Excel (sans parler de macro) ? Car c'est pratiquement la même chose.

    Voici la page concernant la version VBA :

    https://msdn.microsoft.com/fr-fr/lib.../ff194701.aspx

    En gros, tu déclare une variable pour recevoir le résultat de ta rechercheV, que tu appelles via la méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.WorkSheetFunction.vLookUp()
    Consulte déjà cette page, et essais de voir ce que tu arrive à écrire à partir de cela.

  5. #5
    Membre actif
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 631
    Points : 255
    Points
    255
    Par défaut
    Merci zirak, mais je n'y arrive pas, j'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub CbxExUo_Change()
    If Cbx1 = "" Then Exit Sub
     
        LbNewUo.Caption = Application.WorksheetFunction.VLookup(Cbx1, "Tb[[ColonneB]]", 4)
    End Sub
    J'étais partie avec l'autre solution, et là j'ai trouvé qqch qui fonctionne...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Cbx1_Change()
    Dim Lg As Long
    Dim Cherch As String
    If Cbx1 = "" Then Exit Sub
    Cherch = Cbx1
    Lg = Range("Tb[[ColonneB]]").Find(Cherch, _
        LookIn:=xlValues, lookat:=xlWhole, SearchOrder:=xlByRows, MatchCase:=False).Row
     
        LbNewUo.Caption = Cells(Lg, 4)
        LbSigle.Caption = Cells(Lg, 1)
        LbLibele.Caption = Cells(Lg, 2)
    End Sub
    maintenant si tu as un exemple avec recherv pour utilisation dans une USF, je suis toujours preneuse.
    Merci

  6. #6
    Inactif  
    Homme Profil pro
    Analyste-Programmeur / Intégrateur ERP
    Inscrit en
    Mai 2013
    Messages
    2 511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste-Programmeur / Intégrateur ERP
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2013
    Messages : 2 511
    Points : 10 334
    Points
    10 334
    Par défaut
    Citation Envoyé par mouftie Voir le message
    Merci zirak, mais je n'y arrive pas, j'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub CbxExUo_Change()
    If Cbx1 = "" Then Exit Sub
     
        LbNewUo.Caption = Application.WorksheetFunction.VLookup(Cbx1, "Tb[[ColonneB]]", 4)
    End Sub
    Alors premier point : si ton label doit se mettre à jour lors du changement dans la combobox, il faut mettre ton bout de code dans l'évènement "change" de ta combobox (donc Cbx1), à quoi correspond CbxExUo ?

    Ensuite pour le reste, le souci vient des arguments transmis dans ta rechercheV (cf le lien de mon message précédent):

    1er argument, le terme à rechercher :
    Ici pas de problème même si en général pour ma part j'aime bien tout écrire et donc je mettrais Cbx1.value


    2ème argument, le tableau dans lequel effectuer la recherche, doit correspondre à une table avec au moins 2 colonnes :
    La tu lui transmet une plage correspondant à 1 seule colonne, donc forcément, cela ne fonctionne pas.

    Le mieux étant de lui fournir la plage exacte (à moins que ton tableau de l'onglet TB ne soit pas figé, auquel cas il faut recalculer la plage à chaque fois) :

    Essais par exemple : Worksheets("TB").range("B5:C20") (à adapter avec la vraie plage de ton fichier bien entendu)


    3ème argument, le numéro de la colonne de ton tableau qui contient la valeur à retourner :
    Pourquoi 4 ?

    Ta colonne B va être la colonne 1, et la colonne C ta colonne 2 (si on se base sur la plage que je viens d'indiquer).


    4ème argument, le type de recherche: la effectivement l'argument étant optionnel, tu n'es pas obligée de le préciser, cependant si il est omis, la fonction peut rechercher une correspondance exacte ou approchante. Comme à mon avis tu recherches une correspondance exacte, à ta place je préciserais l'argument à False.


    Ce qui au final, nous donnerait quelque chose dans ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.WorksheetFunction.VLookup(Cbx1.value, Worksheets("TB").range("B5:C20"), 2, False)

    Après attention, la rechercheV est assez sensible au type de donnée recherchée, donc le format de la cellule, peut influence le fait qu'une correspondance soit trouvée ou non, comme indiqué dans le lien.

  7. #7
    Membre actif
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 631
    Points : 255
    Points
    255
    Par défaut
    Merci zirak,
    Tes explications sont très claires, cela fonctionne très bien.
    Je te souhaite une bonne fin de journée

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 14/05/2014, 12h00
  2. [AC-2003] Exécuter une macro en fonction d'un choix dans un formulaire
    Par chicabonux dans le forum IHM
    Réponses: 10
    Dernier message: 11/05/2010, 09h23
  3. Réponses: 3
    Dernier message: 22/03/2008, 11h48
  4. Réponses: 5
    Dernier message: 12/10/2007, 10h06
  5. Réponses: 3
    Dernier message: 18/01/2007, 18h19

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