Recherche de valeur dans liste d'arguments
Résolu/Fermé
Nimsir
Messages postés
53
Date d'inscription
dimanche 5 octobre 2008
Statut
Membre
Dernière intervention
11 juillet 2012
-
11 janv. 2010 à 12:42
Nimsir Messages postés 53 Date d'inscription dimanche 5 octobre 2008 Statut Membre Dernière intervention 11 juillet 2012 - 20 janv. 2010 à 14:18
Nimsir Messages postés 53 Date d'inscription dimanche 5 octobre 2008 Statut Membre Dernière intervention 11 juillet 2012 - 20 janv. 2010 à 14:18
A voir également:
- Recherche de valeur dans liste d'arguments
- Liste déroulante excel - Guide
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Liste déroulante en cascade - Guide
- Liste de diffusion whatsapp - Guide
- Gertrude a préparé la liste des affaires à prendre pour l'excursion. juliette a modifié cette liste en utilisant le mode suivi des modifications proposé par le traitement de texte. - Guide
26 réponses
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
11 janv. 2010 à 13:10
11 janv. 2010 à 13:10
Bonjour,
Il existe certainement 3-4 méthodes pour parvenir à ce résultat. J'ai combiné 3 fonctions excel : ESTERREUR, EXACT et RECHECHEV ; il ne s'agit là que d'un exemple.
En A1 ton nom, en B1:B1000 ta liste en C1 : =SI(ESTERREUR(EXACT(A1;RECHERCHEV(A1;B1:B1000;1;FAUX)));"FAUX";EXACT(A1;RECHERCHEV(A1;B1:B1000;1;FAUX)))
Il existe certainement 3-4 méthodes pour parvenir à ce résultat. J'ai combiné 3 fonctions excel : ESTERREUR, EXACT et RECHECHEV ; il ne s'agit là que d'un exemple.
En A1 ton nom, en B1:B1000 ta liste en C1 : =SI(ESTERREUR(EXACT(A1;RECHERCHEV(A1;B1:B1000;1;FAUX)));"FAUX";EXACT(A1;RECHERCHEV(A1;B1:B1000;1;FAUX)))
Nimsir
Messages postés
53
Date d'inscription
dimanche 5 octobre 2008
Statut
Membre
Dernière intervention
11 juillet 2012
13
11 janv. 2010 à 14:05
11 janv. 2010 à 14:05
Ouille ouille... y a-t-il moyen d'avoir en Anglais svp ?
Merci !
Merci !
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
11 janv. 2010 à 14:31
11 janv. 2010 à 14:31
Oula...
A tester, c'est pas vraiment sur...
=IF(ISERROR(EXACT(A1;VLOOKUP(A1;C1:C1000;1;FALSE)));"FALSE";EXACT(A1;VLOOKUP(A1;C1:C1000;1;FALSE))")
Attention, cette formule ne fonctionne pas s'il y a des doublons dans la liste.
Je l'ai actualisé avec :
en A1 la valeur
en C1:C1000 la liste.
Donc formule à placer en B1
A tester, c'est pas vraiment sur...
=IF(ISERROR(EXACT(A1;VLOOKUP(A1;C1:C1000;1;FALSE)));"FALSE";EXACT(A1;VLOOKUP(A1;C1:C1000;1;FALSE))")
Attention, cette formule ne fonctionne pas s'il y a des doublons dans la liste.
Je l'ai actualisé avec :
en A1 la valeur
en C1:C1000 la liste.
Donc formule à placer en B1
Nimsir
Messages postés
53
Date d'inscription
dimanche 5 octobre 2008
Statut
Membre
Dernière intervention
11 juillet 2012
13
11 janv. 2010 à 14:54
11 janv. 2010 à 14:54
Ah, ça à l'air de fonctionner. Je vais tester plus amplement quand j'aurais un peu plus de temps :-)
Merci en tout cas !
Merci en tout cas !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Nimsir
Messages postés
53
Date d'inscription
dimanche 5 octobre 2008
Statut
Membre
Dernière intervention
11 juillet 2012
13
15 janv. 2010 à 09:57
15 janv. 2010 à 09:57
Hmm,
J'ai un tit souchis... Quand j'ai deux valeurs "pareils" dans la liste des arguments (par exemple CHIEN et chien) il prend en compte le CHIEN mais pas le chien.... pourtant c'est assez important.
Il devrait chercher la valeur IDENTIQUE EN TOUT POINTS... Moyen d'arranger ça ? :(
Bonne journée ;-)
J'ai un tit souchis... Quand j'ai deux valeurs "pareils" dans la liste des arguments (par exemple CHIEN et chien) il prend en compte le CHIEN mais pas le chien.... pourtant c'est assez important.
Il devrait chercher la valeur IDENTIQUE EN TOUT POINTS... Moyen d'arranger ça ? :(
Bonne journée ;-)
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
15 janv. 2010 à 11:14
15 janv. 2010 à 11:14
Salut,
J'ai bien précisé [cf post 3] que : Attention, cette formule ne fonctionne pas s'il y a des doublons dans la liste
Pour faire ce que tu désires, tu dois passer par VBA.
Une piste ici :
https://forums.commentcamarche.net/forum/affich-3623448-macro-excel-recherche-multiple
J'ai bien précisé [cf post 3] que : Attention, cette formule ne fonctionne pas s'il y a des doublons dans la liste
Pour faire ce que tu désires, tu dois passer par VBA.
Une piste ici :
https://forums.commentcamarche.net/forum/affich-3623448-macro-excel-recherche-multiple
Nimsir
Messages postés
53
Date d'inscription
dimanche 5 octobre 2008
Statut
Membre
Dernière intervention
11 juillet 2012
13
18 janv. 2010 à 10:32
18 janv. 2010 à 10:32
Dans la mesure ou quand je retire "chien" dans la liste des valeurs et qu'il ne reste donc plus que "CHIEN", il me mets quand même un "FALSE", y a quelque chose qui ne va pas.
Je suis allé voir ton lien, qui semble correspondre à ce que j'ai besoin, mais je connais strictement rien aux macros :/ Je ne saurais même pas ou je dois aller tapper tout ça :(
Je suis allé voir ton lien, qui semble correspondre à ce que j'ai besoin, mais je connais strictement rien aux macros :/ Je ne saurais même pas ou je dois aller tapper tout ça :(
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
18 janv. 2010 à 10:54
18 janv. 2010 à 10:54
Salut,
Pour "installer" ce code dans ton classeur, ouvre le, tape ALT+F11, Insertion/Modules et copie/colle ce code dans la fenêtre. Ferme ensuite la fenêtre Visual Basic et teste ta macro : ALT+F8 sélectionne "Trouve" et OK.
Je l'ai adapté à ton cas : valeur cherchée en A1, Résultat en B1 et plage de recherche C1:C5.
Reviens ici si tu en as besoin.
Pour "installer" ce code dans ton classeur, ouvre le, tape ALT+F11, Insertion/Modules et copie/colle ce code dans la fenêtre. Ferme ensuite la fenêtre Visual Basic et teste ta macro : ALT+F8 sélectionne "Trouve" et OK.
Sub Trouve() With Worksheets("Feuil1").Range("C1:C40") Set c = .Find(Range("A1").Value, LookIn:=xlValues) If Not c Is Nothing Then Range("B1") = "True" Else Range("B1") = "False" End If End With End Sub
Je l'ai adapté à ton cas : valeur cherchée en A1, Résultat en B1 et plage de recherche C1:C5.
Reviens ici si tu en as besoin.
Nimsir
Messages postés
53
Date d'inscription
dimanche 5 octobre 2008
Statut
Membre
Dernière intervention
11 juillet 2012
13
18 janv. 2010 à 14:16
18 janv. 2010 à 14:16
Bon, dans la mesure ou ça devient de plus en plus précis, et au-delà de mes compétence en la matière, je vais expliquer exactement.
Je travail dans une compagnie d'assurance, et j'ai besoin de savoir combien d'offres sont faite chaque jour sur notre site web.
J'extrait ces statistique, que je colle dans une feuillle excel.
Toutefois, je dois retirer toutes les offres n'ayant pas de numéro, et toutes les offres "tests" (que nous on fait pour vérifier si certaines mises à jour ont bien été éffectuée).
Bref, ce rapport je le colle à partir A7 va jusqu'en H et a une langueur indéterminée (un jour il peut y avoir 15 offres, et le lendemain 150 par exemple).
Les numéros des offres se trouvent en C et les noms (là ou il y aura également marqué si c'est un test) dans la D.
Une ligne est donc comme ceci:
Marque - Date - Numéro de l'offre - Nom client - modèle véhicule - concession - vendeur
Ce que j'ai tenté de faire, c'est d'abord vérifié s'il y a un numéro à l'offre (colonne C). Si non, c'est directement 0 qui apparait dans la colonne I
S'il y a un numéro, il vérifie si c'est un test (colonne D) ou non. Si c'est un test, il marque 0 donc la colonne I, si ce n'est pas un test, c'est 1.
Merci
Vous pourriez vous demandé ce que les chiens et autres venaient faire dans l'histoire ? Bah, dans la mesure ou c'est pour mon boulot, je ne suis pas sensé donner ce genre d'informations. J'ai donc dit des exemples, et puis je me serais débrouillé après. Mais vu qu'on commence avec des macros et tout et tout et que ça, ça me dépasse, je préfère dire ce qu'il en est afin que vous puissiez m'aider de façon optimale :-)
Merci en tout cas !
Je travail dans une compagnie d'assurance, et j'ai besoin de savoir combien d'offres sont faite chaque jour sur notre site web.
J'extrait ces statistique, que je colle dans une feuillle excel.
Toutefois, je dois retirer toutes les offres n'ayant pas de numéro, et toutes les offres "tests" (que nous on fait pour vérifier si certaines mises à jour ont bien été éffectuée).
Bref, ce rapport je le colle à partir A7 va jusqu'en H et a une langueur indéterminée (un jour il peut y avoir 15 offres, et le lendemain 150 par exemple).
Les numéros des offres se trouvent en C et les noms (là ou il y aura également marqué si c'est un test) dans la D.
Une ligne est donc comme ceci:
Marque - Date - Numéro de l'offre - Nom client - modèle véhicule - concession - vendeur
Ce que j'ai tenté de faire, c'est d'abord vérifié s'il y a un numéro à l'offre (colonne C). Si non, c'est directement 0 qui apparait dans la colonne I
S'il y a un numéro, il vérifie si c'est un test (colonne D) ou non. Si c'est un test, il marque 0 donc la colonne I, si ce n'est pas un test, c'est 1.
Merci
Vous pourriez vous demandé ce que les chiens et autres venaient faire dans l'histoire ? Bah, dans la mesure ou c'est pour mon boulot, je ne suis pas sensé donner ce genre d'informations. J'ai donc dit des exemples, et puis je me serais débrouillé après. Mais vu qu'on commence avec des macros et tout et tout et que ça, ça me dépasse, je préfère dire ce qu'il en est afin que vous puissiez m'aider de façon optimale :-)
Merci en tout cas !
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
18 janv. 2010 à 14:33
18 janv. 2010 à 14:33
Lorsque vous faites un "test" qu'est ce qui s'inscrit en colonne D?
Nimsir
Messages postés
53
Date d'inscription
dimanche 5 octobre 2008
Statut
Membre
Dernière intervention
11 juillet 2012
13
18 janv. 2010 à 14:46
18 janv. 2010 à 14:46
Justement, c'est ce qu'il faut voir. Ca peut être différentes choses. C'est pour ça que j'ai créé une liste avec ceux que j'avais déjà découvert jusqu'à présent...
Par exemple, un client ne souhaitant pas mettre son nom et tout ça mettra aussi "test", mais ça il ne faut pas retirer. Mais si c'est moi qui fait un test je mettrais "Test Nim" pour reconnaitre.
Mais, mon boss peut très bien faire un test, et dès lors il mettra "Test JDG" ou "test jdg" ou autre. Ou encore, mon collègue peut en faire un et ce sera "test LM" ou autre. Il se peut même qu'il ne mettent pas le test, et seulement le "JDG" ou "LM", ...
Par exemple, un client ne souhaitant pas mettre son nom et tout ça mettra aussi "test", mais ça il ne faut pas retirer. Mais si c'est moi qui fait un test je mettrais "Test Nim" pour reconnaitre.
Mais, mon boss peut très bien faire un test, et dès lors il mettra "Test JDG" ou "test jdg" ou autre. Ou encore, mon collègue peut en faire un et ce sera "test LM" ou autre. Il se peut même qu'il ne mettent pas le test, et seulement le "JDG" ou "LM", ...
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
18 janv. 2010 à 16:08
18 janv. 2010 à 16:08
Alors allons y...
Tout d'abord, placer la liste des noms à tester (Test JDG, test jdg, Test Nim etc...) en Feuil2 entre A1 et A40 (en gras dans le code si dessous pour adapter chez vous)
Tout d'abord, placer la liste des noms à tester (Test JDG, test jdg, Test Nim etc...) en Feuil2 entre A1 et A40 (en gras dans le code si dessous pour adapter chez vous)
Sub Trouve() Dim derlig As Integer, i As Integer, j As Integer 'vérifie si la cellule C... contient quelque chose, si oui alors inscrit 1 en colonne I derlig = Range("C65536").End(xlUp).Row For i = 1 To derlig If Range("C" & i) <> "" Then Range("I" & i) = 1 Else Range("I" & i) = 0 End If Next i 'vérifie si le contenu de la cellule D... est contenu entre A1 et A40 feuille2 derlig = Range("D65536").End(xlUp).Row With Worksheets("Feuil2").Range("A1:A40") For j = 1 To derlig Set c = .Find(Range("D" & j).Value, LookIn:=xlValues) If Not c Is Nothing Then If c Like Range("D" & j).Value Then Range("I" & j) = 0 Else Range("I" & j) = 1 End If End If Next j End With End Sub
Nimsir
Messages postés
53
Date d'inscription
dimanche 5 octobre 2008
Statut
Membre
Dernière intervention
11 juillet 2012
13
19 janv. 2010 à 10:35
19 janv. 2010 à 10:35
A première vu ça à l'air de fonctionner :-)
Je verrais ça plus en détail dès que j'ai un peu plus le temps, et je vous dirai quoi. En tout cas, déjà un grand merci. Simple question, si je rajoute des valeurs et que la liste dépasse le A40, je n'ai qu'à changer le
Range("A1:A40")
en adaptant le A40 par A45 par exemple ?
Je verrais ça plus en détail dès que j'ai un peu plus le temps, et je vous dirai quoi. En tout cas, déjà un grand merci. Simple question, si je rajoute des valeurs et que la liste dépasse le A40, je n'ai qu'à changer le
Range("A1:A40")
en adaptant le A40 par A45 par exemple ?
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
19 janv. 2010 à 10:53
19 janv. 2010 à 10:53
Salut,
Oui tout à fait. Il est possible aussi de le faire de manière variable afin que le Range s'adapte de lui même :
Oui tout à fait. Il est possible aussi de le faire de manière variable afin que le Range s'adapte de lui même :
Dim numlig as Integer numlig = Sheets("Feuil2").Range("A65536").End(XlUp).Row 'blablabla 'et remplacer : Range("A1:A40") par : Range("A1:A" & numlig)
Nimsir
Messages postés
53
Date d'inscription
dimanche 5 octobre 2008
Statut
Membre
Dernière intervention
11 juillet 2012
13
19 janv. 2010 à 11:02
19 janv. 2010 à 11:02
Ok. Parcontre, je viens de faire quelques tests, et j'ai remarqué que certaines valeurs dans la liste ne sont pas pris en compte. Il met donc des 1 là où il devrait y avoir des 0.
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
19 janv. 2010 à 12:05
19 janv. 2010 à 12:05
Oui effectivement problème de casse. Si .find cherche ChiEn et trouve cHien, il s'arrête là...
Je suis en train de repenser le code pour le simplifier et faire en sorte que cela fonctionne. Peux tu me dire, dans ta feuille 1 (celle qui comprends toute ton extraction) qu'elle est la colonne qui sera systématiquement la plus longue?
Je suis en train de repenser le code pour le simplifier et faire en sorte que cela fonctionne. Peux tu me dire, dans ta feuille 1 (celle qui comprends toute ton extraction) qu'elle est la colonne qui sera systématiquement la plus longue?
Nimsir
Messages postés
53
Date d'inscription
dimanche 5 octobre 2008
Statut
Membre
Dernière intervention
11 juillet 2012
13
19 janv. 2010 à 12:12
19 janv. 2010 à 12:12
La première colonne. (donc à partir de A7 jusqu'à... )
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
19 janv. 2010 à 12:31
19 janv. 2010 à 12:31
Alors teste ce code :
Sub test() Dim cel As Range Dim derlig As Integer, j As Integer, numlig As Integer derlig = Sheets("Feuil1").Range("A65536").End(xlUp).Row numlig = Sheets("Feuil2").Range("A65536").End(xlUp).Row With Worksheets("Feuil2") For j = 7 To derlig For Each cel In .Range("A1:A" & numlig) If cel.Value Like Range("D" & j).Value Then Range("I" & j) = 0 GoTo suivant Else If Range("C" & j) = "" Then Range("I" & j) = 0 Else Range("I" & j) = 1 End If End If Next cel suivant: Next j End With End Sub
Nimsir
Messages postés
53
Date d'inscription
dimanche 5 octobre 2008
Statut
Membre
Dernière intervention
11 juillet 2012
13
20 janv. 2010 à 10:10
20 janv. 2010 à 10:10
Hier j'ai fait un test vite fait, mais il mais énormément de temps...
Aujourd'hui, premier test, il me met un bug à cette ligne là...
numlig = Sheets("Test List").Range("A65536").End(xlUp).Row
Aujourd'hui, premier test, il me met un bug à cette ligne là...
numlig = Sheets("Test List").Range("A65536").End(xlUp).Row
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
20 janv. 2010 à 10:45
20 janv. 2010 à 10:45
Salut,
Très long c'est normal, je ne suis pas le roi de la macro rapide. Là il y a deux tests à faire sur de nombreuses données je suppose?
ne doit pas bugger... As tu déclaré
Très long c'est normal, je ne suis pas le roi de la macro rapide. Là il y a deux tests à faire sur de nombreuses données je suppose?
numlig = Sheets("Test List").Range("A65536").End(xlUp).Row
ne doit pas bugger... As tu déclaré
numlig as Integer