ComboBox proposant données contenues dans plusieurs colonnes

Bonjour,

J'espère ne pas faire doublon avec d'autres demandes, mais je n'ai pas trouvé exactement ce que je cherchais...

Je vais donc essayer d'être la plus explicite possible...

J'essaie de mettre en place un formulaire (sans aucune compétence en VBA) qui me permettrait de créer de nouveaux utilisateurs et de rechercher dans ceux existants.

Je veux pouvoir faire ces recherches, par nom, prénom ou en utilisant un code unique. J'ai donc créé 3 ComboBox, une qui renvoie le prénom, une pour le nom et une pour le code unique.

Pour les deux premières, pas de soucis, les données sont sur une seule colonne.

Code VBA utilisé :

Private Sub UserForm_Initialize() 'à l'initialisation de l'userform
      Dim J As Long 'déclare la variable J
      Dim I As Integer
    Set Ws = Sheets("Donnees") 
    With Me.ComboBox1
        For J = 2 To Ws.Range("A" & Rows.Count).End(xlUp).Row 'Pour J=2 => 2ème ligne du tableau + colonne A + Part de la dernière cellule d'Excel et remonte jusqu'à la dernière donnée de la colonne
            .AddItem Ws.Range("A" & J)
        Next J
  End With

  With Me.ComboBox2
        For J = 2 To Ws.Range("B" & Rows.Count).End(xlUp).Row
            .AddItem Ws.Range("B" & J)
        Next J
  End With    
End Sub

Mais pour la ComboBox du code, j'aimerais qu'elle puisse renvoyer les infos présentent sur 3 colonnes. Ce code renvoie à du matériel qui appartient aux personnes dont le nom et prénom sont renseignés. Chaque colonne renvoie a un matériel différent. Certaines personnes n'en ont qu'un, mais d'autres peuvent en avoir jusqu'à 3.

L'idée serait que je puisse écrire n'importe quel code présent dans une de ces 3 colonnes et que ça me revoit les infos qui correspondent à la ligne.

Schématiquement, voilà ce que ça pourrait donner ... :

NOM Prénom Code1 InformationProduit1 Code2 InformationProduit2 Code3 InformationProduit3

DUPONT Marcel PC2016-01 Infos PC2012-01... PC2018-01 Infos PC2018-01

LEBRUN Jeanne Port2017-04 Infos Port2017-04 PC2017-06 Infos PC2017-06 Imp2015-04 Infos Imp2015-04

ROBIN Marc PC2017-05 Infos PC2017-05 Port2014-02 Infos Port2014-02 PC2018-01 Infos PC2018-01

Je voudrais pouvoir écrire aussi bien Port2017-04 (Code1) que Imp2015-04 (Code3) dans ma ComboBox et que ça me renvoie toute les données de la ligne (NOM Prénom ...) dans les autres TextBox prévus à cet effet.

Est-ce que cela est réalisable ?

Si oui, comment faire ?

Comme je l'ai dis plus haut je débute complément en VBA.

Je vous remercie d'avoir lu ma demande en entier. J'espère qu'elle sera suffisamment clair et que vous parviendrez à m'aider.

Bonjour,

Considère qu'un code non mis sous balises Code </> n'est pas lisible, et prends les disposition pour le rendre lisible. Pour l'instant je ne le lis pas ! Et il serait en outre bien que le code soit indenté, c'est un élément essentiel de lisibilité.

3 Combo pour lister séparément des éléments de mêmes enregistrements, cela paraît a-priori aberrant, le but étant de sélectionner dans une liste un seul enregistrement, cela implique un choix unique dans une Combo. Celle-ci peut être multicolonnes ou bien à une seule dans laquelle on concatènera les données choisies comme repère, selon le cas. Aussi, il conviendra de fournir le fichier permettant de traiter la question dans son contexte.

Cordialement.

Bonjour MFerrand,

Merci pour ta réponse.

Je viens de faire la modif pour le code... Je n'avais pas vu la fonction au départ.

Mon code VBA est encore très loin d'être finis. Je veux d'abord savoir si ce que je veux faire est possible...

Je pense avoir, en partie trouvé la solution à mon problème. Si tu lance le formulaire du fichier joint, les différentes données apparaissent, mais les cellules vides sont également visible dans le menu déroulant de la ComboBox.

Aurais-tu une solution pour supprimer ces "blancs" ?

Si je veux mettre les codes de plusieurs colonnes dans la même ComboBox, c'est pour limiter le nombre de ligne pour un même utilisateur et pour faciliter la recherche.

J'espère que mon tableau sera plus clair.

Je te remercie par avance pour ton aide.

Bonjour

tu a déjà un problème avec la colonne A elle est vide ?

et tu fait ta combobox1 sur la colonne A ??

pour faire une combo sur une seule colonne voir Ex:

ComboBox1.List = Ws.Range("B2:B" & Ws.Range("B" & Rows.Count).End(xlUp).Row).Value
ComboBox2.List = Ws.Range("C2:C" & Ws.Range("C" & Rows.Count).End(xlUp).Row).Value

A+

Maurice

Bonsoir,

Réalisé avec un programme générique.

  • Il serait mieux de regrouper le nom & le prénom dans un seul champ.
  • Accéder par le nom&prénom ou le code machine

Ceuzin

Bonsoir,

Voilà ta proc. Initialize réécrite pour charger une ComboBox à 3 colonnes, la 3e colonne donne les codes séparés par des virgules suivie d'une espace.

Private Sub UserForm_Initialize()
    Dim Tbl(), codPC(2), tmp, i&, j%, k%
    tmp = [Tableau1].Value
    ReDim Tbl(1 To UBound(tmp), 1 To 3)
    For i = 1 To UBound(tmp)
        For k = 1 To 2
            Tbl(i, k) = tmp(i, k)
        Next k
        For k = 12 To 38 Step 13
            codPC(j) = tmp(i, k): j = j + 1
        Next k
        Tbl(i, 3) = Join(codPC, ", "): j = 0
    Next i
    ComboBox1.List = Tbl
End Sub

La suite, opération banale consistant à servir des contrôles à partir d'un enregistrement de données, apparaît toutefois un peu nébuleuses au vu de la multiplicité des ComboBox dont à part un on ne voit quelle est la correspondance avec un champ de données, et d'ailleurs si correspondance avec un champ, elle est forcément unique et on ne voit pas pourquoi une CombBox... Il conviendrait de clarifier la correspondance champs - contrôles à servir, renommer les contrôles de façon à faciliter l'opération, ce qui est en outre malaisé pour moi qui travaille sur un 15 pouces et non un 26 pouces et ne peut voir ton formulaire, donnant dans le gigantisme, en entier (il s'en faut d'ailleurs d'un poil qu'il ne puisse s'afficher en entier à l'exécution).

Nota : l'un des commentaires que j'ai laissé toutefois dans ton code :

'Cet évènement est important car il permet de définir les propriétés des objets et les valeurs par défaut des variables, lors du lancement du Userform.

est quelque peu inexact.

Le premier moyen de définir les propriétés par défaut des contrôles est la fenêtre de propriétés, on y fixe une fois pour toutes les propriétés invariantes que les contrôles doivent avoir à l'ouverture. On n'a à définir de propriétés au moyen de l'Initialize (ou éventuellement à partir de la procédure appelante) que lorsqu'elles sont susceptibles de varier et ne peuvent être défnies avant l'ouverture.

Cordialement.

Bonjour,

Nv version avec choix par Nom& prénom ou code PC

Ceuzin

sans titre

Bonjour,

Merci à tous pour vos réponses et votre réactivité.

Désolé pour le bug de la colonne A. Je ne vous ai pas joint mon document de base, qui est encore plus important... et une erreur a du s'y glisser.

Je pense que le code qui répond le mieux à mon besoin est celui de Ceuzin.

Par contre, je ne suis pas vraiment sûr de comprendre comment tu as fais...

Je vais essayer de m'y pencher à tête reposée.

Je reviendrais certainement vers vous si jamais j'ai d'autres questions

Bonne soirée

Rechercher des sujets similaires à "combobox proposant donnees contenues colonnes"