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 :

ListBox pour noms de champs [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 229
    Points : 168
    Points
    168
    Par défaut ListBox pour noms de champs
    Bonjour,

    Je me trouve confronté à une difficulté trop grande pour mon niveau en VBA mais dont j'ai terriblement besoin pour la suite de mon projet

    J'aimerai récupérer dans une listBox le nom de tous les champs ( apparaissant en ligne 1 de ma feuille Excel)

    Puis lorsque je clique sur une valeur dans ma listbox, de récupérer dans ma variable " mon_champs" le numéro de la colonne (ou la lettre ) dans lequel se trouve ce champs.

    Je ne maitrise pas suffisemment bien le code VBA pour programmer un tel code.

    Si vous pouviez me donner des aides ou des bouts de code pour que je puisse avancer mon projet, je vous en serait grandement reconnaissant

    En vous remerciant d'avance

    DoDo


    PS: n'hésitez pas a demander plus de précision si jen'ai pas été suffisament claire.

    Merci

  2. #2
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    Bonjour,
    un exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Private Sub ComboBox1_Change()
     Range("B2") = ComboBox1.Column(0)
     Range("c2") = ComboBox1.Column(1)
    End Sub

  3. #3
    Membre émérite
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 814
    Points : 2 949
    Points
    2 949
    Billets dans le blog
    10
    Par défaut
    Bonjour Dodo,

    Voici quelques pistes...

    J'aimerai récupérer dans une listBox le nom de tous les champs ( apparaissant en ligne 1 de ma feuille Excel)
    On va pour cela boucler sur toutes les cellules Feuil1 (pour l'exemple, à adapter bien sur) ligne 1 de la première à la dernière colonne remplie. Toutes ces valeurs complèteront au fur et à mesure ta listBox (listBox1 dans l'exemple). Ceci se fera à l'initialisation de l'UserForm concerné (UserForm1 pour l'exemple)
    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
    Private Sub UserForm_Initialize()
    'déclaration des variables
    Dim Col As Integer, DerCol As Integer
    'vidage des éventuelles valeurs contenues précédemment dans la listbox
    ListBox1.Clear
    'on travaille dans la feuille Feuil1
    With Sheets("Feuil1")
    'attribution à la variable DerCol du numéro de la dernière colonne non-vide
    DerCol = .Range("IV1").End(xlToLeft).Column
        For Col = 1 To DerCol 'on initialise la boucle et on débute col A (Col=1)
            'on ajoute les valeurs à la listbox
            ListBox1.AddItem .Cells(1, Col).Value
        Next Col
    End With
    End Sub
    Puis lorsque je clique sur une valeur dans ma listbox, de récupérer dans ma variable " mon_champs" le numéro de la colonne (ou la lettre ) dans lequel se trouve ce champs.
    Dans ce cas, je ne sais pas l'expliquer, mais peut être un spécialiste passant par ici nous donnera le pourquoi du comment, l'événement Click simple ne fonctionne pas. Il faut donc passer par l'événement DblClick (double clic) de la listbox pour le bon fonctionnement du code... Donc :
    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
    Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Dim ValeurCherchee As String
    Dim mon_champs As Integer
    'si aucune ligne n'est sélectionnée on ne fait rien
    If ListBox1.ListIndex = -1 Then Exit Sub
    'on affecte à la variable ValeurCherchee la valeur de la ligne sélectionnée
    ValeurCherchee = ListBox1.List(ListBox1.ListIndex)
    'on travaille toujours dans la feuille Feuil1
    With Sheets("Feuil1")
        'on attribue à la variable mon_champs le numéro de la colonne
        'ou l'on trouve la ValeurCherchee grâce à la méthode find
        mon_champs = .Rows(1).Cells.Find(what:=ValeurCherchee).Column
    End With
    'message à l'utilisateur à remplacer par le code de ce que vous voulez en faire
    MsgBox mon_champs
    End Sub
    Je précise, à toutes fins utiles, que je n'ai pas testé ce code. N'hésitez donc pas à critiquer ou apporter toute modification nécessaire.

    Modif le 09/06 à 14:23 : erreur de nom de variable dans la méthode find.
    Cordialement,
    Franck

  4. #4
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 229
    Points : 168
    Points
    168
    Par défaut
    Merci pijaku pour ta solution très détaillé et claire,

    Très bien pour le double click ca me va

    Malheureusement , la valeur de la colonne indiqué est toujours 24

    en sachant que dans cette feuille il y a 24 champs, je crains qu'il ne trouve pas la bonne valeur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     mon_champ = .Rows(1).Cells.Find(what:=Valeur_cherchee).Column
    Je ne vois pas pourquoi :s

    Autant pour moi, c'est bon j'ai trouvé l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mon_champ = .Rows(1).Cells.Find(what:=Valeurcherchee).Column
    Il y avais un petit _ qui se cachait entre Valeur et cherchee ^^

    Merci beaucoup en tout cas , ca amrche très bien

    Très rapide et très efficace

    Merci

    Cdt
    DoDo

  5. #5
    Membre émérite
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 814
    Points : 2 949
    Points
    2 949
    Billets dans le blog
    10
    Par défaut
    Ach! Je n'avais pas vérifié lors de mon copié collé...
    De rien et bon courage pour la suite
    Cordialement,
    Franck

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

Discussions similaires

  1. [XL-2007] Récupérer les noms de champs access pour ma listbox
    Par louraluy dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 07/05/2015, 13h09
  2. [MySQL] Fonction pour nom des champs
    Par madevilts dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 22/05/2007, 18h45
  3. Nom de Champ pour utiliser For/Next
    Par Mulele dans le forum Access
    Réponses: 2
    Dernier message: 21/10/2005, 19h57
  4. Nom de Champ dans une table pour utiliser For/Next
    Par Mulele dans le forum Access
    Réponses: 6
    Dernier message: 30/10/2004, 13h28
  5. mot clef sql pour nom de champ
    Par bobinou007 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 12/10/2004, 13h21

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