Toutes versions recopier une celulle si plusieurs cellulles corespondent dans une collone

nicoph3

XLDnaute Nouveau
bonjour, excusez moi déja pour le titre et pour la tentative d'explicationci dessous
je cherche à recopier le mot d'une colonne correspondant à une ligne si les données sont identique

par exemple :
A1=lundi B1=08:00 C1=math
A2=mardi B2=09:00 C2=anglais
A3=mercredi B3=10:00 C3=sport
...
A8=lundi B8=09:00 C8=gestion

je souhaiterais que si j’écris dans une cellule disons E1 lundi et que dans E2 j'ecris 09:00
ça écrit automatiquement gestion dans E3 et que si dans E1 j'ecris mardi et dans E2 j'ecris 09:00
ça écrit automatiquement anglais dans E3.

j’espère que vous arriverez a me comprendre malgres mes pietres explications

merci
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Bonsoir @nicoph3,

Voir le fichier joint.
Formule matricielle en G1:
VB:
=SIERREUR(INDEX(C1:C5;GRANDE.VALEUR(SI(SI(A1:A5=E1;B1:B5;"")=TEMPS(HEURE(F1);0;0);LIGNE(B1:B5);"");1));"")
nota: vous auriez pu joindre un fichier exemple :cool:.
 

Fichiers joints

nicoph3

XLDnaute Nouveau
bonjour , merci pour votre aide, ok je penserai à joindre un fichier en exemple la prochaine fois
veuillez me pardonner je suis nouveau sur le forum

j'ai peut etre mal choisi mon exemple je n'ai pas besoin d'un planning
j'aurais tres bien pu prendre des fruits et légumes ou tout autre chose

mais votre travail n'est pas pour autant perdu je me sers de + en + d'excel
et j'ai déja à l'idée de l'utiliser et en + ca m'apprend des choses

donc je vais changer mon exemple en piece jointe

dsl si je t'ai fait perdre du temps et merci encore
 

Fichiers joints

nicoph3

XLDnaute Nouveau
bravo @mapomme en cherchant de mon coté j'avais réussi a faire de cette facon :

=SI(SOMMEPROD(($A$2:$A$11=F3)*($B$2:$B$11=G3)*($C$2:$C$11))=0;"";(SOMMEPROD(($A$2:$A$11=F3)*($B$2:$B$11=G3)*($C$2:$C$11))))

au début je comprenais pas pourquoi le chiffre trouveé n'etait pas bon et puis j'ai compris qu'il ajouter le doublon que tu avais mis en exemple.

est ce que ton code est adaptable si on rajoute des colonnes ?
et peut on le faire fonctionner si on a non pas 2 criteres comme dans l'exemple en mettant marque et model
mais si on a que le model par exemple , ou ca complique trop les choses et il vaut mieux laisser 3 criteres quitte a laisser une collone vide.

je t'ai mis une exemple en feuille 2

merci beaucoup, je vais essayer de mon coté , et je veux bien un avis de ta part sur ma formule
et meme si je me doute que la tienne et plus adapté que la mienne peux tu m'expliquer un peu stp ?

Edit : quand je tente sur une nouveille feuille en copiant ta feuille vers une nouvelle ca me met :"la valeur que vous avez tapée n'est pas valide. Un utilisateur a restreint les valeurs que peut prende cette cellulle .

dans le tableau B quand je veux ecrire une marque et un model

*********************

mais dans une autre feuille en copiant uniquement les valeurs et en rentrant
cette formule basée sur la tienne j'arrive a chercher les résultats dans la collone des motos
=SIERREUR(INDEX(C$2:C$11;EXP(LN(MAX((A$2:A$11=F11)*(B$2:B$11=G11)*LIGNE(A$2:A$11)))));(INDEX($L$2:$L$6;EXP(LN(MAX(($J$2:$J$6=F11)*($K$2:$K$6=G11)*LIGNE($J$2:$J$6)))))))

par contre ca me met #nombre quand le resultat n'est pas bon , ce qui ne me dérange pas
mais je suppose que c'est pas tres "propre" et je sais pas comment rajouté d'autres collonne
et dans mon projet je vais en avoir plusieurs, peut etre existe il une autre facon de procédé

I dont now , en tous cas j'ai remarqué que ta formule à déja l'avantage d'avoir moins de caractères ^^
 

Fichiers joints

Dernière édition:

nicoph3

XLDnaute Nouveau
ok merci,

  • comment faire pour rechercher dans plusieurs tableaux ?
est il de possible de
  • non pas mettre la première ni la dernière valeur trouvé mais de me signalé en résultat si il y a doublon
  • me signalé si les données écrites en G2 H2 I2 ne correspondent pas a un des tableaux au lieu de laisser vide
pour ma derniere question suffit de mettre un mot choisi entre les guillement a la fin ?

=SIERREUR(INDEX(D:D;PETITE.VALEUR(SI((A2:A17=G2)*(B2:B17=H2)*(C2:C17=I2)=0;"";LIGNE(A2:A17));1));"non trouvé")
 
Dernière édition:

nicoph3

XLDnaute Nouveau
par contre dans des lignes vides ca me met non trouvé également
alors que je souhaite le mettre uniquement si les valeurs écrites ne corespondent pas
et laissser vide si les cases sont vide mais bon c'est pas le + important ca reste un détail
 

mapomme

XLDnaute Barbatruc
Re @nicoph3,

Voir formule en H5 dans le fichier joint:
VB:
=SI(NB.SI(G2:I2;"")>0;"";SI((NB.SI.ENS(A2:A4;G2;B2:B4;H2;C2:C4;I2)+NB.SI.ENS(K2:K4;G2;L2:L4;H2;M2:M4;I2))=0;"non trouvé"; SI((NB.SI.ENS(A2:A4;G2;B2:B4;H2;C2:C4;I2)+NB.SI.ENS(K2:K4;G2;L2:L4;H2;M2:M4;I2))>1;"doublons";SI(NB.SI.ENS(A2:A4;G2;B2:B4;H2;C2:C4;I2)=1;INDEX(D:D;SOMMEPROD((A2:A4=G2)*(B2:B4=H2)*(C2:C4=I2)*LIGNE(A2:A4)));INDEX(N:N;SOMMEPROD((K2:K4=G2)*(L2:L4=H2)*(M2:M4=I2)*LIGNE(A2:A4)))))))
edit : bonjour @zebanx ;)
 

Fichiers joints

nicoph3

XLDnaute Nouveau
ok excuse moi j'aurais du etre plus clair des le début mais je ne savais pas tres bien formulé comme tu as pu t'en rendre compte

pour finir comment faire si je rajoute item9 10 11 et 12 en colonne P Q R S ?

j'ai essayer :
Code:
=SI(NB.SI(G2:I2;"")=3;"";
SI((NB.SI.ENS(A2:A4;G2;B2:B4;H2;C2:C4;I2)+NB.SI.ENS(K2:K4;G2;L2:L4;H2;M2:M4;I2))=0;"non trouvé";
SI((NB.SI.ENS(A2:A4;G2;B2:B4;H2;C2:C4;I2)+NB.SI.ENS(K2:K4;G2;L2:L4;H2;M2:M4;I2))>1;"doublons";
SI(NB.SI.ENS(A2:A4;G2;B2:B4;H2;C2:C4;I2)=1;
INDEX(D:D;SOMMEPROD((A2:A4=G2)*(B2:B4=H2)*(C2:C4=I2)*LIGNE(A2:A4)));
INDEX(S:S;SOMMEPROD((P2:P4=G2)*(Q2:Q4=H2)*(R2:R4=I2)*LIGNE(A2:A4)));
INDEX(N:N;SOMMEPROD((K2:K4=G2)*(L2:L4=H2)*(M2:M4=I2)*LIGNE(A2:A4)))))))
mais ca me met "vous avez taper un nombre trop important pour cette fonction :(

edit j'ai rajouté
Code:
NB.SI.ENS(K2:K4;G2;L2:L4;H2;M2:M4;I2)
que j'avais oublier mais ca marche pas non plus
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Re,

  1. il faudrait un fichier exemple
  2. je pense qu'il vaut mieux passer ensuite par une fonction personnalisée en VBA (les formules risquant d'être ingérables)
A ce soir au plus tôt...
 

nicoph3

XLDnaute Nouveau
re ,

du coup j'ai mis 20 item en 5 tableau (ce qui se rapproche beaucoup + de la réalité du projet)
et j'ai mis les cases à écrire en feuille 2

à part si ce n'est pas possible , je pense qu'on est sur la dernière ligne droite

je tiens a renouvellement mes excuses , je sais ce que je veux mais je n'ai pas su bien l'exprimer des le départ et j'ai abusé de ton temps
et je tiens surtout a renouveler mes remerciement pour ton temps et la qualité de tes réponses malgré mes piètres explications.
 

Fichiers joints

mapomme

XLDnaute Barbatruc
Re @nicoph3,

Avec une fonction personnalisée (écrite en VBA). Le code de la fonction est dans module1
La fonction s'appelle ChercherDanstableaux.

Ses arguments sont en nombre variables. Les trois premiers sont obligatoires:
  1. la plage des critères à vérifier
  2. le numéro de la colonne dans les tableaux de recherche qui contient la valeur à renvoyer
  3. un premier tableau où rechercher
  4. aucun, un ou plusieurs autres de tableaux où rechercher
On va parcourir tous les tableaux ligne par ligne. Si les valeurs des premières colonnes d'une ligne sont égales aux critères, alors on a une correspondance et on renvoie la valeur de la colonne mentionnée en deuxième argument.

Plusieurs cas se présentent:
  • les critères sont tous vides : on retourne le texte "Critères à vide"
  • Il n'y a aucune correspondance : on retourne le texte "non trouvé"
  • il n'y a qu'une seule correspondance : on retourne la valeur de la colonne indiqué en 2ème argument
  • il y a plus d'une correspondance : on retourne le texte "doublons"
Voir exemple dans le fichier joint...
 

Fichiers joints

nicoph3

XLDnaute Nouveau
woaw au top , petite question si je dois séparer les cases de recherche

c'est a dire qu'on ecrit pas en B2 C2 et E2 mais en B2 F2 et H2 on formule ca comment ?
 

mapomme

XLDnaute Barbatruc
Re @nicoph3,

Pour ce cas, j'utilise une fonction auxiliaire VersTableauBis(...) qui va rassembler les critères dispersés dans un seul tableau à une seule dimension. Le code de la fonction ChercherDansTableaux a été modifié pour traiter, non plus une plage de critères, mais un tableau à une dimension en entrée.

Voir l'utilisation dans le fichier joint.

Function ChercherDansTableaux(xCriteres, ColonneValeur As Long, Plage1 As Range, ParamArray plageN())
  • xcritères est un tableau à une seule dimension contenant les critères à remplir
  • ColonneValeur est la numéro de la colonne dont on va retourner la valeur si les valeurs des premières colonnes de la ligne correspondent aux critères
  • Plage1 est le premier tableau où on va rechercher les critères (ligne par ligne)
  • PlageN est un ensemble de tableaux supplémentaires dans lesquels rechercher les critères. PlageN contient un tableau, plusieurs tableaux ou encore aucun tableau (PlageN est absent)
on retourne le texte :
  • "Critères à vide" si tous les critères sont vides
  • "non trouvé" si aucune ligne du et des tableaux de recherche ne vérifie les critères
  • "doublons" si plusieurs lignes du et des tableaux de recherche vérifient les critères
  • la valeur de la colonne numéro ColonneValeur de la ligne de correspondance si une et une seule ligne vérifie les critères.
Function VersTableau(ParamArray Cellules())
  • Cette fonction renvoie un tableau à une dimension.
  • Ce tableau comporte les valeurs des cellules figurant en argument.
  • Les arguments sont des plages de cellules.
  • Pour un bon fonctionnement, il faut que chaque plage en entrée ne soit constituée que d'une seule ligne ou bien d'une seule colonne
  • On lit les plages en ligne de la gauche vers la droite
  • On lit les plage en colonne du haut vers le bas
  • Si une des plages d'entrée au moins n'est ni en ligne et ni en colonne alors une erreur se produit(#REF!)
Le code est dans module1. Il est un petit peu commenté.

errata! Voir le message N° 20. le fichier nicoph3- reherche- vba- v2.xlsm de ce message a été supprimé. Utiliser le fichier de version v2.1
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Re @nicoph3 ;),

Attention j'ai constaté une une erreur dans le code de la v2. J'avais écrit xcell (qui était faux) au lieu de la bonne valeur ycell (voir code)
Le code de la fonction VersTableau() a été corrigé dans la version v2.1 jointe ci-dessous.
Ne plus utiliser la v2!
 

Fichiers joints

Discussions similaires


Haut Bas