Menu déroulant avec condition

Bonjour,

J'ai une colonne A qui repertorie des n° de clients.

Colone B = le nom des clients par un choix menu déroulant (faisant référence à une liste en colonne F et G).

Je souhaiterai la chose suivante:

Si je selectionne un client en B, je souhaiterai que cela répercute automatiquement son n° associé en colonne A.

Cf fichier-joint pour une meilleure compréhension.

Merci à vous !

Bonjour

En A2 :

=SI(B2="";"";INDEX($G$3:$G$6;EQUIV(B2;$F$3:$F$6;0)))

Formule à tirer vers le bas.

Amicalement

Nad

bonsoir

voila :le n° associé en colonne A

270poba23.xls (13.50 Ko)

cordialement

Bonjour,

Merci beaucoup, cela fonctionne parfaitement.

Puis-je pousser le vice, en vous sollicitant encore une fois ?

cf tableau-joint version 2.

Est-il possible, sur le même principe, de permettre une selection d'après le menu déroulant (noms), et d'afficher le "résultat" (n° client) dans cette même cellule ?

Cordialement Poba23.

96poba23-v2.xls (16.50 Ko)

Bonjour

Une proposition :

194poba23-v2.zip (10.56 Ko)

Amicalement

Nad

Merci Nad pour ta proposition.

C'est un option que je retiens, même si elle alourdie considérablement le listing déroulant.

J'attends éventuellement une autre proposition qui me permettrait d'obtenir un N° par une selection simple du nom depuis le menu déroulant.

Milles merci à toi !

Re

Avec une macro (click droit sur le nom de la feuille ==> visualiser le code) :

Amicalement

Nad

Merci encore Nad !

C'est parfait .... va falloir que je me lance dans les macros... et surtout l'adapter à mon fichier !!!

Merci.

@+

Re-bonjour à tous !

Me voilà encore une fois coincé avec une astuce qui m'échappe, faute de maîtrise des macros.

Question:

(cf xls joint pour explications)

En gros, j'ai une "listeclients" et "n°clients" associés et un "listing" qui me permet, d'après une liste de noms, de valider un N° de client qui lui est associé... jusqu'ici, tout va bien.

J'ai bien observé que j'ai une macro sur Feuil1 et une autre sur le module1.

Mon soucis:

1- Je souhaiterai garder sur ma Feuil1, la "listeclients" et "N°clients" (comme référence)

2- Sur ma Feuil2, je souhaiterai avoir uniquement le listing de selection.(permettant le choix)

2ème question: "code"

Est-il possible d'intégrer la macro "Feuil" dans "module" ? Pourquoi = éviter de faire des "copier/coller" de macro sur chacunes des nouvelles feuilles que je vais créer.

Merci les zamis !

Bonjour,

une seule macro peut être utilisée via le thisworkbook :

Par contre il faut définir les plage sensible en fonction du nom de la feuille, voir variable Plage

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim Mem As String
Dim Plage As String

If Sh.Name = "Feuil1" Then Plage = "B14:B18"
If Sh.Name = "Feuil2" Then Plage = "A3:A7"
  If Not Application.Intersect(Target, Range(Plage)) Is Nothing Then
    Application.EnableEvents = False
    On Error Resume Next

    Mem = Worksheets("Feuil1").Range("ListeClients").Find(Target).Offset(0, 1).Value
    If Target = Mem Then Mem = Worksheets("Feuil1").Range("ListeClients").Find(Target).Offset(0, 0).Value
    Target = Mem
    Application.EnableEvents = True
  End If
End Sub

Merci Misterno !

Petite autre question, si j'ai 30 feuilles par exemple (même structure), peux-tu m'indiquer quelle syntaxe utiliser ? (Feuille 1 à 30, même plage)

If Sh.Name = "Feuil2" Then Plage = "A3:A7"

Bonsoir,

Comme ça , ce devrait être Ok.

If left(Sh.Name,5) = "Feuil" and clng(mid(sh.name,6))>=1 and clng(mid(sh.name,6))<=30 Then Plage = "A3:A7"

Merci Misterno,

Je vais essayer de suite !

@+

-- 18 Juil 2011, 17:04 --

Re-Misterno !

J'ai un petit soucis de syntaxe, car dans ma problèmatique, j'ai environ 30 feuilles nommées par des chiffres:

Feuil1 (pour liste clients)

Feuille 2 nommée (1), feuille 3 nommée (2) etc.....correspondant au jour du mois.

Donc dans le code il faudrait remplaçer "Feuil" par un chiffre ??? c'est possible ?

If left(Sh.Name,5) = "Feuil" and clng(mid(sh.name,6))>=1 and clng(mid(sh.name,6))<=30 Then Plage = "A3:A7"

Merci encore !

Bonjour à tous !

Je joins le fichier Excel modifié comportant des erreurs de syntaxe de je n'arrive pas à solutionner !

Les indications apparaissent dans le 3ème onglet (feuille nommée: 1)

Merci à vous !

-- 19 Juil 2011, 14:52 --

Re-

A force de chercher, même sans connaissance en programmation, j'ai quand même trouvé réponse à ma question:

If Sh.Name >= "1" Then Plage = "A3:A7"
If Sh.Name >= "1" Then Plage = "B3:B7"

En gros, pour toutes les feuilles numérotées de 1 à l'infini, le résultat sera appliqué sur la plage A3 à A7 et également de B3 à B7.

QUESTION :

J'essai d'appliquer la totalité du code sur un autre fichier Excel, sauf que je suis confronté à un soucis de "nomination".

Mem = Worksheets("Feuil1").Range("ListeClients").Find(Target).Offset(0, 1).Value
    If Target = Mem Then Mem = Worksheets("Feuil1").Range("ListeClients").Find(Target).Offset(0, 0).Value
    Target = Mem

J'ai des difficultés à comprendre la provenance de la source du Range("ListeClients").

Sur Feuil1 en F1, j'ai bien "Liste Clients" d'indiqué au format texte, mais je doute de la provenance de la variable (excusez le terme), car si je change le texte en F1, la macro fonctionne quand même !!! Vous me suivez ?????

Si je créé un nouveau fichier Excel et "copier/coller" de la macro, et bien là cela ne fonctionne plus ....

Je créé en B3:B7 une cellule déroulante via (Données/Validation/Liste et dans données: =ListeClients)

et là: "impossible de trouver une plage nommée que vous avez spécifié".

En résumé, je souhaite changer le (.Range("ListeClients") en .Range("AutreNom")...... , et indiquer une plage correctement nommée dans (Données/Validation .... données: =AutreNom) ?

Vous n'êtes pas perdu ???? Désolé pour l'utilisation de certains termes, mais je ne connais pas le langage !

Merci pour votre réponse !

34poba23-v4.zip (17.99 Ko)

Bonsoir

Une réponse

ListeClients est une zone nommée : Une désignation de une à plusieurs cellules contenant des données

La particularité de cette zone nommée est qu'elle va s'adapter toute seule (comme une grande) à la quantité des données

Pour voir comment elle est définie : Menu Insertion --->Noms--->Définir

Tu auras la liste des zones nommées (dans ce cas il n'y aura qu'une zone nommée)

Tu cliques sur le nom et dans la zone "Fait référence à:" tu vas voir =DECALER(Feuil1!$F$3;;;NBVAL(Feuil1!$F:$F)-1)

Je te conseille, si tu ne connais pas, de regarder dans l'aide la signification de DECALER

Donc dans ton nouveau classeur tu dois redéfinir une zone afin de l'adapter aux paramètres de recherche

Dans le nouveau classeur : Menu Insertion --->Noms--->Définir

Dans la zone "Noms dans le classeur :" tapes le nom que tu veux (exemple AutreNom )

Et dans la zone "Fait référence à:" la désignation de ta zone (Inspires toi du nom "ListeClients")

Pas évident à appréhender mais rien de mieux que des essais

Voilà j'espère avoir répondu à une de tes interrogations

Bonne soirée

Milles merci Banzai64, cela m'a beaucoup aidé !

Je pense que je vais me faire payer une formation "macro", car je découvre de nouvelles choses qui me font gagner un temps très précieux !

-- 22 Juil 2011, 14:44 --

Re à tous !

J'en ai bientôt fini avec ma macro .... juste un dernier conseil SVP !

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim Mem As String
Dim Plage As String

If Sh.Name >= "1" Then Plage = "A3:A7"
If Sh.Name >= "1" Then Plage = "B3:B7"
  If Not Application.Intersect(Target, Range(Plage)) Is Nothing Then
    Application.EnableEvents = False
    On Error Resume Next

    Mem = Worksheets("Feuil1").Range("ListeClients").Find(Target).Offset(0, 1).Value
    If Target = Mem Then Mem = Worksheets("Feuil1").Range("ListeClients").Find(Target).Offset(0, 0).Value
    Target = Mem
    Application.EnableEvents = True
  End If
End Sub

Je suis embêté concernant cette partie de code:

If Sh.Name >= "1" Then Plage = "A3:A7"
If Sh.Name >= "1" Then Plage = "B3:B7"

J'aimerai trouver la syntaxe qui permette de dire "si condition" alors telle "PLAGE" ET telle "autre"... en gros de réunir en une les 2 lignes de code.

Dans mon cas, cf fichier-joint, seule la plage B3:B7 répond à la contidion.

Je vous promet, j'ai cherché sans trouver réponse... j'ai tenté le "ElseIf", mais pas fonctionné !

19poba23-v4b.zip (14.12 Ko)

Bonjour à tous !

Je relance le post avec ma question syntaxique en la formulant différement:

If Sh.Name >= "1" Then Plage = "A3:A7"
If Sh.Name >= "1" Then Plage = "B3:B7"

Est-il possible de réunir ce code en 1 ligne avec la fonction "ET" ou "AND" ou autre ?

Précision: si j'ai des "Feuilles" nommées de 1 à l'infini, je souhaite afficher la PLAGE "A3:A7" (sur une colonne) ET "B3:B7" (sur une autre).

Grand merci pour votre aide.

Bonjour

Comme je ne comprends pas trop la question

poba23 a écrit :

je souhaite afficher la PLAGE "A3:A7" (sur une colonne) ET "B3:B7" (sur une autre).

Fournis le fichier avec la macro

A suivre

Salut Bonzai64 !

Ma question fait référence à mon "post" d'hier (ci-dessus), fichier "poba23 v4b.xls "

J'ai ma Feuil1 = référence liste clients + n° clients

Feuille "1", "2" etc..... où j'obtiens le résultat de la macro (click nom client depuis menu déroulant, donne son n° pour résultat).

Cela fonctionne bien sur une colonne. Je souhaiterai obtenir ce même résultat sur une 2ème colonne... ce qui n'est le cas actuellement.

ex feuille "1", résultat fonctionne sur colonne B, mais pas sur colonne A !

N'hésites pas à me recontacter si toujours pas clair !

Merci à toi !

15poba23-v4b.zip (14.26 Ko)

Bonjour

Si j'ai compris

Rechercher des sujets similaires à "menu deroulant condition"