transformer une macro en procédure événementielle

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 !

criscris11

XLDnaute Accro
Bonjour à tous,
Suite à un post précédant, j'ai un fichier qui contient une macro dans un module mais j'aimerais le transformer en procédure événementielle (car plus pratique pour l'utilisateur). Dans la feuil3, la macro est lancée par le bouton "lance" et j'aimerais que cette macro se déclenche quand la cellule C14 de la feuil2 change ou à chaque sélection de la feuil3. Dans les deux cas j'ai essayé avec Call test_opex et run test_opex mais dans les deux cas la macro tourne en boucle. Il y a t'il un moyen de remédier à cela.
Merci d'avance et bon dimanche.
 
Re : transformer une macro en procédure événementielle

Bonjour à tous
Bonjour Cris et Dan

Oh la la pas de problème pour ce nouveau post, au contraire il vaut mieux en ouvrir un pour une nouvelle question.

Les points de vue diffèrent, et la façon de programmer aussi. Si je me suis permis de donner mon avis, c'est que je pensais ne pas avoir tout à fait tort, bien que Dan soit un bon, et même un très bon en la matière.

Si je comprend : "....qu'à la fin de mes lignes saisies, j'ai une ligne avec un sous-total dans chaque colonne afin d'avoir le nombre de lignes filtrées...." apparemment après la ligne 10 de l'exemple que tu nous a transmis (feuil1 NOM8) il y a une une ligne supplémentaire (ligne 11), donc si tu prends mon code (et en plus il est prétentieux Eric....) dans :
derlig = ActiveCell.End(xlDown).Row - 2 il faudrait changer -2 en -3 si tu n'as ajouté qu'une seule ligne bien entendu

Maintenant pour le choix, c'est à toi de voir. J'aurais aimé que Dan donne son avis sur ce que j'ai ajouté, ce qui aurait pu te servir à prendre une décision (mais avec l'une ou l'autre tu ne risque pas ta vie...).

A+ et surtout sans rancune aucune

Cordialement
 
Re : transformer une macro en procédure événementielle

Bonsoir Eric45, Criscris11,

Pour Eric : pour moi le choix de "xldown" ou "xlup" est valable. Le "xldown" peut être utilisé si l'on est sûr de ne pas avoir une cellule vide dans la colonne. Car dans pareil cas on ne prend pas en compte ce qui est en dessous. Mais je l'ai déjà utilisé aussi.
L'avantage du "xlup" (souvent utilisé par nos éminents programmeurs ici...) permet de partir du bas pour trouver la première cellule non vide. Avantageux si l'on sait pas ce que le tableau contient. Ce choix me paraît donc plus logique dans le sens où l'on est sûr de bien prendre toutes les données de la colonne concernée.

Ici j'ai vu que "derlig = .Range("D65536").End(xlUp).Row - 2" me donnait 8 alors que l'on devait commencer par la ligne 10. Là j'ai peut être fait erreur sur la suite de la macro mais les indications que j'ai données étaient dans l'esprit de lire toutes les données comprises entre les lignes 2 et 10.

Pour ce qui est d'avoir une donnée en d1000, cela me parait un peu "tiré par les cheveux". Toutefois comme tu le signales très justement on pourrait encore trouver quelqu'un ait l'idée de mettre des infos de ce coté. 😀 .D'où bien cloisonner sa base de données pour éviter cela.

Voilà juste un avis à ce sujet.

Pour Criscris, dans ta macro il faut absolument déclarer toutes les variables. Ce qui n'est pas fait actuellement. Je parle de a, b, c, f etc... Pour le voir, mets "option explicit" avant le début de ta macro (donc avant le Sub...).

A bientôt
 
Dernière édition:
Re : transformer une macro en procédure événementielle

Bonjour à tous
Bonjour Cris et Dan

Tout à fait d'accord avec toi Dan, et merci de ces précisions

Quant aux déclarations de variables, que je n'ai pas faites (c'est une honte...), il faut être très attentionné sur l'endroit où elles sont écrites : sur worksheet, USF, module, .....et comment : private, public,....

Bonne journée

A+
 
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.
 
Re : transformer une macro en procédure événementielle

Bonjour à tous

Juste pour le Fun

**** de Dan
Pour ce qui est d'avoir une donnée en d1000, cela me parait un peu "tiré par les cheveux". Toutefois comme tu le signales très justement on pourrait encore trouver quelqu'un ait l'idée de mettre des infos de ce coté. .D'où bien cloisonner sa base de données pour éviter cela.

**** de Ti
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.

Et oui je le fais, et pour une raison précise. Sur un récapitulatif, j'ai des personnes qui " m'obligent" à intercaler des lignes vides, pour continuer et avoir tout sur une seule feuille, et encore je ne vous dis pas tout, il y en a qui ont des idées... C'est pour cela que j'ai pris l'habitude de prendre "xldown" dans la plupart des cas ( ceci étant dit, je ne reprendrais cette discussion qu'en présence de mon avocat ... lol).

En ce qui concerne l'immixtion de Ti, elle apporte la réponse que j'attendais. Merci

Bonne journée

A+
 
Re : transformer une macro en procédure événementielle

Bonsoir Dan, Eric, Ti,
Merci à tous les trois sur ce fabuleux débat que je découvres après un jour d'absence. Effectivement, chacun voit midi à sa porte et chacun a ses techniques mais pour un débutant comme moi, c'est dur de vous suivre.
Ti, aurais-tu un peu de temps pour écrire le code à ta façon afin de voir la différence par rapport aux codes de Dan et d'Eric. Il se peut même qu'il soit peut-être plus simple et surtout plus compréhensible.
Merci à tous les trois pour ce suivi en bonne et due forme. Bonne soirée à tous les trois et à tout le forum.
 
- 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

Retour