Chercher une valeur dans plusieurs feuilles excel
Résolu/Fermé
NLAH
Messages postés
125
Date d'inscription
lundi 9 septembre 2013
Statut
Membre
Dernière intervention
13 juin 2017
-
16 sept. 2016 à 20:43
nihadlahit - 22 sept. 2016 à 11:16
nihadlahit - 22 sept. 2016 à 11:16
A voir également:
- Recherche de données dans plusieurs feuilles excel vba
- Liste déroulante excel - Guide
- Formule excel pour additionner plusieurs cellules - Guide
- Feuille de pointage excel - Télécharger - Tableur
- Si et excel - Guide
- Fusionner plusieurs feuilles excel en une seule - Guide
2 réponses
Utilisateur anonyme
17 sept. 2016 à 00:42
17 sept. 2016 à 00:42
Bonjour nihadlahit,
Au point 2), tu as écris : « ... récupérer cette valeur dans la cellule A3 »,
mais dans ton programme, tu utilises Cells(1, 3) ! Je croyais que tu avais
compris que c'est : Cells(ligne, colonne) ! Or (ligne 1, colonne 3) = C1,
pas A3 ! Mais peut-être est-ce juste une inversion malencontreuse de
ta part ? Ça peut arriver à tout programmeur, moi y compris...
---------------------------------------------
Note que tu as mis un With inutilement, puisque tu ne l'utilises pas !
En l'utilisant, ça donnerait :
Et en plus, compte tenu de ton programme, il vaudrait mieux
placer le End With juste après le Next O, ce qui permettrait
alors d'enlever les 2 Worksheets("feuille2") qui sont dans ta
boucle For (mais en laissant bien sûr le point juste à droite).
Mais tu vas voir de suite qu'on peut fort bien s'en passer !
---------------------------------------------
En effet, comme la majeure partie du travail se fait en feuille 2,
le mieux est d'aller dessus dès le début, comme tu l'as fait,
mais avec : Worksheets("feuille2").Select
Ce sera plus rapide qu'avec Sheets("feuille2").Select car VBA cherchera
alors la feuille uniquement dans celles de type feuille de calcul, et pas
dans les autres types de feuille.
Étant d'emblée sur "feuille2", inutile d'utiliser un With pour cela
puisqu'il est inutile de préciser la feuille ; car sans indiquer de
façon explicite le nom de la feuille, ta macro fera tout le travail
sur la feuille active, donc "feuille2" puisque c'est celle en cours ;
et si on a besoin d'une autre feuille que "feuille2", c'est là qu'il
faut préciser explicitement cette feuille (et si on doit le faire
souvent, c'est là qu'il est utile d'utiliser With).
---------------------------------------------
Si on résume ce que tu veux faire, c'est : entrer un n° article
sur "feuille2" et en A3, puis le refuser s'il existe déjà sur les
autres feuilles, en A1. Or pour cela, ton programme est très
mal construit, car il y a 2 InputBox ! Essaye de le réécrire
de telle façon qu'il n'y ait qu'un seul InputBox.
2 autres questions à te poser : quand ça compare A3 de "feuille2"
avec A1 de toutes les autres feuilles : y compris "feuille1" où tu
as le bouton de ta macro ? Et est-ce utile de comparer avec A1
de "feuille2" ? Eh oui : ton For Each O est bien pour toutes les
feuilles, y compris "feuille1" et "feuille2" ! Donc si la comparaison
s'avère inutile pour ces 2 feuilles, autant les éviter, n'est-ce-pas ?
---------------------------------------------
Bon courage et bonne chance ! Cordialement. 😊
Au point 2), tu as écris : « ... récupérer cette valeur dans la cellule A3 »,
mais dans ton programme, tu utilises Cells(1, 3) ! Je croyais que tu avais
compris que c'est : Cells(ligne, colonne) ! Or (ligne 1, colonne 3) = C1,
pas A3 ! Mais peut-être est-ce juste une inversion malencontreuse de
ta part ? Ça peut arriver à tout programmeur, moi y compris...
---------------------------------------------
Note que tu as mis un With inutilement, puisque tu ne l'utilises pas !
En l'utilisant, ça donnerait :
With Worksheets("feuille2") .Select .Cells(3, 1) = InputBox("Entrez le N° de l'article :") ' en A3 ! End With
Et en plus, compte tenu de ton programme, il vaudrait mieux
placer le End With juste après le Next O, ce qui permettrait
alors d'enlever les 2 Worksheets("feuille2") qui sont dans ta
boucle For (mais en laissant bien sûr le point juste à droite).
Mais tu vas voir de suite qu'on peut fort bien s'en passer !
---------------------------------------------
En effet, comme la majeure partie du travail se fait en feuille 2,
le mieux est d'aller dessus dès le début, comme tu l'as fait,
mais avec : Worksheets("feuille2").Select
Ce sera plus rapide qu'avec Sheets("feuille2").Select car VBA cherchera
alors la feuille uniquement dans celles de type feuille de calcul, et pas
dans les autres types de feuille.
Étant d'emblée sur "feuille2", inutile d'utiliser un With pour cela
puisqu'il est inutile de préciser la feuille ; car sans indiquer de
façon explicite le nom de la feuille, ta macro fera tout le travail
sur la feuille active, donc "feuille2" puisque c'est celle en cours ;
et si on a besoin d'une autre feuille que "feuille2", c'est là qu'il
faut préciser explicitement cette feuille (et si on doit le faire
souvent, c'est là qu'il est utile d'utiliser With).
---------------------------------------------
Si on résume ce que tu veux faire, c'est : entrer un n° article
sur "feuille2" et en A3, puis le refuser s'il existe déjà sur les
autres feuilles, en A1. Or pour cela, ton programme est très
mal construit, car il y a 2 InputBox ! Essaye de le réécrire
de telle façon qu'il n'y ait qu'un seul InputBox.
2 autres questions à te poser : quand ça compare A3 de "feuille2"
avec A1 de toutes les autres feuilles : y compris "feuille1" où tu
as le bouton de ta macro ? Et est-ce utile de comparer avec A1
de "feuille2" ? Eh oui : ton For Each O est bien pour toutes les
feuilles, y compris "feuille1" et "feuille2" ! Donc si la comparaison
s'avère inutile pour ces 2 feuilles, autant les éviter, n'est-ce-pas ?
---------------------------------------------
Bon courage et bonne chance ! Cordialement. 😊
Modifié par nihadlahit le 17/09/2016 à 12:49
concernant votre première question:
1) quand ça compare A3 de "feuille2" avec A1 de toutes les autres feuilles : y compris "feuille1" où tu as le bouton de ta macro ?
---> en effet,je ne veux pas introduire la feuille1 dans cette comparaison.
et Pour la deuxième question:
Et est-ce utile de comparer avec A1 de "feuille2" ?
Non
j'ai essayé de corriger mon code,mais ça marche pas :
comment je peux réécrire les 2 imputbox en un seul?
cordialement,
18 sept. 2016 à 07:13
Tu as très bien fait de préciser ce que j'avais deviné : il est inutile de faire
la comparaison pour "feuille1" et "feuille2" !
Tu crois vraiment que c'est utile, un Exit For juste avant le Next du For .. Next ?
Moi, je ne crois pas, et tu peux l'enlever sans aucun problème ! 😉 Mais si tu
avais fait une meilleure indentation de ton code VBA, tu l'aurais peut-être vu ?
Toujours pour ta boucle For .. Next, c'est toujours mieux de préciser la variable
utilisée : comme tu as mis For x ..., c'est mieux de mettre après Next x ; ça fait
que l'exécution du code sera plus rapide ; et plus le nombre de boucles est
important, plus ça compte !
Pour réécrire ton programme avec un seul InputBox() au lieu de 2, je te laisse
chercher toi-même encore un peu ; je te le dirai plus tard, sauf si un autre
intervenant te donne la solution avant. 😊