XL 2010 RESOLU / Menu en cascade et recherche multi texte dans cellules avec correspondances dans un tableau

richard31

XLDnaute Occasionnel
Bonjour les experts !
Voilà mon souci :
J'ai un tableau source dans lequel si vous allez dans l'onglet "Données Générales" dans la colonne K "Périmètre technique" en k17 on peut à l'aide d'un VB aller sélectionner des entrées présentes dans un autre onglet nommé "Contacts-Et-Annuaire" colonne A (de A6 à A28) en cochant les sélections désirées. Ce vb fonctionne correctement alors que j'y pompe pas grand chose mais j'ai réussit à l'adapter, seul message d'erreur c'est quand on sélectionne aucune option ( j'arrive pas à gérer cette erreur).
Ce que je n'arrive pas à faire, c'est ensuite, donc dans la colonne K on a sélectionné les entrées avec le vb, ces valeurs s'écrivent dans la cellule correspondante, la tout fonctionne (sauf la si on sélectionne rien bref..). Colonne L nommée "Directions Impactées source" je désire suivant les sélections effectuée en colonne K aller chercher les correspondances dans l'onglet "Contacts-Et-Annuaire" colonne B nommée "direction". En gros un exemple :
Colonne K17 j'ai sélectionné "Base de données et AGL Dev Qualif et Base de données Pre-Expo et Production" le deux sont séparés par un | , Base de données et AGL Dev Qualif dans l'onglet "Contacts-Et-Annuaire" du tableau est présent dans la colonne A et en B (Direction) on retrouve " ABC " . Comment récupérer ABC et l'écrire dans l'onglet "Données Générales" en L17 ? Ainsi que pour "Base de données Pre-Expo et Production" auquel correspond JKI dans "Contacts-Et-Annuaire"? et le tout écrit dans une même cellule en L17 séparé par des / ? J'ai trouvé des formules qui fonctionnent mais le souci est que par exemple "Base de données" est répété dans le tableau "Contacts-Et-Annuaire" du coup ça va le lire plusieurs fois .

Bref j'ai enregistré le fichier . Le VB qui permet de créer un menu en cascade et lire des données d'une colonne est pas mal malgré le petit bug si on ne sélectionne rien ça peut servir à d'autres. Par contre le reste je n 'y arrive pas pour lire plusieurs entrées dans un cellule faire une recherche dans un tableau et noter les correspondances dans un autre cellule. C'est trop chaud pour moi !

merci d'avance milles fois pour les experts Excel ^^

Ps il y aussi un fonction VB "sans doublon" qui permet de lire et copier plusieurs données textes écrites dans une cellule sans les doublons. C'est cadeau aussi !4

Données anonymisée bien sur !
 

Pièces jointes

  • TEST.xlsm
    949.7 KB · Affichages: 3

richard31

XLDnaute Occasionnel
Mais, je ne vois pas les modifications fournies dans mon dernier envoi.
rappel du principe:
If Target.Column = 11 Then
'cas pour la colonne 11
elseIf Target.Column = 9 Then
'cas pour la colonne 9
end if
j'ai compris que la ligne target-Column indique la colonne impactée par le code. Ce que je ne comprends pas c'est ou apporter les modifications pour que ça fonctionne j'ai un message d'erreur Private Sub Worksheet_SelectionChange(ByVal Target As Range) en orange avec "membre de méthode ou de données introuvable " wrtf ?,
 

Rouge

XLDnaute Impliqué
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.EnableEvents = False
If Target.Column = 11 Then
With Me.ListBox1
.MultiSelect = fmMultiSelectMulti
.ListStyle = fmListStyleOption
.Height = 100
.Width = 250
.Top = ActiveCell.Top
.Left = ActiveCell.Offset(0, 1).Left
.Visible = True
End With
On Error Resume Next
i = 0
Me.ListBox1.List = Worksheets("Contacts-Et-Annuaire").Range(Worksheets("Contacts-Et-Annuaire").Range("A5:A28").Offset(1, i), _
Worksheets("Contacts-Et-Annuaire").Range("A5:A28").Offset(0, i).End(xlDown)).Value
On Error GoTo 0
a = VBA.Split(ActiveCell, Chr(10))
Me.ListBox2.Visible = False 'ici on masque la nouvelle listbox2
ElseIf Target.Column = 9 Then
'insérez ici ce que doit faire l'appli quand on sélectionne la colonne 9

Me.ListBox1.Visible = False 'ici on masque la listbox1
End If
Application.EnableEvents = True
End Sub

Au niveau de la ligne verte, mettez votre code
 

richard31

XLDnaute Occasionnel
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.EnableEvents = False
If Target.Column = 11 Then
With Me.ListBox1
.MultiSelect = fmMultiSelectMulti
.ListStyle = fmListStyleOption
.Height = 100
.Width = 250
.Top = ActiveCell.Top
.Left = ActiveCell.Offset(0, 1).Left
.Visible = True
End With
On Error Resume Next
i = 0
Me.ListBox1.List = Worksheets("Contacts-Et-Annuaire").Range(Worksheets("Contacts-Et-Annuaire").Range("A5:A28").Offset(1, i), _
Worksheets("Contacts-Et-Annuaire").Range("A5:A28").Offset(0, i).End(xlDown)).Value
On Error GoTo 0
a = VBA.Split(ActiveCell, Chr(10))
Me.ListBox2.Visible = False 'ici on masque la nouvelle listbox2
ElseIf Target.Column = 9 Then
'insérez ici ce que doit faire l'appli quand on sélectionne la colonne 9

Me.ListBox1.Visible = False 'ici on masque la listbox1
End If
Application.EnableEvents = True
End Sub

Au niveau de la ligne verte, mettez votre code
ok ça fonctionne ^^
Merci encore !!!!
 

Membres actuellement en ligne

Statistiques des forums

Discussions
287 536
Messages
1 884 452
Membres
163 314
dernier inscrit
cedric.remacle
Haut Bas