Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel
Excel Forum d'entraide sur Excel. Vos questions sur les fonctions, formules, manipulations, et tout sujet qui ne trouve pas sa place dans un sous-forum.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/11/2010, 00h32   #1
Invité régulier
 
Inscription : novembre 2009
Messages : 14
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 14
Points : 5
Points : 5
Par défaut Recherche sous 3 conditions

Bonjour !

Comme vous pourrez le voir dans mon exemple (en revanche j'ai enlevé les formules que j'avais pu mettre car elles bug, c'est la mon problème), je souhaite faire une recherche sous plusieurs conditions.

J'ai un premier tableau qui récapitule une première journée de championnat dans laquelle on peut voir 13 équipes et le score des différentes rencontres correspondantes.

J'ai un deuxième tableau (juste à droite, mais qui apparaît normalement dans une autre feuille) qui est un détail d'une équipe (ce qui veut donc dire que j'ai une feuille par équipe, bref !), ici celle de l'équipe 1.

En gros ce que je voudrais faire :
- pour la colonne "Adversaire" : une recherche dans la colonne B de la valeur "équipe1" et renvoyer la valeur de l'équipe qui se trouve dans la colonne a coté.
Pour ça, facile :
Code :
=RECHERCHE("Equipe1";B3:B8;C3:C8)
En revanche là où ça se complique pour moi c'est de faire une formule qui dit qu'en cas d'echec ou invalidité de la première formule, la formule suivante soit faite dans l'autre sens, c'est à dire :
Code :
1
2
 
=RECHERCHE("Equipe1";C3:C8;B3:B8)
J'ai essuyé tous les sites que j'ai pu, en vain...
J'ai entre temps tenté ceci qui fonctionnait uniquement dans un sens, dans l'autre j'avais ce retour dans la cellule : #N/A :

Code :
=SI(ESTERREUR(RECHERCHE("Equipe1;B3:B8;C3:C8));RECHERCHE("Equipe1";C3:C8;B3:B8);RECHERCHE("Equipe1";B3:B8;C3:C8))
Pourriez vous m'aider ? Car honnêtement, je sèche...

Merci beaucoup !
Fichiers attachés
Type de fichier : xls classement.xls (29,0 Ko, 3 affichages)
klash384 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 14h18   #2
Membre Expert
 
Avatar de rvtoulon
 
Homme Hervé
Agent Technique
Inscription : mars 2009
Messages : 806
Détails du profil
Informations personnelles :
Nom : Homme Hervé
Âge : 36
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Agent Technique
Secteur : Santé

Informations forums :
Inscription : mars 2009
Messages : 806
Points : 1 393
Points : 1 393
Salut,
Si le vba ne te fais pas peur voici une solution.
En fait tu créer ta propre fonction: ici on va l'appeler : Rech_adv
- dans l'éditeur vba (ALT+F11) tu ajoutes un module:
-MENU => INSERTION => Module
-Dans ce module tu colles ce code :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Function Rech_adv(vrech As String, plage1 As Range, plage2 As Range) As String
 
Application.Volatile
 
Rech_adv = ""
 
'Je recherche dans chaque cellule de la plage 1  
For Each c In plage1
'Si je trouve la valeur recherchée alors la recherche = la cellule de droite
If c.Value = vrech Then Rech_adv = c.Offset(0, 1).Value
Next c
 
'Si je ne trouve pas l'équipe dans ma plage 1 alors
If Rech_adv = "" Then
 'je recherche dans chaque cellule de ma plage 2
  For Each c In plage2
    'si je trouve l'équipe alors ma recherche = cellule de gauche
    If c.Value = vrech Then Rech_adv = c.Offset(0, -1).Value
  Next c
End If
 
'si l'équipe n'est dans aucune des plages alors j'affiche un message et ma recherche = vide
If Rech_adv = "" Then MsgBox "Equipe manquante!"
 
End Function
-Ensuite dans la cellule, colonne "Adversaire"
Code :
=Rech_adv("Equipe1";B3:B8;C3:C8)
et voila.
__________________
@+

Si vous avez trouvé la solution à votre problème n'oubliez pas d'appuyer sur
Et n'oubliez pas de voter en appuyant sur si ce message a repondu à vos attentes.
Ou sur si ce n'est pas le cas
rvtoulon est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/11/2010, 00h14   #3
Invité régulier
 
Inscription : novembre 2009
Messages : 14
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 14
Points : 5
Points : 5
Je ne voulais pas passer par du vba, mais en fait c'est clairement plus simple et ça va me faire gagner énormément de temps !!

Merci beaucoup ton code fonctionne super bien !

Encore un GRAND MERCI à toi !! \o/

Bonne journée !!
klash384 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2010, 01h05   #4
Invité régulier
 
Inscription : novembre 2009
Messages : 14
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 14
Points : 5
Points : 5
Me revoila à la charge ! ^^

Heu...je viens d'adapter ton code pour la recherche des buts inscrits et pris, et ça fonctionne tip top !
Cependant quand je demande à faire une somme des buts pris par un simple SOMME()
Excel me renvoie comme valeur 0.
En revanche quand je fait un NB.SI("equipe2";plage_selectionnée) il me renvoie bien le nombre de fois qu'il trouve "equipe2" dans le tableau...

Bien entendu je n'ai aucune utilité d'un NB.SI, c'était juste pour voir si Excel comprenait bien les valeurs dans les cellules. Mais il n'a pas l'air de comprendre les valeurs dans les cellules quand il s'agit de nombres...

Et du coup j'ai tenté ça :

Code :
Sheets("Equipe1").Range("D29").Value = WorksheetFunction.Sum(Sheets("Equipe1").Range("D3:D28").Value)
Mais il me redonne encore 0 comme valeur...

Encore un petit coup de main de ta part ?

Merci beaucoup !

PS : autant joindre un fichier plus complet et plus détaillé qu'un simple bout d'exemple, je pense que ce sera plus "parlant"
Fichiers attachés
Type de fichier : xls Stats Championnat.xls (107,5 Ko, 3 affichages)
klash384 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2010, 17h37   #5
Membre Expert
 
Avatar de rvtoulon
 
Homme Hervé
Agent Technique
Inscription : mars 2009
Messages : 806
Détails du profil
Informations personnelles :
Nom : Homme Hervé
Âge : 36
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Agent Technique
Secteur : Santé

Informations forums :
Inscription : mars 2009
Messages : 806
Points : 1 393
Points : 1 393
Bonjour,
je ne sais pas trop pourquoi ça ne marchait pas mais en créant encore une fonction que tu appelles : Somme_buts çà marche:
Code :
1
2
3
4
5
6
7
8
9
10
11
Function Somme_buts(plage_buts As Range) As Integer
Dim vresultat As Long, x As Long
Application.Volatile
For Each c In plage_buts
If c.Value <> "" Then
x = c.Value
vresultat = vresultat + x
End If
Next c
Somme_buts = vresultat
End Function
dans ta cellule D29 de la feuille "Contrexeville":et tu tires la formule en E29.
__________________
@+

Si vous avez trouvé la solution à votre problème n'oubliez pas d'appuyer sur
Et n'oubliez pas de voter en appuyant sur si ce message a repondu à vos attentes.
Ou sur si ce n'est pas le cas
rvtoulon est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/11/2010, 18h24   #6
Invité régulier
 
Inscription : novembre 2009
Messages : 14
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 14
Points : 5
Points : 5
Un grand merci tu m'es d'une aide précieuse !

Le code est pourtant simple dans l'écriture, mais ne connaissant pas toutes les possibilités, je me retrouve facilement bloqué...

Merci encore !
klash384 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h18.


 
 
 
 
Partenaires

Hébergement Web