Rechercher, résultat liste déroulante en VBA

Ilino

XLDnaute Barbatruc
Bonjour Forum
Je vous rejoins encore pour déficeler mon souci le suivant (apparemment je me suis mouillé dans la solution déjà obtenue bref)
Dans mon classeur j’ai deux feuilles (LISTES et FSE)
Dans la feuille LISTES (ou après je vais la considérée comme ma base de données), je fais rentrer des données selon leurs significatives
Dans la feuille FSE j’ai 17 colonnes mon souci est basé maintenant sur les deux premières colonnes
(Désignation & Fournisseur) je souhaiterai faire une application (en code VBA) de la fonction RECHERCHER la donnée saisi dans la colonne Fournisseur dans le tableau de la feuille LISTES et afficher le résultat dans la colonne Désignation et dans le cas ou on trouve plusieurs résultats je souhaiterai afficher une liste déroulante. ( voir l’exemple dans le fichier rattaché
Merci Gracie et Bon week end
 

Pièces jointes

  • FSE 2013 forum1.xlsm
    270.2 KB · Affichages: 59
Dernière édition:

job75

XLDnaute Barbatruc
Re : Rechercher, résultat liste déroulante en VBA

Bonsoir Ilino,

peut on avoir un help de votre part ?

With a little help from my friend :

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(ActiveCell, [A3:A65000]) Is Nothing Then Exit Sub
Dim c As Range, liste As String
For Each c In Feuil1.[1:1].SpecialCells(xlCellTypeConstants)
  If Application.CountIf(c.EntireColumn, ActiveCell(1, 2)) _
    Then liste = liste & "," & c
Next
With ActiveCell.Validation
  .Delete
  If liste <> "" Then .Add xlValidateList, Formula1:=Mid(liste, 2, 999)
End With
End Sub
Notez qu'avec cette méthode le nombre de caractères de la liste déroulante est limité (255 ou 256).

Fichier joint.

A+
 

Pièces jointes

  • FSE 2013 forum(1).xls
    376.5 KB · Affichages: 68

job75

XLDnaute Barbatruc
Re : Rechercher, résultat liste déroulante en VBA

Re,

En utilisant la feuille auxiliaire Feuil3 on n'a plus la contrainte des 255 caractères :

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Feuil3 est le CodeName de la feuille auxiliaire
If Intersect(ActiveCell, [A3:A65000]) Is Nothing Then Exit Sub
Dim c As Range, lig As Integer
For Each c In Feuil1.[1:1].SpecialCells(xlCellTypeConstants)
  If Application.CountIf(c.EntireColumn, ActiveCell(1, 2)) Then
    lig = lig + 1
    Feuil3.Cells(lig, 1) = c
  End If
Next
With ActiveCell.Validation
  .Delete
  If lig Then
    ThisWorkbook.Names.Add "Liste", Feuil3.[A1].Resize(lig)
    .Add xlValidateList, Formula1:="=Liste"
  End If
End With
End Sub
Fichier (2).

A+
 

Pièces jointes

  • FSE 2013 forum(2).xls
    383.5 KB · Affichages: 60

Ilino

XLDnaute Barbatruc
Re : Rechercher, résultat liste déroulante en VBA

Bonsoir Forum, BONSOIR JOB
un grand Thinks for my friend
gracie gracie gracie... bonne nouvelle pour le debut de ma semaine comme ça je peu bosseR ...
mais juste a little Q :
"En utilisant la feuille auxiliaire Feuil3 on n'a plus la contrainte des 255 caractères " peut on avoir plus d'explication if you wante ???
@+ AMIGOS
 

job75

XLDnaute Barbatruc
Re : Rechercher, résultat liste déroulante en VBA

Re,

Quand on crée une liste de validation en y entrant a;b;c;d... on est limité à 255 caractères.

Quand on la crée avec une plage nommée par la formule =Liste pas de limitation.

A+
 

Ilino

XLDnaute Barbatruc
Re : Rechercher, résultat liste déroulante en VBA

Re ;
merci pour la réponse JOB de toute facon ma liste est limitée a un nombre qui dépasse pas 20 quand meme merci ,je peut l'utiliser dans d'aute application
Merci
 

Ilino

XLDnaute Barbatruc
Re : Rechercher, résultat liste déroulante en VBA

Re Bonsoir JOB
si tu permet une other Q pour ton code
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Feuil3 est le CodeName de la feuille auxiliaire
If Intersect(ActiveCell, [A3:A65000]) Is Nothing Then Exit Sub
Dim c As Range, lig As Integer
For Each c In Feuil1.[1:1].SpecialCells(xlCellTypeConstants)
  If Application.CountIf(c.EntireColumn, ActiveCell(1, 2)) Then
    lig = lig + 1
    Feuil3.Cells(lig, 1) = c
  End If
Next
With ActiveCell.Validation
  .Delete
  If lig Then
    ThisWorkbook.Names.Add "Liste", Feuil3.[A1].Resize(lig)
    .Add xlValidateList, Formula1:="=Liste"
  End If
End With
End Sub

je souhaiterai dans le resultat de recherche si j'ai une seule donnée donc il affichera directement dans la cellule sinon liste deroulante ( comme tu as fait )
merci
 

Ilino

XLDnaute Barbatruc
Re : Rechercher, résultat liste déroulante en VBA

Re Bonsoir JOB
si tu permet une other Q pour ton code
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Feuil3 est le CodeName de la feuille auxiliaire
If Intersect(ActiveCell, [A3:A65000]) Is Nothing Then Exit Sub
Dim c As Range, lig As Integer
For Each c In Feuil1.[1:1].SpecialCells(xlCellTypeConstants)
  If Application.CountIf(c.EntireColumn, ActiveCell(1, 2)) Then
    lig = lig + 1
    Feuil3.Cells(lig, 1) = c
  End If
Next
With ActiveCell.Validation
  .Delete
  If lig Then
    ThisWorkbook.Names.Add "Liste", Feuil3.[A1].Resize(lig)
    .Add xlValidateList, Formula1:="=Liste"
  End If
End With
End Sub
je souhaiterai dans le resultat de recherche si j'ai une seule donnée donc il affichera directement dans la cellule sinon liste deroulante ( comme tu as fait )
merci
Bonsoir FORUM, Bonsoir JOB
PUIS JE AVOIR UNE SOLUTION OU PROPOSITION IF YOU WANT ?
Merci
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Rechercher, résultat liste déroulante en VBA

Bonjour Ilino, le forum,

Vous auriez pu faire ça tout seul non ?

Code:
If lig = 1 Then ActiveCell = Feuil3.[A1]
If lig > 1 Then
  ThisWorkbook.Names.Add "Liste", Feuil3.[A1].Resize(lig)
  .Add xlValidateList, Formula1:="=Liste"
End If
Fichier (3).

A+
 

Pièces jointes

  • FSE 2013 forum(3).xls
    383.5 KB · Affichages: 54

job75

XLDnaute Barbatruc
Re : Rechercher, résultat liste déroulante en VBA

Re,

On peut aussi prévoir d'effacer la cellule active, là c'est un peu plus compliqué :

Code:
If lig = 0 Then ActiveCell = ""
If lig = 1 Then ActiveCell = Feuil3.[A1]
If lig > 1 Then
  ThisWorkbook.Names.Add "Liste", Feuil3.[A1].Resize(lig)
  .Add xlValidateList, Formula1:="=Liste"
  If Application.CountIf([Liste], ActiveCell) = 0 Then ActiveCell = ""
End If
Fichier (4).

A+
 

Pièces jointes

  • FSE 2013 forum(4).xls
    384 KB · Affichages: 59

Ilino

XLDnaute Barbatruc
Re : Rechercher, résultat liste déroulante en VBA

Bonjour Ilino, le forum,

Vous auriez pu faire ça tout seul non ?

A+

Bonsoir Forum , Bonsoir JOB
Pourquoi je vous sollicite ? parce que je suis ( si vous permettez Forum) Nul et sincèrement j’apprend et je suis entrain d’apprendre
En tous les cas MERCI JOB pour les solutions (je l’ai considère comme des cours )
Grazie
 

Membres actuellement en ligne

Statistiques des forums

Discussions
312 895
Messages
2 093 384
Membres
105 714
dernier inscrit
POKITO