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 :

Coder une RECHERCEHV dans vba?.. [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2012
    Messages : 12
    Par défaut Coder une RECHERCEHV dans vba?..
    Bonjour à tous !
    Je m'explique...
    Je remplis une combobox de mon userform (avec le nom de tous les pays) grâce à un tableau situé sur une de mes feuilles.
    Ce tableau comprend 2 colonnes: une avec le noms du pays, l'autre avec le code ISO de chaque pays.
    J'aimerais que la combobox se remplisse avec le nom des pays pour que l'utilisateur puisse s'y retrouver (ça c'est bon), mais que dès qu'il choisit un pays, ce soit le code ISO correspondant que s'affiche dans la combobox. Comme ça, lors de l'export des infos entrées dans le userform vers la feuille Client, ce soit le code ISO qui soit exporter (et non pas le nom du pays).
    Ou alors que ce soit toujours le nom du pays qui apparaisse dans la combobox, mais que lors de l'export (via le bouton Ajouter) ce soit le code ISO qui apparaisse dans la cellule de la feuille Clients.
    J'ai bien pensé à un RECHERCHEV, mais je ne vois pas comment l'utiliser..

    Cordialement

  2. #2
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    Le RECHERCHEV se fait en VBA via un WorksheetFunction.Vlookup.
    Mais dans ton cas, je te conseillerais plutôt de mettre deux colonnes à ton Combobox dès son remplissage, une avec l'ISO que tu caches et l'autre avec le pays. Regarde dans les tutos ou la FAQ comment faire ça.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2012
    Messages : 12
    Par défaut
    Ok merci ! je vais voir ça

  4. #4
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    Le TUTO. Il est pour les ListBox, mais c'est exactement pareil pour les ComboBox. N'hésite pas si tu as un problème.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2012
    Messages : 12
    Par défaut
    Arg !
    Je n'arrive pas à modifier le code en conséquence...

  6. #6
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    Donne ton code, que l'on puisse t'aider.

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2012
    Messages : 12
    Par défaut
    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
    '0 - Lancement de l'USF1
     
    Private Sub UserForm_Initialize()
        'déclaration des variables
        Dim pays As String
        Dim j As Integer, i As Integer, k As Integer
        Dim temp As String
     
    '01 - Stocke le pays dans une variable
     
        With Sheets("Pays")
            pays = .Range("C1").Value
            For j = 2 To .Range("A65536").End(xlUp).Row
            'remplit la listbox
                    ComboBoxPays = Range("A" & j)
            'sans doublons...
                If ComboBoxPays.ListIndex = -1 Then ComboBoxPays.AddItem .Range("A" & j)
            Next j
        End With
    Je ne t'envoie pas le fichier excel car j'aimerais comprendre et le faire par moi moi même...

  8. #8
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    C'est pas mal parti (pense à utiliser la balise CODE - via le bouton # - pour identifier ton code). Et c'est très bien de vouloir le faire toi même.

    Regarde bien le tuto pour savoir comment ajouter la valeur du code ISO dans une deuxième colonne. Et pense à modifier les paramètres de ta combobox pour préciser le nombre de colonnes et la taille des colonnes (en mettant la deuxième taille à 0 histoire de cacher les codes ISO). Ensuite pour récupérer ta valeur, tu va chercher la valeur de la deuxième colonne de l'item selectionné (tu devrais aussi trouver la syntaxe dans le tuto). Si tu bloques encore sur des points précis, dis-le, je te débloquerais au fur et à mesure pour que tu fasses le plus possible toi-même.

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2012
    Messages : 12
    Par défaut
    Merci
    En fait, le problème vient du fait que je ne connaisse pas la syntaxe des Additem..
    j'ai envie d'écrire
    mets dans la premiere colonne de la combobox les élément de cette colonne, de cette feuille. puis dans la 2ème colonne du combobox, les éléments de la colonne d'à coté...

  10. #10
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    J'ai t'ai mis quelques messages plus haut un lien vers un tuto de ce site qui explique tout ça très clairement. On ne va pas tout réexpliquer à chaque fois parce que les gens ont la flemme de lire les tutos.

    Je suis désolé de m'énerver un peu, mais je trouve que beaucoup de gens espèrent qu'on leur donne la solution clé en main sans effort de leur part.
    Je suis d'accord, il fallait descendre un peu dans le tuto pour arriver au passage sur les listBox multicolonnes, mais ce n'était pas non plus la mer à boire. Alors la prochaine fois, lis bien les solutions qu'on te propose avant d'envoyer des messages personnels pour dire que ton problème n'est toujours pas résolu.

    Ceci étant dit, vas lire tout ça et revient s'il y a une partie que tu as mal comprise ou qui ne marche pas.

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2012
    Messages : 12
    Par défaut
    Zebreloup,

    Le tuto que tu m'as demandé de lire, je l'ai lu et relu, avec la partie qui m'intéresse (multicolonne).
    Maintenant, j'ai écrit dans un précédent message que, malgré ce tuto, aussi bien expliqué qu'il soit, je n'ai pas réussi à trouver la syntaxe exacte qui me permette d'utiliser la méthode additem.

    Que tu t'énerves, je peux le comprendre. Mais sache que je suis de bonne foi et loin d'être fainéant au point de ne pas dérouler vers le bas la molette de ma souris.

  12. #12
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    Ok, je vais être plus gentil alors, désolé.

    Voici ce qu'il y a dans le tuto
    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
    Private Sub UserForm_Initialize()
        Dim i As Byte, j As Byte
     
        'Définit le nombre de colonnes dans la ListBox
        ListBox1.ColumnCount = 7
     
        '---
        'Définit la largeur des colonnes d'une ListBox:
        'Par défaut, la largeur des colonnes est de 72 points
        '(72 points = 1 pouce)
        ListBox1.ColumnWidths = "50;80;50;60;50;70;50"     
            '---
            'Il est aussi possible de définir la dimension des colonnes en centimètres
            'ListBox1.ColumnWidths = "2 cm; 1,5 cm ......" 
            '---
        '---
     
        For i = 1 To 20
            'Ajoute une ligne et insère une donnée dans la colonne de gauche
            ListBox1.AddItem "Ligne" & i
     
            'Ajoute des données dans les colonnes de droite
            For j = 1 To 7
            ListBox1.List(ListBox1.ListCount - 1, j) = i & j
            Next j
     
        Next i
    End Sub
    Donc pour ajouter un item, on ne peut le faire que dans la première colonne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBox1.AddItem "ValeurColonne1"
    Mais on peut ensuite mettre une valeur dans n'importe quelle colonne d'une ligne. Et ici, on prend la dernière ligne car c'est celle que l'on vient d'ajouter.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBox1.List(ListBox1.ListCount - 1, j) = "ValeurColonnej"
    Et n'oublie pas que le premier élement de la liste est l'élément 0 (et pas 1) et de même que la première colonne est la colonne 0.

  13. #13
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2012
    Messages : 12
    Par défaut
    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
    Private Sub UserForm_Initialize()
        Dim i As Byte, j As Byte
     
        ComboBox1.ColumnCount = 2
        ComboBox1.ColumnWidths = "50;80"
     
        For i = 2 To 20
     
            ComboBox1.AddItem (Sheets("pays").Cells(i, 1).Value)
     
            For j = 1 To 1
            ComboBox1.List(ComboBox1.ListCount - 1, j) = Sheets("pays").Cells(i, j).Value
            Next j
     
        Next i
     
    End Sub

    la premiere colonne se remplit nickel. mais la deuxieme.. comment lui dire "pour la deuxieme colonne du combobox, pioche les valeurs dans la deuxieme colonne de la feuille "pays" "?

    Et vu que la premiere colonne se remplit avec l'incrémentation faire sur i, plus besoin d'une boucle, vu qu'il ne me reste plus qu'une colonne à remplir (la deuxieme)... non?

    désolé mais je ne sais pas comment utiliser la balise CODE...

  14. #14
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour,

    Tu n'étais pas loin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub UserForm_Initialize()
    Dim i As Byte
        ComboBox1.ColumnCount = 2
        ComboBox1.ColumnWidths = "50;80"
        With Worksheets("pays")
            For i = 2 To 20
                ComboBox1.AddItem .Cells(i, 1).Value
                ComboBox1.List(i - 2, 1) = .Cells(i, 1).Offset(0, 1).Value
            Next i
        End With
    End Sub
    Pour la balise CODE, tu sélectionne ton texte puis tu cliques sur #

    Cordialement.

  15. #15
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    J'aurais plutôt fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub UserForm_Initialize()
    Dim i As Byte
        ComboBox1.ColumnCount = 2
        ComboBox1.ColumnWidths = "0;130"
        With Worksheets("pays")
            For i = 2 To 20
                ComboBox1.AddItem .Cells(i, 2).Value
                ComboBox1.List(i - 2, 1) = .Cells(i, 1).Value
            Next i
        End With
    End Sub
    Comme ça on peut récupérer l'ISO directement avec ComboBox1.Value. Et j'ai mis la première largeur à 0 pour que l'on ne voit que le nom du pays dans la ComboBox

  16. #16
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2012
    Messages : 12
    Par défaut
    Merci à vous deux pour vos explications.

    1) j'ai du mettre la largueur à 1 car sinon il ne m'affichait pas l'ISO.. mais avec 1 la colonne ISO reste invisible donc ca va..

    2) je sais me servir de la balise code maintenant

    3) est il possible de faire ceci : l'utilisateur commence à entrer le nom d'un pays. En surbrillance apparait le nom du pays qui commence par la bonne lettre, puis des que l'utilisateur a fait son choix (avec TAB par exemple), ce n'est pas le nom du pays qui commencait à s'afficher en surbrillance mais le code ISO de la premiere colonne qui vient en combobox1.value
    car en mettant le code ISo en premiere colonne, c'est lui qui apparaissent en surbrillance lorsque l'on commence à écrire un pays..

    Pour l'instant c'est deja pas mal: c'est bien le code ISO qui s'affiche dans la combobox, et c'est ce que je voulais. les noms des pays s'affichent bien dans la liste de la combobox, donc ca aussi c'est bien.
    c'est le lien entre les deux maintenant : la saisie du pays qui me renvoie dans la combobox1.value le code ISO...

    Il faudrait que j'inverse les deux colonnes de ma combobox (pour que ce soit le pays en surbrillance) et que je sois capable de lui dire "mets en combobox1.value ce qu'il y a sur la meme ligne mais dans la deuxieme colonne")

  17. #17
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Citation Envoyé par bouams31 Voir le message
    désolé mais je ne sais pas comment utiliser la balise CODE...
    Tu sélectionnes le code et tu cliques sur le bouton # ci-dessus

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

Discussions similaires

  1. [XL-2002] Problème de syntaxe sur une formule dans VBA
    Par beber_le_stagiaire dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 11/06/2009, 15h32
  2. Comment insérer une ligne dans vba
    Par chou-estelle dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 20/12/2008, 15h04
  3. Ajouter une références dans VBA
    Par DPhBxl dans le forum VBA Access
    Réponses: 12
    Dernier message: 03/10/2008, 15h54
  4. comment figer une cellule dans VBA
    Par fabien59420 dans le forum Excel
    Réponses: 18
    Dernier message: 30/06/2008, 13h28
  5. Comment arreter une Sub dans VBA apres une erreur
    Par deubelte dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 03/08/2007, 16h13

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