Re : transformer une macro en procédure événementielle
Salut
Permettez-moi de m'immiscer dans ce fil pour deux remarques :
1. quelle drôle d'idée que de vouloir désactiver les événements dans une macro événementielle. Je vous renvoie au fil suivant pour voir comment contourner le problème de réentrance dans une macro événementielle :
https://www.excel-downloads.com/threads/comment-utiliser-un-code-macro-dans-excel.68570/
2. Je vois vos discussions à propos de vos histoires d'offset. Personnellement je n'aime pas cette façon de définir une plage avec des numéros de ligne, contrairement à ce qu'on voit pratiquement toujours dans les démos. Je définis toujours directement un Range, ce qui donnerait dans l'exemple de Dan :
Dim Plage As Range
With Sheets("feuil1")
Set Plage = .Range("D2", .Range("D65536").End(xlUp))
End With
En ce qui concerne l'histoire du XlUp ou du XlDown, c'est à vous de voir, moi je préfère XlUp en partant du bas. De toute façon comme Dan je pense que ce serait une très mauvaise idée d'aller planquer des lignes d'annotations à la ligne 1000, il n'y a rien de tel pour mettre le bazar dans une base une fois qu'on aura oublié la présence de ces annotations.
Ensuite pour boucler sur la plage, il suffit de faire :
Dim Cel As Range
For Each Cel In Plage
If Cel = nom Then
ligne = Cel.Row
Exit For
End If
Next Cel
Quel avantage ? c'est plus simple, plus propre (plus besoin de se demander s'il faut mettre .Row - 2 ou -3, ce qui fleure bon le bricolage et risquera de poser problème le jour où on décidera d'ajouter une nouvelle ligne de titre par exemple), et surtout bien plus rapide que de passer par une boucle For b = 1 To derlig.
3. (oui je sais, je disais qu'il y aurait 2 remarques) : inutile de faire des Activate ou des Select, ça ne sert à rien dans 99% des cas.