Afficher une selection depuis un tableau

11book.xlsx (17.50 Ko)

Bonjour à tous,

Je sollicite votre aide sur Excel. Il me semble que ma requête n'est pas si complexe mais j'ai du mal à trouver une solution :

Je souhaiterais à partit d'un tableau ou l'on sélectionne des éléments que l'on rempli avec des "x", afficher la sélection dans un autre onglet.

Exemple dans le tableau joint, j'aimerais obtenir dans l'onglet "selection" les fruits selectionnés par les personnes et qu'ils soient listés à coté de leurs noms,

selon les croix réparties dans le 1er onglet "choix"

J'espère avoir été assez clair. Merci pour votre aide.

Bonsoir Milse, bonsoir le forum,

Est-ce qu'une proposition VBA (par macro) peut convenir ?

Si oui, peut ton supprimer la colonne vide B de l'onglet choix qui ne sert à rien sinon à alourdir le code ?

Bonsoir ThauTheme, merci pour ta réponse.

Je ne suis pas contre une proposition de macro. Cependant je devrais faire évoluer le fichier par la suite.
Juste par curosité, tu me propose une solution via VBA car avec des formules cela te semble trop lourd?

et oui pour la colonne B on peut supprimer.

Re,

Heu non... C'est parce que je suis trop nul en formules (regarde ma signature)...
Je m'y mets...

[Édition]
J'ai aussi supprimé la première ligne de l'onglet Choix.
Ton fichier modifié avec le code ci-dessous :

Sub Macro1()
Dim OC As Worksheet 'déclare la variable OC (Onglet Choix)
Dim OS As Worksheet 'déclare la variable OS (Onglet Selection)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim K As Integer 'déclare la variable K (incrément)

Set OC = Worksheets("choix") 'définit l'onglet OC
Set OS = Worksheets("Selection") 'définit l'onglet OS
OS.Range("C2").CurrentRegion.Offset(1, 0).ClearContents 'efface les anciennes valeurs de l'onglet OS
TV = OC.Range("A2").CurrentRegion 'définit la tableau des valeurs TV
For I = 3 To UBound(TV, 1) 'boucle 1 : sur toutes les lignes I du tableau des valeurs TV  (en partant de la troisième)
    If TV(I, 1) <> "" Then 'condition 1 : si la donnée ligne I colonne 1 de TV n'est pas vide
        For J = 2 To UBound(TV, 2) 'boucle 2 : sur toutes les colonne J du tableau des valeurs TV (en partant de la seconde)
            If TV(I, J) <> "" Then 'condition 2 : si la donnée ligne I colonne J du tableau des valeurs n'est pas vide
                K = K + 1 'incrémente K
                ReDim Preserve TL(1 To 2, 1 To K) 'redimensionne le tableau des lignes (2 lignes, K colonnes)
                TL(1, K) = TV(I, 1) 'récupère le nom (ligne I colonne 1 de TV) dans la ligne 1 colonne K de TL (=> transposition)
                TL(2, K) = TV(2, J) 'récupère le fruit (ligne 2 colonne J de TV) dans la ligne 2 colonne K de TL (=> transposition)
            End If 'fin de la condition 2
        Next J 'prochaine colonne de la boucle 2
    End If 'fin de la condition 1
Next I 'prochaine ligne de la boucle 1
'si K est supérieure à zéro, renvoie le tableau TL transposé dans la cellule C3 redimensionnée de l'onglet OS
If K > 0 Then OS.Range("C3").Resize(K, 2).Value = Application.Transpose(TL)
End Sub
10milse-ep-v01.xlsm (25.68 Ko)

Merci beaucoup, je vais tester!

Bonsoir TauTheme, et bonsoir à tous,

Merci beaucoup j'ai testé c'est ce que je voulais, :)

J'ai essayé de modifier un peu le code mais je ne suis vraiment pas douée.... Comment rajouter une colonne sur la gauche du nom?

Aussi, est-ce possible qu'au lieu d'afficher le fruit dans la selection, d'afficher la variété du fruit qui se trouve dans un autre onglet (onglet catalogue que j'ai rajouté)

Merci encore pour votre aide!

19milse-ep-v01.xlsm (24.15 Ko)

Re,

Pourrais-tu me fournir le bon fichier avec la colonne en plus car la je ne vois pas bien. Idem pour l'onglet catalogue, s'il suffit de remplacer Tomate par Variété de tomate disponible je ne vois pas l'intérêt d'un nouvel ongelet...

Hello,

voici le fichier avec la colonne en plus,

en fait je souhaiterai que la personne qui remplisse le tableau choisisse une catégorie, et de mon coté lui proposer ce qu'il y a de disponible et qui pourrait changer.

Variété de tomate disponible est amené à varier de temps en temps, et je ne voudrais pas que ce soit l'en tête du tableau qui doit rester fixe.

16milse-ep-v01-2.xlsm (25.11 Ko)

Re,

Ok, c'était bien plus clair pour moi.

Le code modifié :

Sub Macro1()
Dim OC As Worksheet 'déclare la variable OC (Onglet Choix)
Dim OS As Worksheet 'déclare la variable OS (Onglet Selection)
Dim CA As Worksheet 'déclare la variable CA (onglet CAtalogue)

Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim K As Integer 'déclare la variable K (incrément)

Set OC = Worksheets("choix") 'définit l'onglet OC
Set OS = Worksheets("Selection") 'définit l'onglet OS
Set CA = Worksheets("catalogue") 'définit l'onglet CA
OS.Range("C2").CurrentRegion.Offset(1, 0).ClearContents 'efface les anciennes valeurs de l'onglet OS
TV = OC.Range("A2").CurrentRegion 'définit la tableau des valeurs TV
For I = 3 To UBound(TV, 1) 'boucle 1 : sur toutes les lignes I du tableau des valeurs TV  (en partant de la troisième)
    If TV(I, 1) <> "" Then 'condition 1 : si la donnée ligne I colonne 1 de TV n'est pas vide
        For J = 3 To UBound(TV, 2) 'boucle 2 : sur toutes ls colonne J du tableau des valeurs TV (en partant de la seconde)
            If TV(I, J) <> "" Then 'condition 2 : si la donnée ligne I colonne J du tableau des valeurs n'est pas vide
                K = K + 1 'incrémente K
                ReDim Preserve TL(1 To 3, 1 To K) 'redimensionne le tableau des lignes (2 lignes, K colonnes)
                TL(1, K) = TV(I, 2) 'récupère le Numéro (ligne I colonne 2 de TV) dans la ligne 1 colonne K de TL (=> transposition)
                TL(2, K) = TV(I, 1) 'récupère le nom (ligne I colonne 1 de TV) dans la ligne 2 colonne K de TL (=> transposition)
                TL(3, K) = CA.Rows(2).Find(TV(2, J), , xlValues, xlWhole).Offset(1, 0) 'récupère le fruit (recherche dans le catalogue)
            End If 'fin de la condition 2
        Next J 'prochaine colonne de la boucle 2
    End If 'fin de la condition 1
Next I 'prochaine ligne de la boucle 1
'si K est supérieure à zéro, renvoie le tableau TL transposé dans la cellule B3 redimensionnée de l'onglet OS
If K > 0 Then OS.Range("B3").Resize(K, 3).Value = Application.Transpose(TL)
End Sub

Merci TauTheme ! Franchement top c'est super :)

Hello TauThème, Hello le forum,

Je sollicite à nouveau votre aide sur une petite évolution que j'essaye d'intégrer dans le code mais sans succès...

je voudrais rajouter une condition :

Selon le texte qui se trouve dans une liste déroulante,
la selection se fait par rapport à la ligne ou l'on trouve ce même texte en titre,
et non plus uniquement par rapport à la colonne de la catégorie.

J'ai voulu traduire ceci :

Si la cellule C19 (qui est une liste déroulante) de mon onglet CHOIX contient le texte "PROJET 1"
alors la selection se fait depuis la ligne ou se trouve en titre le texte "PROJET 1" de mon onglet CATALOGE.

J'espère être assez claire.

6book1.xlsx (19.38 Ko)

Merci beaucoup pour votre attention.

Rechercher des sujets similaires à "afficher selection tableau"