Afficher une valeur dans une cellule en fonction d'un test

Signaler
Messages postés
150
Date d'inscription
mardi 9 septembre 2008
Statut
Membre
Dernière intervention
18 janvier 2021
-
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
Bonjour, j'ai pas mal recherché sur le forum et sur google pour régler mon problème qui doit être tout bête mais je finis malheureusement par poser la question ici.
Voilà, j'ai 2 feuilles dans mon classeur. Sur l'une j'ai une liste qui contient une colonne avec Nom Prénom et l'autre colonne avec les adresses mails des personnes.
Dans l'autre feuille, la cellule B12 n'accepte que les valeurs de la liste par menu déroulant.
Et j'aimerais pouvoir afficher en A17 l'adresse mail de la personne sélectionnée en B12.
Voilà c'est tout con mais je plante. j'ai essayé recherchev mais ça ne fonctionne pas. Je ne suis pas sur que ce soit cette fonction que je dois utiliser.
Qqn peut il m'aider?

18 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Bonjour,
Voilà c'est tout con mais je plante. j'ai essayé recherchev mais ça ne fonctionne pas.

L'équivalent VBA de RECHERCHEV est Find (Range.Find, méthode) ===>> lire cette rubrique dans ton aide VBA
Ici, on montre (tu ne l'as pas fait !) ce que l'on a tenté.. Montre
Montre aussi ce que tu tenterais à l'aide de Find
Ce ne sera qu'après avoir réussi de cette manière (pas avant), que je te parlerai de "plus mieux".
Messages postés
150
Date d'inscription
mardi 9 septembre 2008
Statut
Membre
Dernière intervention
18 janvier 2021

Merci pour ton aide.
J'ai du mal m'exprimer et même peut être me tromper de forum.
Je souhaite faire avec une fonction et non pas avec une macro si cela est possible.
J'ai tenté ceci
=SI($B12="";"";RECHERCHEV($B12;Liste Tech;2;0))
ou encore
(RECHERCHEV($B12;Liste Tech;2;0)
à chaque fois j'obtiens #NA
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Tu es ici dans le forum VBA. Les formules excel ne sont pas du VBA.
Je ne travaille personnellement jamais avec les formules excel.
J'ai tout de même jeté un petit coup d'oeil à ce qu'est RECHERCHEV
Et fait un petit test ===>>>
=SI(ESTERREUR(RECHERCHEV("a";A1:A10;1;FAUX));"";RECHERCHEV("a";A1:A10;1;FAUX))

fonctionne parfaitement ( "" dans la cellule de la formule si pas de "a" en A1:A10 de la feuille active - "a" si "a" présent).
Question : comment expliques-tu que je m'en sorte alors que je ne fais que m'y intéresser un peu et dans le seul but de te répondre ?

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Bonjour,

Dans ta formule tu écris Liste Tech.
Je ne pense pas que tu puisses nommer une plage avec un espace.
Vérifie le nom de la plage au cas où...
Messages postés
150
Date d'inscription
mardi 9 septembre 2008
Statut
Membre
Dernière intervention
18 janvier 2021

J'ai donc fini par écrire ceci qui fonctionne parfaitement après avoir supprimé ma liste. Liste Tech est en fait le nom de la feuille.
Cette même formule ne fonctionne pas avec une liste j'ai donc fait une simple plage de données

=SI($B12="";"";RECHERCHEV($B12;'Liste Tech'!A2:B7;2;0))

Merci pour votre aide

Toujours aussi agréable ucfoutu!!!
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Toujours aussi agréable ucfoutu!!!

Le choix existe toujours entre celui du fond et celui de la forme.
Ma préférence va toujours au fond...
Alors : ===>>
Tu n'as dit nulle part, dans tous tes messages, comment était saisie la cellule B12
Ta formule n'est valable que si la saisie est faite par liste de validation. Et alors :
- si tel est le cas : je vois mal comment on y trouverait un "". Si, de plus, ton exemple est celui d'une formule à étirer et que tu avais mis une liste de validation dans toutes les cellules de la colonne B, ce serait une erreur de conception (gourmand et lourd !)
- si tel n'est pas le cas (donc saisie manuelle), dis-nous donc : que donnerait ta formule si l'utilisateur frappait dans B2 une valeur absente dans tes "références" ? un #/NA, non ?
Pour ton info, la formule (à adapter à ton cas) que je t'ai donnée plus haut ne génère pas ce problème, elle.
Bonne chance

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Bon ...
1) On évite ici de mélanger formules Excel et code VBA
Ils font mauvais ménage dans certains cas (en rappelant entre autres qu'une cellule modifiée par formule ne déclenche aucun évènement Change)
2) les listes de validation de Excel sont à la fois moins pratiques et moins élégantes qu'une listbox (activex)

Regarde ce que fait ceci sur un classeur nouveau (exemple) :
Sur une feuille nommée "listing"


3) Sur ta feuille de saisie :
- insère une listbox nommée listbox1 (insère-la n'importe où)
- ce code :
Private Sub ListBox1_Click()
With ListBox1
Range("A17").Value = Trim(.List(.ListIndex, 1))
Range("B12").Value = Trim(.List(.ListIndex, 0))
End With
End Sub

Private Sub Worksheet_Activate()
With ListBox1
.ColumnCount = 2
.ColumnWidths = "200;0"
.ListFillRange = "listing!" & Worksheets("listing").Range("A:B").SpecialCells(xlCellTypeConstants).Address
End With
End Sub


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With ListBox1
If Target.Address = Range("B12").Address Then
.Left = Target.Left
.Top = Target.Top
.Width = Worksheets("listing").Range("A1").Width
.Visible = True
Else
.Visible = False
End If
End With
End Sub



Lance ===>> va sur ta feuille de saisie ===>> va sur la cellule B12 ===>> choisis ===>> regarde ce qui s'est passé en A17.

EDIT : je viens d'ajouter des Trim. Devine (facile) en prévision de quoi.

EDIT2 : voyons maintenant ce que donnerait l'application de MA formule. Plaçons-la en A22 :
=SI(ESTERREUR(RECHERCHEV(B12;listing!A1:B4;2;FAUX));"";RECHERCHEV(B12;listing!A1:B4;2;FAUX))


et plaçons en A24 TA formule ==>>
=SI($B12="";"";RECHERCHEV($B12;listing!A2:B7;2;0))

Faisons maintenant un choix en B12 !
===>> les deux formules fonctionnent sans faille.
Et tu vas alors me dire que ta formule est donc bonne et qu'elle est moins complexe que la mienne.
Ah ! Pourquoi donc, alors, me suis-je cassé la tête à écrire une formule plus tarabiscotée ? ===>>
Petite expérience ===>> ajoute sur ta feuille un bouton de commande et ce code :
Private Sub CommandButton1_Click()
Range("B12").Value = "coucou"
End Sub

lance ==> clique sur le bouton et ... regarde !
Ma formule "encaisse le coup" parfaitement. La tienne non (un magnifique #/NA)
Tu as là l'illustration de toute la différence entre de l' "à peu près 'agréable'" et du "réfléchi 'toujours aussi agréable' ". Hmm ?

Ceci étant dit : je préfère (j'insiste) très nettement ma solution sans formule (VBA) pour mille et une raisons. Encore plus si tu as du code VBA par ailleurs dans ton classeur.
Voilà

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
Tu as raison, ce test sur la cellule B12 n'a pas lieu d'être.
écrire: =RECHERCHEV($B12;'Liste Tech'!A2:B7;2;0)
est amplement suffisant.
Parfois je ne comprend pas tout ce que dis et heureusement d'ailleurs. J'ai toujours adoré les gens comme toi qui te font des démonstrations de savoir pour te noyer et te faire comprendre que tu n'as rien à faire la.
J'ai dis au départ que je ne voulais pas de vba, j'ai reconnu mon erreur sur le lieu ou j'ai posé ma question, ça s'arrete là.
Ta solution est très bien mais pourquoi faire simple quand on peut faire compliqué!!!!
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Parfois je ne comprend pas tout ce que dis et heureusement d'ailleurs. J'ai toujours adoré les gens comme toi qui te font des démonstrations de savoir pour te noyer

Pas pour "faire une démonstration de savoir", mais tout simplement pour répondre correctement.
Quant à mon "savoir" : relis donc ce que j'ai écrit plus haut. Je n'utilise jamais les formules. Ce n'est pas mon "savoir", mais le simple résultat de lectures dans l'aide en ligne.
C'est bel et bien toi, non, qui est venu demander de l'aide, non ?
Te laisser alors faire n'importe quoi serait désolant pour l'image de ce forum !!!
Et le pire serait que tu marques comme "RESOLU" sur la base de ta formule !
Ta dernière mouture (de formule) n'est pas meilleure que les autres et peut gravement compromettre ton application.
Tu en veux la preuve ? ===>> un petit scénario vite fait bien fait ===>>
reprenons mon classeur exemple (une feuille listing avec les données de référence et TA formule dans la feuille de saisie.
1) tu vas en B12 ==>> tu sélectionnes un article : prenons Durand Xavier ===>> tout va bien
2) le lendemain, tu apprends que ce client se nomme DURANT et non DURAND ===>> tu vas donc corriger ce nom sur la feuille listing (normal).
3) retourne donc maintenant sur la feuille de saisie et constate les dégâts !
Alors ? Vraiment satisfait de toi ?
Désolé, mais pour l'efficacité de ce forum, je me dois de mettre ici, dans cette discussion qui pourra un jour être lue par d'autres, qu'aucune de TES formules n'est acceptable, qu'elles sont toutes assez dangereuses.
Tu comprends cela ?

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
C'est faux. Des changements dans la liste n'engendrent aucune erreur dans la formule. La cellule B12 est restreinte par liste de validation. Je ne vois rien de "dangereux"
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
cela veut dire que tu n'as pas quitté la cellule modifiée sur la feuille listing. Il est clair que si tu es resté dessus, sa valeur n'a pas encore été prise en compte !
Crois-tu vraiment que je n'ai pas testé ce scénario ???
Tu te trompes.
Mais je vais te laisser net là, car cela devient fatiguant alors que c'est pourtant simple.
Bonne chance ...
Je te garantis que c'est toi qui te trompes. Je n'aurais aucun intérêt à continuer cette discussion si ce n'était pas le cas.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Rhoooo ...
Je ne sais pas comment tu fais tes gestes, ni dans quel ordre.
On va aller à du plus clair encore (et éviter tes gestes).
Après avoir saisi un nom en B12 ===>> va donc dans la feuille listing et supprime carrément la ligne de ce nom (repère le nom sélectionné) Là, on est certain de ce que cette suppression est faite immédiatement.
Retourne sur la feuille de saisie ... alors ? plus la même chose
Mais c'est dingue ça! La on passe carrément à de la suppression. Alors évidemment si le nom est supprimé dans la liste l'adresse mail ne s'affiche pas et tant mieux!!!
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Bien ...
On en reparlera lorsque (cela risque fort d'arriver) tu reviendras dans cette discussion en disant que tu as généré un sérieux problème ...
Stop donc pour l'instant.
On dirait vraiment un gosse qui tiens absolument à avoir raison.
Tu serais pas un peu de mauvaise fois, non?
En tout cas si mon fichier contenant la formule venait à contaminer tout le réseau de mon entreprise ou meme pire encore, à cause d'un #N/A dans une cellule, je saurais vers qui me tourner.

En tout cas merci
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Je vois que tu n'as pas tout saisi. Il n'y a pas que le risque d'un #N/A (moindre mal, car rattrapable, lui), mais bien plus grave (plus la même personne/adresse) et là ... carrément irrattrapable ...
Je pourrais toujours, dans ce dernier cas, corriger tes formules pour l'avenir, mais ne pourrais plus t'aider à remettre les bonnes données sur ta feuille de saisie.
Signé : un gamin de mauvaise foi !
Ca va reste calme, je te charrie. Je comprends tout à fait ce que tu veux dire. Je privilégie aussi comme toi le vba, afin de pouvoir gérer les éventuelles erreurs.
Dans mon cas, la liste comporte 5 noms et 5 adresse mails et ne sera pas modifiée tous les 4 matins dons ce cas présent la simple formule ira très bien.
D'autant que la fiche principale ne contient qu'une seule cellule avec la formule et est remise à zéro à chaque fermeture du fichier après envoie automatique par mail.
Donc à vrai dire j'espère que tu en conviendras les risques sont, ici, assez limités
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Les risques ne seront "limités" voire carrément absents, lameche15, que si, finalement, tu n'as pas à conserver dans ton classeur les données saisies. Cela voudrait alors dire que tu ne te sers de ton truc qu'une fois, en substitut assez abusif d'un traitement de texte (ce n'est pas, à vrai dire, la vocation d'un tableur, ce qu'est Excel).
Mais tu n'en avais jusqu'à présent pas dit un seul mot.
Dans le cas contraire (donc conservation des données dans ton classeur), il en va très différemment et les risques seraient alors énormes, dans plusieurs cas de figure (je t'en ai cité 2. Il y en a beaucoup d'autres ...).
Finalement : tout donne à penser maintenant que tu es dans le cas (que je contesterais toujours) de l'utilisation de Excel à des fins d'impression unique. Aucun risque alors, dans un tel cas. Simplement assez abusif ( ne jamais utiliser une pelle Pauclain pour simplement planter un plan de persil).
Voilà ...
Je pense que tout a maintenant été dit et que cette discussion peut maintenant être close.