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
Supporter XLD
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...
 

Pièces jointes

  • nicoph3- reherche- vba- v1.xlsm
    23.5 KB · Affichages: 8

mapomme

XLDnaute Barbatruc
Supporter XLD
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
Supporter XLD
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!
 

Pièces jointes

  • nicoph3- reherche- vba- v2.1.xlsm
    28.7 KB · Affichages: 7

mapomme

XLDnaute Barbatruc
Supporter XLD
Re @nicoph3 ,

Dans la deuxième forme non corrigée, si:
  • Critères dans cellules isolées : pas de problème
  • Critères avec des plages de cellules : alors apparition de résultats faux
exemple :
  • si on désignait les critères par : A1;A2;A3;A4 alors pas de problèmes
  • si on désignait les mêmes critères par : A1;A2:A4 alors résultat incorrect
Dans la deuxième forme corrigée, tout devrait fonctionner correctement.

Même si vos résultats étaient corrects (avec critères dans des cellules isolées), préférez la version corrigée :).

Ce qui est le plus gênant dans cette affaire, c'est qu'une faute d'inattention se transforme, du point de vue programme, en faute logique. Ce qui fait que la macro:
  • peut quelquefois bien fonctionner d'autre fois non
  • que ce dysfonctionnement ne saute pas aux yeux
  • que ce fonctionnement incorrect dans certain cas ne correspond pas à la description de ce que doit faire cette macro
Donc on passe à la version v2.1 :p
 
Dernière édition:

Statistiques des forums

Discussions
311 725
Messages
2 081 940
Membres
101 845
dernier inscrit
annesof