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

Fermé
Littleshoe Messages postés 20 Date d'inscription lundi 2 mars 2015 Statut Membre Dernière intervention 4 août 2016 - 29 juin 2016 à 14:42
Littleshoe Messages postés 20 Date d'inscription lundi 2 mars 2015 Statut Membre Dernière intervention 4 août 2016 - 4 août 2016 à 10:56
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
A voir également:

5 réponses

Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 61
29 juin 2016 à 15:31
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.
0
Littleshoe Messages postés 20 Date d'inscription lundi 2 mars 2015 Statut Membre Dernière intervention 4 août 2016
29 juin 2016 à 15:43
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 !
0
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 524
29 juin 2016 à 15:44
Bonjour,

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

A+
0
ccm81 Messages postés 10905 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 27 décembre 2024 2 429
29 juin 2016 à 16:15
Bonjour à tous

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

Cdlmnt
0
ccm81 Messages postés 10905 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 27 décembre 2024 2 429
30 juin 2016 à 16:03
et avec une seule colonne de service
http://www.cjoint.com/c/FFEodc1qVku

Cdlmnt
0
Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 61
30 juin 2016 à 15:48
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.
0
Hello à tous,

Désolé, pour le retard,
Franchement merci les gars!
Ca me fait gagner un temps fou. !!
Bon match !
0
Littleshoe Messages postés 20 Date d'inscription lundi 2 mars 2015 Statut Membre Dernière intervention 4 août 2016
1 août 2016 à 15:11
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?.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 61
3 août 2016 à 15:42
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.
0
Littleshoe Messages postés 20 Date d'inscription lundi 2 mars 2015 Statut Membre Dernière intervention 4 août 2016
Modifié par Littleshoe le 3/08/2016 à 16:28
Bonjour Kuartz,

Merci pour ta réponse, mais j'ai toujours probleme avec le code? erreur de compilation et de syntaxe:

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

DL = Sheets("test").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 = Sheets("test").Cells(1, Application.Columns.Count).End(xlToLeft).Column 'Détermine la dernière colonne (en fonction de la ligne 1)
    
Range("F3").Validation.Delete 'Supprime la liste déroulante de la cellule J3
    
Range("G3:G2000").ClearContents 'Supprime les valeurs de G3 à G2000
    
With Range("F3").Validation 'Crée la liste déroulante en F3
.Add Type:=xlValidateList,
AlertStyle:=xlValidAlertStop,
 Formula1:="=" & Sheets("test").Range(Cells(1, 2), Cells(1, DC)).Address

End With


Voici le modifs, Aurais-tu une idée?
0
Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 61 > Littleshoe Messages postés 20 Date d'inscription lundi 2 mars 2015 Statut Membre Dernière intervention 4 août 2016
3 août 2016 à 16:45
Ah oui oui, j'en ai une, tu as oublié les "_" après .Add Type:=xlValidateList et AlertStyle:=xlValidAlertStop. Du coup la machine ne comprend pas qu'il s'agit en fait de la même ligne.
0
Littleshoe Messages postés 20 Date d'inscription lundi 2 mars 2015 Statut Membre Dernière intervention 4 août 2016
3 août 2016 à 16:52
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.
0
Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 61 > Littleshoe Messages postés 20 Date d'inscription lundi 2 mars 2015 Statut Membre Dernière intervention 4 août 2016
3 août 2016 à 16:56
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
0
Littleshoe Messages postés 20 Date d'inscription lundi 2 mars 2015 Statut Membre Dernière intervention 4 août 2016
3 août 2016 à 17:10
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?
0