Recherche de valeur dans Visual Basic
Fermé
GAELAMONTREAL
-
22 mai 2009 à 23:29
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 - 25 mai 2009 à 00:03
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 - 25 mai 2009 à 00:03
A voir également:
- Recherche de valeur dans Visual Basic
- Visual basic - Télécharger - Langages
- Microsoft 365 basic - Accueil - Microsoft Office
- Microsoft visual c++ runtime - Guide
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Visual paradigm - Télécharger - Gestion de données
10 réponses
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
23 mai 2009 à 09:18
23 mai 2009 à 09:18
Bonjour,
Il y a 10000 pays ??? (l'ONU en est à un peu moins de 200...)
de type "IF" pourquoi, il y peut être d'autres solutions, pareil pour la boucle FOR...NEXT?
Tu n'as pas besoin de VBA pour faire ce que tu demandes:
tu sélectionne l'ensemble de tes colonnes et lignes par ex: A2:F5000
tu écris le nom cherché dans une cellule vide par ex:H1
=(NB.SI(A2:F5000;H1)>0)
te renvoie vrai si la valeur est dans le tableau
Il y a 10000 pays ??? (l'ONU en est à un peu moins de 200...)
de type "IF" pourquoi, il y peut être d'autres solutions, pareil pour la boucle FOR...NEXT?
Tu n'as pas besoin de VBA pour faire ce que tu demandes:
tu sélectionne l'ensemble de tes colonnes et lignes par ex: A2:F5000
tu écris le nom cherché dans une cellule vide par ex:H1
=(NB.SI(A2:F5000;H1)>0)
te renvoie vrai si la valeur est dans le tableau
Bonjour,
Merci pour votre réponse, en fait je voulais dire 10000 codes postaux....
Votre solution est plutôt sympa et j'y est déjà pensé mais ça ne peut pas fonctionner le but est de trouver un code postal connecté avec un pays cad:
l'utilisateur met france 44000 Le programme doit cherché si ce code fait partie des destinations présentant une surcharge: soit retrouver la combinaison de cellule (sur la meme ligne) france 44000.
Avec un nb.si le progamme va juste chercher si la valeur est présente dans la base de données sans réellement lier le pays avec le code postal si je met 2 fonction nombre de si. A moins que nombre de si puisse prendre en argument 2 éléments...
Si vous avez d'autres idées ça me sauverait....
Merci
Merci pour votre réponse, en fait je voulais dire 10000 codes postaux....
Votre solution est plutôt sympa et j'y est déjà pensé mais ça ne peut pas fonctionner le but est de trouver un code postal connecté avec un pays cad:
l'utilisateur met france 44000 Le programme doit cherché si ce code fait partie des destinations présentant une surcharge: soit retrouver la combinaison de cellule (sur la meme ligne) france 44000.
Avec un nb.si le progamme va juste chercher si la valeur est présente dans la base de données sans réellement lier le pays avec le code postal si je met 2 fonction nombre de si. A moins que nombre de si puisse prendre en argument 2 éléments...
Si vous avez d'autres idées ça me sauverait....
Merci
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
23 mai 2009 à 17:45
23 mai 2009 à 17:45
bonjour,
OK, compris (mais pas résolu!...)
Afin de comprendre la structure de ton tableau pour faciliter la recherche d'une solution, pourrais tu mettre un extrait Excel (XL<2007) de quelques lignes seulement de ton tableau sur
https://www.cjoint.com/
et coller le lien proposé dans ton message.
OK, compris (mais pas résolu!...)
Afin de comprendre la structure de ton tableau pour faciliter la recherche d'une solution, pourrais tu mettre un extrait Excel (XL<2007) de quelques lignes seulement de ton tableau sur
https://www.cjoint.com/
et coller le lien proposé dans ton message.
J'ai fait un exemple du tableau très rapide disponible ici:
https://www.cjoint.com/?fxsbknI4Ll
Merci
https://www.cjoint.com/?fxsbknI4Ll
Merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
23 mai 2009 à 19:55
23 mai 2009 à 19:55
Classeur illisible par enregistré en XML
prière d'enregistrer en xls: j'avais précisé XL<2007!!!
prière d'enregistrer en xls: j'avais précisé XL<2007!!!
Bonjour,
Dsl pour l'erreur de format.
le lien pour mon exemple en 2003 est
https://www.cjoint.com/?fytqNVwQ1w
Merci
Dsl pour l'erreur de format.
le lien pour mon exemple en 2003 est
https://www.cjoint.com/?fytqNVwQ1w
Merci
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 247
24 mai 2009 à 19:47
24 mai 2009 à 19:47
Bonjour,
comme michel c'est endormi je te propose :
=SI(SOMMEPROD((D6&E6=A1:A50&B1:B50)*1);"oui";"non")
mais il faut que toutes tes valeurs soient en A:B
eric
comme michel c'est endormi je te propose :
=SI(SOMMEPROD((D6&E6=A1:A50&B1:B50)*1);"oui";"non")
mais il faut que toutes tes valeurs soient en A:B
eric
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
24 mai 2009 à 23:17
24 mai 2009 à 23:17
Bonsoir Gael, Eric
OK pour ta formule (belle astuce, d'ailleurs!), Eric, qui répond au classeur envoyé par Gael... mais comme tu le dis, pour 2 colonnes et d'après le 1° message, Il y aurait N fois 2 colonnes
Si c'est le cas, j'avais pensé partir sur la fonction find avec for each d'après l'exemple microsoft mais il y a peut-être + fute-fute...
là, maintenant je vais au dodo :-)
OK pour ta formule (belle astuce, d'ailleurs!), Eric, qui répond au classeur envoyé par Gael... mais comme tu le dis, pour 2 colonnes et d'après le 1° message, Il y aurait N fois 2 colonnes
Si c'est le cas, j'avais pensé partir sur la fonction find avec for each d'après l'exemple microsoft mais il y a peut-être + fute-fute...
là, maintenant je vais au dodo :-)
Bonjour,
Merci Eric pour ta formule, ça fonctionne parfaitement pour 2 colonnes et elle est vraiment très astucieuse je n'avait pas du tout pensé à ça.
On va dire aussi que je ne maîtrise pas du tout la fonction somme produit avec du texte (très fort) par contre pourrait tu m'expliquer le 1 dans la formule représente une matrice ?
Par contre est-ce que je vais pouvoir m'en sortir avec plusieurs colonnes avec cette formule (enfin en la modifiant un peu) ?
Merci pour tout en tout cas ça fait plaisir d'avoir du monde qui m'aide !
Merci Eric pour ta formule, ça fonctionne parfaitement pour 2 colonnes et elle est vraiment très astucieuse je n'avait pas du tout pensé à ça.
On va dire aussi que je ne maîtrise pas du tout la fonction somme produit avec du texte (très fort) par contre pourrait tu m'expliquer le 1 dans la formule représente une matrice ?
Par contre est-ce que je vais pouvoir m'en sortir avec plusieurs colonnes avec cette formule (enfin en la modifiant un peu) ?
Merci pour tout en tout cas ça fait plaisir d'avoir du monde qui m'aide !
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 247
25 mai 2009 à 00:03
25 mai 2009 à 00:03
Re,
oui, tu peux traiter autant de colonnes que tu veux mais en restant raisonnable quand même. Sommeprod() est assez gourmand, donc mieux vaut éviter les colonnes complètes.
Le principe est de multiplier des matrices de test (vrai*vrai=>vrai, vrai*faux=>faux,...) et de multiplier en dernier lieux soit par une matrice de valeurs (auquel cas on a la somme des valeurs ayant vrai à tous les tests), soit de multiplier par 1 pour transformer les vrai en 1 et les faux en 0. Dans ce cas on a le nombre de valeurs répondant aux tests.
Bien sûr les matrices doivent toutes avoir la même taille.
=sommeprod((tests_colonne1)*(tests_colonne2)*(...)*(test_colonne_n)*(valeurs_colonne_m))
ou
=sommeprod((tests_colonne1)*(tests_colonne2)*(...)*(test_colonne_n)*1)
Dans ton cas D6&E6=A1:A50&B1:B50 donne (avec 44002) :
"France44002"={"";"";"Surcharge";"PAYSCODE POSTAL";"France44000";"France44001";"France44002";"France44003";...;"";""}
=>
{FAUX;FAUX;FAUX;FAUX;FAUX;FAUX;VRAI;FAUX;...;FAUX;FAUX}
qui *1 donne : {0;0;0;0;0;0;1;0;...;0}
et sommeprod() te fait la somme de cette matrice soit =1
eric
oui, tu peux traiter autant de colonnes que tu veux mais en restant raisonnable quand même. Sommeprod() est assez gourmand, donc mieux vaut éviter les colonnes complètes.
Le principe est de multiplier des matrices de test (vrai*vrai=>vrai, vrai*faux=>faux,...) et de multiplier en dernier lieux soit par une matrice de valeurs (auquel cas on a la somme des valeurs ayant vrai à tous les tests), soit de multiplier par 1 pour transformer les vrai en 1 et les faux en 0. Dans ce cas on a le nombre de valeurs répondant aux tests.
Bien sûr les matrices doivent toutes avoir la même taille.
=sommeprod((tests_colonne1)*(tests_colonne2)*(...)*(test_colonne_n)*(valeurs_colonne_m))
ou
=sommeprod((tests_colonne1)*(tests_colonne2)*(...)*(test_colonne_n)*1)
Dans ton cas D6&E6=A1:A50&B1:B50 donne (avec 44002) :
"France44002"={"";"";"Surcharge";"PAYSCODE POSTAL";"France44000";"France44001";"France44002";"France44003";...;"";""}
=>
{FAUX;FAUX;FAUX;FAUX;FAUX;FAUX;VRAI;FAUX;...;FAUX;FAUX}
qui *1 donne : {0;0;0;0;0;0;1;0;...;0}
et sommeprod() te fait la somme de cette matrice soit =1
eric