Re : Demande précision sur Target.offset
Bonsoir dss,
C'est ma semaine de reprise au boulot, alors je ne vais pas pouvoir te consacrer tout le temps nécessaire ce soir à l'ensemble des explications que tu souhaites (ça fait beaucoup de questions d'un coup lol
).
J'ai désactiver l'enregistrement uniquement pour mes tests (gain de temps). Cela dit, j'ai peur de m'être mal exprimé : ce n'est pas tant l'endroit où tu as placé les routines de tri, d'épuration ou d'enregistrement qui me fait t'alerter, mais plutôt le choix de l'évènement
déclencheur de ces routines.
Un évènement Change(), au même titre qu'un évènement SelectionChange(), est un évènement qui intervient souvent dans le cadre d'une utilisation normale d'un classeur. Il doit donc être réservé à des traitements que je qualifierais de
légers, donc sans trop de conséquence en terme d'utilisation de ressources machine notamment.
Cet événement Change() se déclenche à chaque cellule modifiée par l'utilisateur et je ne pense pas qu'un tel évènement soit propice à des traitements
lourds tels que le tri, l'épuration ou l'enregistrement du classeur. Je te proposais donc d'envisager l'utilisation de l'évènement de fermeture du classeur par exemple ou l'utilisation d'un bouton pour déclenchement
à la demande. Ce n'est évidemment pas une obligation, tu es seul maître à bord. C'est un conseil uniquement.
Pour le tableau variant
TabTemp, c'est une vieille habitude chez moi. Il s'agit du transfert de l'ensemble des données utiles de ta feuille dans une variable tableau. Je me sers ensuite de cette variable tableau comme je me servirais du tableau de la feuille de calcul. Cet intermédiaire me permet de récupérer dans la suite du code les valeurs beaucoup plus rapidement que si je demandais à Excel d'aller lire telle ou telle cellule. Je ne vais pas pouvoir aller dans le détail cette fois, mais en gros, comme mon Tabtemp commence à la cellule A1 de la feuille, une fois chargé, si je souhaite obtenir la valeur de la cellule E3 par exemple, alors je demande la valeur TabTemp(3,5) qui correspond à la 3ème ligne/5ième colonne de mon tableau variant. Dans une boucle avec beaucoup de données, tu t'apercevras que cette façon de faire donne un résultat beaucoup plus rapide qu'une lecture dans la cellule elle-même.
Pour ta routine de protection de ligne, j'avoue que je n'ai pas trop analysé et l'ai laissée telle que tu l'avais définie.
Pour ton histoire de "
lig=target.row ne pouvant se rapporter qu'à une procédure évenementielle", il s'agit d'un simple problème de portée de variable, ce qui n'est pas insurmontable... Tu peux par exemple transmettre les variables en argument à une procédure tierce... mais là, je n'aurais pas le temps de t'expliquer. En tout cas, pas ce soir et peut être pas dans ce fil mais dans un autre, sans doute un peu plus spécifique à ce genre de problème... On attaque là l'apprentissage VBA pur et plus vraiment le cas particulier de ton classeur.
Voilà, j'espère que ça pourra te dépanner un peu pour l'instant.
Cordialement,