Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

accélérer macro recherche

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

antiphot

XLDnaute Occasionnel
Bonjour à toutes et à tous

J'ai une Macro Mise à jour, qui va chercher si les données situées dans la feuille "listedossiers" sont présentes dans le classeur. Si c'est le cas, en fonction des valeurs, celles-ci seront colorées en vert, en rouge ou mises en gras.

Comme je procède par boucle de façon séquentielle, c'est assez long. Et encore dans l'exemple ci-joint, la durée est raccourcie car j'ai enlevé l'étape de récupération des données.
Pour donner une idée, la durée totale de la mise à jour peut être voisine de 5 à 6 minutes.

J'aimerais donc raccourcir l'étape de recherche des données. Mais je ne sais pas trop comment faire. J'avais pensé utiliser la fonction Find(what:="données") mais cela me paraît pas compatible avec Ucase et replace.

En effet il arrive que les données tapées manuellement dans le classeur ne respectent pas la casse ni l'espace entre la valeur numérique et le lettre.
Exemple: 358 A peut devenir dans le classeur 358A ou 358a ou 358 a.

Si quelqu'un a une idée pour raccourcir le temps de cette foutue macro, je lui en serais vraiment reconnaissant.

Amicalement
Philippe
 

Pièces jointes

Re : accélérer macro recherche

Salut Antiphot,

J'ai peut-être une solution avec Find()

Je part de la feuille "listedossiers", pour chaque ligne remplie de cette feuille,
Je fait dans un premier temps, une recherche de la première partie du terme avant l'espace.
Puis si la valeur à été trouvée, je la compare à la valeur entière.

Le code est plus long mais devrait être plus rapide, à tester 😉

A+
 

Pièces jointes

Re : accélérer macro recherche

Bonjour BrunoM45

Merci pour t'être penché sur mon pb. D'ailleurs tu m'avais déjà grandement aidé sur cette application pour accélérer la récupération des données.

J'ai testé en conditions réelles et la vitesse d'exécution est sans commune mesure avec la précédente macro !

Seule remarque. en ce qui concerne la mise en gras des cellules correspondant a la colonne K de le feuille "listedossiers", cela ne fonctionne pas. Ce qui est normal car les données sont de type 000 125 ou 100 250
Par contre sur la feuille j'ai qq chose comme "code: 000 120"
Peux-tu l'adapter dans le style des deux autres ?

Merci par avance
Philippe
 
Re : accélérer macro recherche

Je reviens sur le fil car apparement je me suis réjouis trop vite. En fait la macro a un comportement bizarre. Je m'explique:
Par exemple prenons la macro validecomdmatenvert certaines données dans le classeur correspondant à celles de la colonne B de la feuille "listedonnées" sont bien mises en vert peut importe l'espace et la casse. Par contre d'autres non.

D'autre part si dans le classeur on a deux valeurs ex: 853 A de format identique, l'une sera mise en vert et l'autre pas ?

C'est carrément étrange !
 
Re : accélérer macro recherche

Re,

Tu aurais moyen de mettre le fichier que tu testes en ligne ?

De mon côté, je n'ai pas essayé tous les paramètres 😱

A+
 
Re : accélérer macro recherche

Bonjour et bon Dimanche à toutes et à tous

Bonjour BrunoM45

En ce qui concerne les pb évoqués, c'est en testant sur le fichier que tu as renvoyé 🙂

En fait pour tester, je me suis attaché à une ou deux valeurs présentes dans chaque colonne concernée par les macros.
Ex: 851 A en B2 et 851 C en B3 (La colonne B correspond aux données pour la macro mise en vert)

Ensuite j'ai reporté ces 2 valeurs dans l'une des feuilles du classeur en mettant tous les cas possibles. Soit 851a, 851A, 851 A etc ...
Normalement toutes ces valeurs doivent devenir vertes si la macro fonctionne.

idem pour la colonne D (correspondant aux données pour la macro mise en rouge)
idem pour la colonne K (correspondant aux données pour la macro mise en gras)
 
Re : accélérer macro recherche

C'est encore moi !

Bon tjs en testant sur le même fichier j'ai compris d'ou vient le pb.

En fait tu fais d'abord une recherche sur la valeur numérique. Hors j'ai plusieurs fois la même valeur avec des lettres différentes 854 A, 854 B, 854 C etc.
Dans le classeur, si tu t'amuses à inscrire à la suite (l'une en-dessous de l'autre) 854 A, 854 B jusqu'à 854 C tu verras que seul 854 A passe en vert. efface cette valeur et dès lors c'est la valeur 854 B qui passe en vert, etc
En fait la macro fonctionne mais uniquement pour une seule combinaison valeur numérique + espace + lettre

Bon je ne sais pas si je suis très clair, on est dimanche matin et je n'ai pas encore pris mon bol de café 😀
 
Re : accélérer macro recherche

Salut antiphot,

J'ai épluché le code et il y avait 2 problèmes, effectivement 😱

1) après la 1ère recherche, je ne disais pas à Excel d'aller chercher une autre valeur après celle qui à été trouvée, c'est fait avec : After:=Sh.Range(RngF)

2) pour la recherche des valeurs en colonne K, il faut un traitement spécial, donc je fait une recherche de caractère dans la valeur de la cellule trouvée, avec : Instr(PositionDeDépart,ValeurDeRecherche,ValeurAChercher)

De plus, pour gagner encore en rapidité, du moins je l'espère, je fais le traitement des 3 cas (Rouge, Vert, Gras) en même temps, dans la même procédure.

Inutile de parcourir à chaque fois toutes les feuilles pour traiter les éléments.

Voili, voilà 😀

A+
 

Pièces jointes

Re : accélérer macro recherche

Bon tjs en testant sur le même fichier j'ai compris d'ou vient le pb.
Je ne suis pas certain que tu es trouvé 😛

Désolé, tu as perdu 🙂

Bon je ne sais pas si je suis très clair, on est dimanche matin et je n'ai pas encore pris mon bol de café
Tu es très clair, mais pas dans la bonne problématique ....

Ne t'en fait pas ça viendra 😀

A+
 
Re : accélérer macro recherche

Bon la prochaine fois, je me montrerai plus prudent avant de m'avancer 😱

Pour les encouragements, c'est gentil mais je suis conscient que le chemin est long, très long avant d'avoir un niveau correct en vba. D'autant que je pratique en dilettante, ma formation étant plutôt tournée vers la biologie. Mais bon je m'accroche et j'apprends tous les jours.

En tout cas merci pour tout car cette fois c'est nickel !
Il ne me reste plus qu'à décortiquer ton code pour avancer un peu ds mes connaissances.

il y a d'ailleurs une syntaxe que je ne comprends pas bien, si tu peux me l'expliquer ce serait sympa.

RngF = "$A$1": FirstCel = "" je ne vois pas bien à quoi correspond la variable FirstCel et à quel moment elle est définie ?
 
Re : accélérer macro recherche

Bon la prochaine fois, je me montrerai plus prudent avant de m'avancer 😱
No soucy 😀

Pour les encouragements, c'est gentil mais je suis conscient que le chemin est long, très long avant d'avoir un niveau correct en vba. D'autant que je pratique en dilettante, ma formation étant plutôt tournée vers la biologie.
Sur ce terrain là, c'est clair que tu pourras nous en apprendre !

Mais bon je m'accroche et j'apprends tous les jours.
Si ça peux te rassurer, même moi, j'en apprends tous les jours en VBA.

En tout cas merci pour tout car cette fois c'est nickel !
De rien


il y a d'ailleurs une syntaxe que je ne comprends pas bien, si tu peux me l'expliquer ce serait sympa.

RngF = "$A$1": FirstCel = "" je ne vois pas bien à quoi correspond la variable FirstCel et à quel moment elle est définie ?
Au niveau du code, j'ai essayé de faire le plus simple possible 😛

"FirstCel" est la variable qui contient l'adresse de la première cellule trouvée, lors de la recherche.

Au départ de la boucle qui parcours chaque feuille, cette variable est mis à zéro (vide) : FirstCel = ""

Ensuite à la fin de la boucle Do ... Loop, je mémorise la première cellule qui à été trouvée :
Code:
' Mémorise l'adresse de la première cellule trouvée
If FirstCel = "" Then FirstCel = RngF

Car Excel, une fois trouvée toutes les valeurs correspondantes, retourne à la première et continue !?

Donc pour empécher cela, j'effectue un test après la recherche
Code:
' Sort de la boucle si pas trouvé ou revenu sur 1ère cellule
If RngF = "$A$1" Or RngF = FirstCel Then Exit Do

Nota : Si aucune valeur n'a été trouvée
=> L'adresse de Range Found (RngF) reste à "$A$1", on sort également

Et voilà 😉

J'espère avoir été clair et que cela pourra t'aider à la compréhension.

A+
 
Dernière modification par un modérateur:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
316
T
  • Résolu(e)
Microsoft 365 pb effacement macro
Réponses
8
Affichages
720
Themax
T
Réponses
5
Affichages
370
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…