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 :

Liste déroulante avec une autocomplétion


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8
    Points : 2
    Points
    2
    Par défaut Liste déroulante avec une autocomplétion
    Bonjour,

    J'ai deux feuilles excel dans un même classeur.
    L'une de ces feuilles contient une liste de mot.
    L'autre un comboBox.

    J'aimerais pouvoir récupérer dans le combobox ma liste avec une auto complétion, afin que je ne sois pas obligé de dérouler tout mon combobox pour trouver le mot !
    J'ai trouvé sur ce forum une idée de script VB mais je n'arrive pas à le mettre en place.
    Pourriez-vous me donner un exemple svp.
    Voici le code trouvé :
    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
    Private Sub ComboBox1_Change()
     If Len(ComboBox1) = 1 Then
            Dim a()
            lettre = Left(Me.ComboBox1, 1)
            For i = 1 To [Liste].Count
              If UCase(Left(Range("liste")(i), 1)) = UCase(lettre) Then
                  n = n + 1
                  ReDim Preserve a(0, 1 To n)
                  a(0, n) = Range("liste")(i)
              End If
            Next
            If n >= 1 Then
              Me.ComboBox1.List = Application.Transpose(a)
              SendKeys "{F4}"
              témoin = True
            End If
        End If
    End Sub
    Qu'est-ce que je dois changer dans mon code pour que ça aille chercher ma liste dans ma deuxième feuille de calcul ?

    Merci d'avance.

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

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonjour,

    Il y a un truc que je ne comprend pas, pourquoi ne pas charger la liste de la feuille 2 dans la combobox ? De cette manière tu auras automatiquement l'autocompletion. Sinon à quoi te sert la combobox ?

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Oui, pourquoi pas. Le but est de pouvoir mettre à jour cette liste (manuellement) en ajoutant une ligne, mais le tout doit fonctionner avec un autoCompletion afin que je ne perde pas de temps à parcourir toute la liste (ex : liste déroulante standard).

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

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Il doit se faire tard...parce que je ne vois pas le rapport entre ton combobox et l'autocompletion avec le fait de mettre à jour la liste de ta feuille 2 en ajoutant une ligne.

    Tu veux ajouter cette ligne où ? en fin de liste ? entre deux éléments de la liste ? comment comptes-tu ajouter cette ligne ?

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Voilà un exemple en pièce jointe.
    Sauf que sur celui si, la liste est sur la même feuille, alors que je souhaiterais mettre ma liste sur une autre feuille.

    Merci en tout cas d'avoir répondu à mon appel au secours !

    Si, y a des choses que vous ne comprenez pas, n'hésitez pas à me le dire.

    Merci
    Fichiers attachés Fichiers attachés

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

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Tu peux essayer ceci, en mettant ta liste dans la colonne A de la feuille 2
    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 ComboBox1_Change()
    Dim plage As Range, Cel As Range, DerL As Long
    Dim lettre As String
     
    If Len(ComboBox1) = 1 Then
        ComboBox1.Clear
        DerL = Sheets(2).Range("A65535").End(xlUp).Row
        Set plage = Sheets("feuil2").Range("A2:A" & DerL)
        lettre = Left(Me.ComboBox1, 1)
     
        For Each Cel In plage
            If UCase(Left(Cel, 1)) = UCase(lettre) Then
                Me.ComboBox1.AddItem Cel.Value
            End If
        Next
    End If
    End Sub

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Super,

    Merci beaucoup c'est exactement ce que je souhaitais, étant donné que c'est un forum, et que je ne veux pas mourir con, pourrais-tu m'expliquer brièvement ce que ces lignes veulent dire (à savoir que je suis développeur AS3 mais que je m'intéresse un peu à Excel).
    Autre chose, crois tu que dans ton code ce soit possible que lorsque je clique sur ma Combobox, sa m'affiche la liste complète ?

    J'ai essayé ça mais il semble que ce ne soit pas ça !
    Je continue mes tests, mais bon ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub ComboBox1_Click()
    Dim plage As Range, Cel As Range, DerL As Long
    Dim lettre As String
    Set plage = Sheets("Listes").Range("E3:E3" & DerL)
    End Sub
    Je viens aussi de m'apercevoir que si je fais un copié/coller de cette combobox dans les cellules en dessous des ma première Combobox, ça ne copie pas la VB en rapport.
    J'ai environ 200lignes, il va falloir que je copie la combobox et le code VB à chaque ligne , ou y a-t-il une astuce pour copier la combobox sans recopier le code à chaque fois ?

    Merci encore A+

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

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Citation Envoyé par ARROWPHIL Voir le message
    Autre chose, crois tu que dans ton code ce soit possible que lorsque je clique sur ma Combobox, sa m'affiche la liste complète ?
    Oui c'est ce que je te proposais dans ma première intervention, tu as l'exemple dans le fichier joint Pièce jointe 36311

    Citation Envoyé par ARROWPHIL Voir le message
    J'ai environ 200lignes, il va falloir que je copie la combobox et le code VB à chaque ligne , ou y a-t-il une astuce pour copier la combobox sans recopier le code à chaque fois ?
    Je ne vois pas l'intérêt de recopier 200x la même combobox, il doit y avoir une meilleure solution mais il faudrait que tu expliques le but à atteindre parce que là on tatonne

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Encore merci de suivre mon problème. Le mieux est que je te donne mon fichier, tu comprendras mieux ce que je cherche à faire.

    Je te joins aussi ma nouvelle discussion sur ce forum sur un point qui peut peut-être eêtre réglé en même temps, ce qui évitera certainement que tu te recasse la tête pour moi !

    Nouvelle discussion d'aujourd'hui :
    Bonjour à tous,

    Je suis quasi arriver à la fin d'un petit projet excel, de gestion de projet.
    Je suis développeur AS3, et j'ai mit en place sous excel, un classeur avec plusieurs feuille (5 au total) qui désignes les étapes de mon projet, les heures, mes ressources (financière), mes achats, etc.
    Grâce à la générosité de Fring (Modérateur sur ce forum), j'ai pu via une combobox et un script VB, récupérer une liste d'action qui s'affiche dans ma combobox.

    Aujourd'hui :
    - J'ai une feuille projet
    - J'ai une feuille Listes
    - Je vais chercher dans ma feuille Liste, une action pour ce projet.

    Maintenant j'aimerais (si c'est possible) :
    - j'ai ajouté une colonne "temps" à coté de chaque action de ma feuille "Liste" (c'est le temps en générale que je mets pour faire l'action ex : Création d'un icone animé 2:00)
    - J'aimerais quand même temps que je récupère cette liste dans ma feuille "Projet", je récupère aussi le temps que je mets en générale pour cette action, pour ensuite le multiplier par un "quotient" (dans la feuille projet).

    Je sais pas si je suis assez claire. Je vous laisse donc le projet Excel en pièce jointe, cela servira peut-être un jour à quelqu'un !

    Si vous avez des solutions ... ou des questions n'hésitez pas !

    Ps : à noter que sur la feuille Projet, seul la colonne B3 fonctionne avec le combobox, mais dans l'avenir toute les lignes auront le même comboBox.

    Merci d'avance.


    En tout cas merci encore pour ton intervention, car j'ai pas mal bossé sur ce mini projet (pour toi) qui pour moi a été une vraie usine à gaz à faire Mais je vois le bout grâce à toi
    Fichiers attachés Fichiers attachés

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

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Je n'ai pas Excel 2007, je ne peux donc pas lire ton fichier, enregistre le au format xls

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Ha ok, désolé, j'y avais pas pensé.
    Le voilà, je ne sais pas si toute les fonctions du classeur seront actifs, mais tu auras au moins un aperçu de ce dont je parle.

    Merci.
    Fichiers attachés Fichiers attachés

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

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Ci-joint une proposition avec une seule ComboBox afin d'éviter de devoir en insérer une à chaque ligne ce qui deviendrait vite fastidieux.

    Lorsque le choix dans la combo est fait, double clic dans celle-ci pour transférer le choix dans le tableau (les heures estimées sont égalemment transférées).

    La mise à jour des données contenues dans le combo se fait à deux moments :
    • à l'ouverture du classeur
    • lorsqu'on quitte la feuille et que l'on revient sur celle-ci (lorsqu'on met la liste à jour par exemple)


    Pièce jointe 36324
    .

  13. #13
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Salut,

    Bon je comprends pourquoi tu es modo , c'est super, c'est exactement ce qu'il me fallait. Je suppose que je te l'ai déjà, dit mais vraiment, encore merci du fonc du coeur, car c'est outil est super important pour moi ! De plus ça m'a apprit comment fonctionnait le VB sur Excel, ça à l'air d'air un code relativement sympa à utilisé (qu'est-ce que tu me conseillerais comme bouquin pour apprendre le VB ?)

    1/ Pourrais-tu me dire, où as-tu placé le code qui permet de charger la colonne D avec le "temps de l'action" afin que je puisse rajouter une colonne qui sera le résultat de la colonne quotient (à tort, j'aurais dû l'appeler "coefficient multiplicateur") multiplier par le "temps de l'action" ? Pour t'expliquer ce coefficient multiplicateur me sert dans le cas où l'action est plus complexe qu'à son habitude.

    2/ Sinon que penses-tu de mon tableau ?

    Merci encore Fring - C'est du très très bon boulot !
    J'ai la souris placé au-dessus de résolu (comme ça tu seras libérer de tes obligations de modo sympa ;D)

    ps : tu peux noter dans un coin, que si un jour tu as besoin de conseil ou d'un petit truc sur Flash, n'hésite pas à m'envoyer un MP ou à me retrouver sur le forum ! Ce sera avec plaisir que je te retournerais le coup de main

    Merci encore

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

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Pour la récupération des temps, j'ai procédé comme ceci :
    • La Combobox possède 2 colonnes (propriété ColumnsCount de la combo fixé à 2).
    • La 2ème colonne n'est pas visible parce que j'ai fixé sa largeur à 0 (propriété ColumnsWidth), tu verras dans les propriétés, à la propriété ColumnWidth, les valeurs 1 pt;0 pt. La première valeur correspond à la largeur de la 1ère colonne (1 pt = largeur auto en fonction du contenu), la seconde à la 2ème, etc... si plus de colonnes.
    • Les valeurs "Action" et "Temps" sont chargées dans les deux colonnes de la combo via le code suivant
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      Sub remplissage_combo()
      Dim dL As Integer
       
      'recherche de la dernière ligne occupée de la colonne E
      dL = Sheets("Listes").Range("E" & Rows.Count).End(xlUp).Row
       
      'remplissage du combo avec les valeurs des colonnes E et F
      Sheets("Projet").ComboBox1.ListFillRange = "Listes!E3:F" & dL
      End Sub
    • Ensuite il suffit de récupérer les valeurs de la ligne sélectionnée dans le combo (dans ce cas via l'événement double click)
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      Private Sub ComboBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
       
      If ComboBox1 <> "" Then '<-- si une sélection est faite dans le combo
          With Range("B" & Rows.Count).End(xlUp)(2) '<-- recherche de la première ligne vide dans la colonne B
              .Value = ComboBox1.List(ComboBox1.ListIndex, 0) '<-- colonne B = colonne 1 de la ligne sélectionnée du combo
              .Offset(0, 2) = ComboBox1.List(ComboBox1.ListIndex, 1) '<-- colonne D = colonne 2 de la ligne sélectionnée du combo
          End With
      End If
       
      ComboBox1 = "" '<-- reset de la sélection dans le combo
      End Sub


    La récupération des valeurs de la ligne sélectionnée dans le Combo, lorsque celui-ci posséde plusieurs colonnes, se réalise à l'aide de la syntaxe suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ComboBox1.List(ComboBox1.ListIndex, 0)
    ComboBox1.List(x, y) --> x = n° de la ligne et y = n° de la colonne
    ComboBox1.ListIndex --> ligne sélectionnée
    la première ligne est la ligne 0, la seconde ligne est la ligne 1, etc... Idem pour les numéros de colonnes.

    N'hésite pas si tu as besoin d'autres précisions

  15. #15
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Super bon boulot.

    Je te remercie du fond du coeur, car ça m'enlève une belle épine du pied, comme je te l'ai dit dans mon précédent mail si tu as besoin, n'hésite pas !

    Donc encore bravo pour la réactivité et le développement (ainsi que ta patience) et aussi pour la petite explication.

    Bonne continuation et peut-être à un de ces jours !

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

Discussions similaires

  1. Liste déroulante avec une completion
    Par facteur dans le forum Excel
    Réponses: 11
    Dernier message: 26/04/2012, 12h02
  2. Réponses: 0
    Dernier message: 07/07/2010, 14h51
  3. Comment remplir une liste déroulante avec une macro sans doublons
    Par alex.a dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 14/06/2007, 18h34
  4. liste déroulante avec une case à cocher et une image
    Par kurul1 dans le forum C++Builder
    Réponses: 4
    Dernier message: 08/03/2007, 09h54
  5. [Oracle] Remplir une liste déroulante avec une table
    Par CYCLOPE91440 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 26/12/2006, 15h26

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