SAlut
Tu vas faire un traitement qui risque de prendre un peu de temps, le premier réflexe est de faire référence aux onglets sur lesquels tu travailles via une variable, ainsi si tu change de classeur au cours de l'opération ta macro n'ira pas chercher les onglet dans ce nouveau classeur
1 2 3 4 5
| Dim ShWB as Worksheet, ShCA as worksheet
'On initialise les 2 variables onglet
set ShWB = ThisWorkbook.Sheets("WB")
Set ShCA = ThisWorkbook.Sheets("CA") |
Il faut impérativement laisser tomber les Activate, select et compagnie, ils ne seront utiliser que dans certain cas bien précis. En règle général, il est inutile d'afficher une feuille pour travailler sur son contenu.
Il est préférable d'utiliser Cells plutôt que Range dans ce cas de figure afin de rendre le code portable sur des versions supérieures d'excel.
noLigneWB = shwb.cells(shwb.rows.count,"J").End(xlUp).Row
Il existe une autre méthode avec une boucle For Each [Edit]Je suivais ton code ligne par ligne et je n'avais pas vu que tu l'utilisais après[/Edit]
1 2 3 4 5 6 7
| Dim TheCell as Range
For each TheCEll in shwb.range("J9",shwb.cells(shwb.rows.count,"J").End(xlUp)
'Ici TheCell pointera alternativement chaque cellule incluse après In
contratID = TheCell.value
...
Next |
Il faut éviter de déclarer les variables en plein milieu du code, les déclarer au début rend le code plus lisible.
Une fois que tu as la valeur à rechercher contratID, plutot que de refaire une boucle de recherche, il est préférable d'utiliser la méthode Find, tu trouveras les renseignements nécessaires à sa mise en place dans l'aide.
Deux conseils,
Au début de ton traitement utilise
Application.ScreenUpdating = false
et repasse le à True à la fin du traitement. Ton affichage restera figé, tu ne verras pas les valeur se remplir mais tu y gagneras en vitesse d’exécution (et je ne parle pas de quelques millisecondes...)
Si ton traitement s'effectue sur un très grand nombre de lignes, regarde du coté des tableaux de valeurs, ils te permettent de faire un travail bien plus rapide.
++
Qwaz
Partager