Combobox et recherche occurrences dans feuille Excel

Bonjour à tous,

je suis tout nouveau sur ce forum qui m'a souvent aidé par le passé !!

Aujourd'hui je post mon premier message car je commence à désespérer. Je m'explique:

je dispose de deux combobox (sur un USF) dont l'une contenant 9 secteurs différents rempli via le code:

Combobox.list() = Array("....") .

Une fois qu'un choix a été émis par un click parmi les 9 possibilités, j'aimerai que la seconde ComboBox soit remplit par le nom de tous les personnes rattachées au secteur choisit ! (Je transfert le choix combobox1 dans une textbox pour la réutiliser lors de ma recherche comme élément de comparaison.)

je dispose d'un tableau avec l'ensemble du personnel et de leur secteur rattaché.

Pour être plus précis:

colonne A ( de A2 à A80 )contient la liste des personnes (P. Nom)

colonne B (de B2 à B80) contient le secteur de chaque personne (plusieurs personnes peuvent avoir le même secteur)

Pour plus de visibilité dans le tableau j'ai effectué un rangement alphabétique des secteurs (les mêmes secteurs se suivent).

Mon PROBLEME: je souhaite effectuer une recherche sur la colonne B pour que chaque concordance avec le choix stocké dans la textbox, il ajoute à la combobox2 le contenu de chaque cellules de la colonne A correspondante.

Si choix combobox1 = secteur 3 alors combobox2 = toutes les personnes rattachées au secteur 3 et uniquement elles.

J'ai effectué une recherche via .FIND /.FINDNEXT, mais il ne me trouve que la première occurrence et je n'arrive pas à obtenir toutes les possibilités. Si j'y ajoute une boucle, elle m'affiche N fois la même valeurs (la première occurrence au lieu de 5 résultats différents par exemple).

les précédents topics sont vieux ou alors je n'arrive pas à adapter leurs codes source.

Je vous remercie tous pour votre aide futur

Je reste à votre dispositions pour tout questionnement.

Amicalement

Mico.

Bonjour et ,

L’aide sur la méthode Range.find présente un exemple pour rechercher toutes les cellules d’une plage qui contiennent une valeur donnée.

With Worksheets(1).Range("a1:a500")
    Set c = .Find(2, lookin:=xlValues)
    If Not c Is Nothing Then
        firstAddress = c.Address
        Do
            c.Value = 5
            Set c = .FindNext(c)
        Loop While Not c Is Nothing And c.Address <> firstAddress
    End If
End With

A+

Bonjour Franguy,

merci beaucoup pour ta réponse ! cela correspond bien à ma structure de programme mais je n'arrive pas à la faire fonctionner !

lorsque j'essaie, il me lance une erreur d'incompatibilité par une erreur exécution 13 sur la ligne set c=... !

Dans ma recherche .find, je dois bien ajouter sur quel critère je veux faire la recherche non ?

Une fois la cellule trouvé (contenant ma chaîne de caractère), je souhaite copié la cellule de la colonne A ligne où c à trouver une occurrence et non celle en B.

Sa peut paraître bête mais a force de me casser la tête dessus je commence à plus voir l'erreur ^^

UserForm1.ComboBox2.Clear

Dim lign As Variant
Dim mot As String

mot = UserForm1.TextBox3.Text

With Workbooks("aaa.xls").Sheets("bbb").range("B2:B80")

'j'obtiens une incompabilité sur cette ligne de code ! (set c=...)
    Set c = .Find(2, mot, LookAt:=xlvalues)
    If Not c Is Nothing Then
       firstAddress = c.Address
         Do
            Me.ComboBox2.AddItem (c.value,1)     'pour ajouter le contenu de la colonne 1 cellule voisine de c ?
            Set c = .FindNext(c)
         Loop While Not c Is Nothing And c.Address <> firstAddress
    End If

'End With
End Sub

Merci beaucoup à vous !

bonjour à tous

quelqu'un pouurait m'aider svp!!!!

je travaille sur un projet de rationalisation du transport et cacul automatique de cotation et je veux creer une application qui donne automatiquement la cotation.

c à dire en selectionnant par exemple la destination sur liste deroulante, un tableau avec les tarifs concernés sera consulté sur une autre feille excel et sur la fiche pricipale un resultat sera donné automatiquement.

vous allez trouver l'exemple sur une pièce jointe

Essaie avec

Set c = .Find(mot, LookAt:=xlValues)

A+

Merci frangy de prendre le temps de me répondre !!

j'ai essayer de contourner le pb (sa bloque toujours malgré ta proposition car il me dit que cela n'appartient pas à la sélection).

Bref j'ai essayé ce bout de code:

Le problème est que maintenant il bloque sur mon objet c=.findNext(c) par une erreur d'execution 438

le code bloque mais quand je regarde mon userform, la combobox 2 a bien ajouter "coucou"... Il n'arrive donc pas à boucler mais je comprends pas pourquoi !

With Workbooks("aaa.xls").Sheets("bbb")
Set c = .Columns(4).Cells.Find(mot, LookIn:=xlValues, LookAt:=xlPart)
If Not c Is Nothing Then
        firstAddress = c.Address
        Do
            Me.ComboBox2.AddItem ("coucou")      ' je ne sais pas comment lui demander d'ajouter la cellule de la colonne précédente
            c = .FindNext(c)
        Loop While Not c Is Nothing And c.Address <> firstAddress
End If

je te remercie encore de m'aider ^^

Il faut que tu boucles sur la même plage

c = .Columns(4).Cells.FindNext(c)

A+

Merci beaucoup frangy !!

la solution (pour ce problème) est vraiment toute bête, désolé de ne pas l'avoir vu ^^

maintenant je souhaite ajouter à ma combobox le contenu de la cellule où le nom de la personne est contenu

ex: il trouve l'axe 3 en B2 donc je veux copié le contenu de A2 ds ma combobox !!

a partir de Combobox.additem (indice de ligne , indice de colonne) ? mais comment savoir à quelle indice de ligne la boucle se trouve ? dans le code, le repère serai donc "c.value" ?

Encore merci pour votre aide !! Promis apres j'arrete et je valide ^^

Je verrais bien

Me.ComboBox2.AddItem C.offset(0,-1).value

A+

c'est incroyable, tu es vraiment très fort .... en quelques heures tu as résolu un problème simple et tu m'a montré mes lacunes en VBA ^^

je te remercie grandement.

Cependant (ahahah le vilain), il m'affiche que la premier occurrence et non pas l'ensemble

Fais-moi passer un classeur exemple.

Dans l'immédiat, je m'absente et je regarderai plus tard (à moins que tu aies trouvé d'ici là ).

A+

je te fais cela des que possible !

no soucis , je vais chercher un peu avant de te l'envoyer

Bonne aprem et encore merci a toi !!

Le fait que je n'ai qu'un seul employé dans ma combobox au lieu de 5 ne vient-elle pas du code

ME.combobox2.additem c.offset(0,-1).value ?

ne devrait-il pas y avoir une indication permettant a l'index de s'incrémenter et ainsi d'éviter d'écraser la valeur précédente ?

Qd je lance pas à pas le code j'ai l'impression qu'il ne réalise pas la boucle pourtant je respecte bien le principe de la boucle do/loop while...

Tchou les amis

Regarde l'exemple et dis-moi ....

155exemple.xlsm (19.14 Ko)

A+

je testerai que demain désolé !!

mais en regardant de plus près ton code je remarque que tu as écrit c= .column(4).find alors que moi j'ai écrit dans le miens ce matin c= .column(4).cells.find.... donc en quelques sorte, ce détails ".cells" serai une condition pour obtenir uniquement la première valeur ?

Same player, shoot again.

Tu n'es pas loin mais c'est pas encore ça.

Va falloir attendre demain alors ?

A+

Bonjour bonjour mon cher Frangy !!!!

Je suis comment dirai .... stupéfait que ton programme fonctionne (le principe de recherche correspond à mon besoin a 200%) sous mon pc perso (office 2010) mais quand je l'adapte sur mon pc pro (excel 1997-2003) il refuse de tout m'afficher !!!! je commence à croire que le programme vient d'ailleurs ...

pourrai-tu me renvoyer ton fichier excel sous un format 97-2003 stp ??

je replonge dans ces lignes pour enfin me débloquer....

see you later

Mico


Je reviens en vainqueur !!!!!!

le seul problème vient de ma condition c= .column(4).findNext(c) !!!!!! au debut du programme j'ai défi c as range.

Pourtant le premier c= .column(4).find("..."). a été définit grâce à l'objet "Set" donc as range inutile !!

je l'ai supprimé et ajouter set au code : SET c= .column(4).findNext(c)

preuve en image:

        Set = .Columns(4).Find(mot, LookIn:=xlValues, LookAt:=xlPart)
        If Not c Is Nothing Then
            firstAddress = c.Address
            Do
                    Me.ComboBox2.AddItem c.Offset(0, -1).Value
                   Set c = .Columns(4).FindNext(c)     'j'ai ajouter le set à cette ligne-ci
            Loop While Not c Is Nothing And c.Address <> firstAddress
        End If

je te remercie grandement pôur m'avoir aidé Frangy !!!!

ne tkt pas je serai de retour très prochainement je pense ^^

Rechercher des sujets similaires à "combobox recherche occurrences feuille"