Renvoyer valeur sur une ligne en fonction d'un critère

[Fermé]
Signaler
Messages postés
20
Date d'inscription
lundi 2 mars 2015
Statut
Membre
Dernière intervention
4 août 2016
-
Messages postés
20
Date d'inscription
lundi 2 mars 2015
Statut
Membre
Dernière intervention
4 août 2016
-
Bonjour tout le monde, j'ai un petit soucis qui me pose beaucoup de problème:
Voilà:

J'ai une matrice fournisseur / Machine:

Fournisseurs // Machine1 // Machine2
F1 X X
F2 X
F3 X

Chaque fournisseur peut produire une ou plusieurs machines.
Comment faire pour faire apparaitre dans une colonne le nom des différents fournisseurs qui produise 1 machine ?

Exemple : dans une liste déroulante: je choisis Machine1: les résultats qui s'affiche sont F1 et F2.

Merci d'avancE pour votre aide.
Robin

5 réponses

Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
51
Bonjour,

Je n'ai pas su faire autrement qu'avec du code.

Mais voici un fichier qui marche plutôt bien : https://www.cjoint.com/c/FFDnFOgkaxf

Cordialement.
Messages postés
20
Date d'inscription
lundi 2 mars 2015
Statut
Membre
Dernière intervention
4 août 2016

Bonjour Kuartz,
c'est parfait Merci beaucoup !!!
Etant donné que je vais modifier le code en fonction du fichier,
Pourrais tu, si tu as le temps insérér des commentaires dans le code?
Il y a des choses que je comprends pas trop.

Merci d'avance Kuartz !
Messages postés
3334
Date d'inscription
samedi 20 juillet 2013
Statut
Membre
Dernière intervention
9 décembre 2016
540
Bonjour,

Tu peux également utiliser un filtre avancé qui te permettra d'afficher le résultat dans une colonne dédiée.

A+
Messages postés
10161
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
23 octobre 2021
2 232
Bonjour à tous

Un exemple sans macro (avec deux colonnes de service)
http://www.cjoint.com/c/FFDopuqaSMu

Cdlmnt
Messages postés
10161
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
23 octobre 2021
2 232
et avec une seule colonne de service
http://www.cjoint.com/c/FFEodc1qVku

Cdlmnt
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
51
Bonjour à tous.

L'exemple de ccm81 est excellent également. L'idée de Gyrus est aussi très bonne. C'est vraiment à toi de voir ce que tu préfères.

En tout cas, voici le code commenté comme tu me l'as demandé, n'hésites surtout pas si tu as des questions :

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'Macro qui s'éxécute à chaque nouvelle sélection de cellule sur la feuille

Dim DL As Long, DC As Long 'Définition des variable (ne pas toucher)

DL = Cells(Application.Rows.Count, 1).End(xlUp).Row 'Détermine la dernière ligne (en fonction de la colonne A, mettre la colonne qui est remplie le plus bas)
DC = Cells(1, Application.Columns.Count).End(xlToLeft).Column 'Détermine la dernière colonne (en fonction de la ligne 1)

Range("J3").Validation.Delete 'Supprime la liste déroulante de la cellule J3

Range("K3:K2000").ClearContents 'Supprime les valeurs de K3 à K2000

With Range("J3").Validation 'Crée la liste déroulante en J3
.Add Type:=xlValidateList, _
AlertStyle:=xlValidAlertStop, _
Formula1:="=" & Range(Cells(1, 2), Cells(1, DC)).Address 'Les valeurs de la liste déroulante vont de la cellule B1 (Celle(ligne, colonne)) à la cellule Dernière colonne 1 (Cells(ligne, DC donc dernière colonne)
End With

y = 3 'Définit la variable y = 3

For j = 2 To DC 'Boucle pour j allant de la colonne 2 à la dernière colonne

If Cells(1, j).Value = Range("J3").Value Then 'Si la cellule de la colonne j ligne 1 = Cellule J3 alors

    For i = 2 To DL 'Boucle pour i allant de la ligne 2 à la dernière ligne
    
    If Cells(i, j) = "x" Then 'Si la cellule de ligne i et de la colonne j = "x" alors
    
        Range("K" & y).Value = Range("A" & i).Value 'La cellule de la colonne K et de la ligne y (définit comme étant égal à 3) = La cellule de la colonne A et de la ligne i (la machine quoi)
        
        y = y + 1 'Incrémente y de 1, ce qui veut dire qu'à la prochaine condition, y sera égal à 4 puis 5 puis 6...
        
    End If 'Fin de la condition
    
    Next i 'Prochaine ligne de la boucle i
    
End If 'Fin de la condition

Next j 'Prochaine ligne de la boucle j

End Sub 'Fin de macro


Cordialement.
Hello à tous,

Désolé, pour le retard,
Franchement merci les gars!
Ca me fait gagner un temps fou. !!
Bon match !
Messages postés
20
Date d'inscription
lundi 2 mars 2015
Statut
Membre
Dernière intervention
4 août 2016

Bonjour Kuartz,
Tout d'abord merci pour ton aide et tes commentaires sur le code VBA suivant:

C'est top, mais pour comprendre la définition de variable.
Pourrais -tu m'aider sur un autre point de ce code. Ici la bdd (tableau) et la liste déroulante, et les réponses du code sont sur la même feuille.
Est il possible d'établir les variables DL/DC pour la base de donnée sur autre une feuille de calcul?
Et de mettre la liste déroulante dans une autre tout en gardant le type de code : Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'Macro qui s'éxécute à chaque nouvelle sélection de cellule sur la feuille

Merci d'avance?.
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
51
Bonjour bonjour,

Pour avoir la dernière ligne sur une autre feuille, il suffit de la rajouter devant la ligne de code :

DL = Sheets("nomdelafeuille").Cells(Application.Rows.Count, 1).End(xlUp).Row


Pareil pour DC.

Après et ben tu n'as plus qu'à remettre le même code pour la liste. Sauf qu'il faut ajouter le nom de la feuille, again.

Formula1:="=" & Sheets("nomdelafeuille").Range(Cells(1, 2), Cells(1, DC)).Address


Cordialement.
Messages postés
20
Date d'inscription
lundi 2 mars 2015
Statut
Membre
Dernière intervention
4 août 2016

Merci Kuartz,

pour ta réponse rapide, mais le code de neut toujours pas fonctionner, j'essaye de le tripoter dans tous les sens mais toujours pas.

Ci-joint le fichier:

https://www.cjoint.com/c/FHdoZbIzYFG

Si tu as tu temps pourrais m'aider sur ce point?
merci d'avance.
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
51 >
Messages postés
20
Date d'inscription
lundi 2 mars 2015
Statut
Membre
Dernière intervention
4 août 2016

Ca fonctionne si tu fais bien un copier/coller de mon code initial et que tu change juste les valeurs dont tu as besoin.

https://www.cjoint.com/c/FHdo4jwJ24f
Messages postés
20
Date d'inscription
lundi 2 mars 2015
Statut
Membre
Dernière intervention
4 août 2016

Hello Kuartz,

Honnetement, je dois etre un peu bête j'ai fait tous ce que tu as dit de faire, mais ça ne focntionne toujours pas.

Pourrais-tu m'aider?
Messages postés
850
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 février 2019
51 >
Messages postés
20
Date d'inscription
lundi 2 mars 2015
Statut
Membre
Dernière intervention
4 août 2016

Le fichier que je t'ai joint ne correspond pas? Envoie ton fichier directement sinon.
Messages postés
20
Date d'inscription
lundi 2 mars 2015
Statut
Membre
Dernière intervention
4 août 2016

Bonjour Kuartz,

Voici le lien:
https://www.cjoint.com/c/FHei3ijIb1G

Merci d'avance.

PS: J'ai mis la bbd dans un onglet, et la cellule de recherche (création de liste déroulant dynamique) dans un autre onglet. mais ça ne marche pas toujours pas avec ton code.
C'est bizarre.