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

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,

Fais ceci :
- Vas dans VBA et dans la fenêtre "projects" double clique à gauche sur la feuil3
- Place ta macro comme suit :
Code:
Private Sub Worksheet_Activate()
Dim tableau(10, 4)
...
...
wend
End Sub
Enlève bien l'instruction Sub test_opex()

Quand tu sélectionneras la feuille 3, ta macro sera automatiquement exécutée.

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

Dan,
Je viens de tester mais j'ai une erreur quand j'active la feuil3. Aprés avoir lancer le débogage, j'ai cette ligne surlignée en jaune : Range("d2").Select
Merci de me tenir au courant s'il y a quelque chose à modifier dans le code.
 
Re : transformer une macro en procédure événementielle

Re,

Oui assez curieusement d'ailleurs.
Bon, modifie comme suit :
- Enlève Range("D2").select
- modifie le code
Code:
Sheets("Feuil1").Select
derlig = Sheets("feuil1").Range("D65536").End(xlUp).Row
- la variable b n'est pas déclarée, tu dois le faire. Il me semble que devrait démarrer à 3 (et non à 1) qui est la première ligne où tu dois prendre une valeur en colonne D.

Fais un essai

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

Dan,
Effectivement, je n'ai plus le message d'erreur mais la macro tourne en boucle. Boucle t'elle sur toutes les lignes car dans mon fichier, il y a plus de 150 lignes ?
Merci.
 
Re : transformer une macro en procédure événementielle

Re,

Si b est la valeur de la ligne tu dois déclarer comme Integer par exemple.Cela dépends de ton nombre de lignes. Si tu es sûr que le nombre sera inférieur à 255 tu peux mettre "Dim b as Byte" sinon laisse "integer" comme je l'ai mis ci-dessous.
Maintenant pour modifier ton code comme ci-dessous, ouvre ton fichier sans activer les macros et corrige comme suit.

Code:
Private Sub Worksheet_Activate()
Dim tableau(10, 4)
Dim a As Integer, b As Integer
Dim ligne As Integer
nom = Sheets("Feuil3").Range("c11").Value
With Sheets("feuil1")
    .Activate
    .Range("D2").Activate
derlig = .Range("D65536").End(xlUp).Row
End With
For b = 1 To derlig
    If ActiveCell.Offset(b, 0).Text = nom Then
        ligne = b
        Exit For
    End If
Next b
....

Ensuite tu auras aussi un pb juste à l'instruction "Sheets("Feuil3").Select" car comme la macro fonctionne sur l'activation de la feuille 3 tu vas devoir mettre l'instruction ci-dessous juste avant, sinon la macro recommence au départ.
Donc avant "Sheets("Feuil3").Select" mets :
Code:
Application.EnableEvents = False
et juste après "wend" mets :
Code:
Application.EnableEvents = True
--> n'oublie surtout pas cela !!!

Change aussi le "select" et mets "activate"

A te lire

Edition : correction en GRAS dans le texte ci-dessus.
 
Dernière édition:
Re : transformer une macro en procédure événementielle

Dan,
Si tu as le temps, pourrais-tu m'envoyer le code dans son intégralité car j'ai procédé comme tu m'as dit mais la macro tourne toujours en boucle.
J'ai un doute quand tu dis "entre "wend" et "Sheets("Feuil3").Select" car dans le code le "wend" est à la fin et je n'ai pas "sheets'("Feuil3).Select" après le "wend".
Merci d'avance encore une fois de ta patience et de ton aide.
 
Re : transformer une macro en procédure événementielle

Bonsoir à tous
Bonsoir Cris et Dan

Si je peux me permettre, je ne suis pas "tout à fait" d'accord avec Dan, désolé.

Pour la ligne : derlig = .Range("D65536").End(xlUp).Row cela donne le n° de la derligne occupé, mais "derlign" devrait être le nombre de lignes à "descendre" (boucle, et donc 2 lignes testées en trop), donc je pense qu'il vaut mieux mettre soit :

- derlig = .Range("D65536").End(xlUp).Row - 2

soit reprendre le code initial qui est plus "court".

Pout ma part je préfère toujours le code : End(xlDown).Row, car l'on va chercher la dernière ligne du tableau commencé en d2 (dans ce cas), et dans le code : End(xlUp).Row, on récupère la dernière ligne "écrite" ce qui pourrait être des annotations à d1000 par exemple,et qui n'auraient rien avoir avec le tableau, donc attention...

Mais pour "Application.EnableEvents = False ou true", c'est qu'il fallait dans ce cas

A+

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

Eric,
Bonsoir à toi. Merci d'avoir donner ton point de vue sur les transformations apportées par Dan. Si votre avis diffère, c'est que chacun a son point de vue et je le respecte.
Eric, j'espère que tu ne me tiendras pas rigueur d'avoir ouvert ce post pour savoir où j'avais pêcher dans la transformation de ton code en procédure événementielle.
Maintenant, après avoir éclairci un peu tout cà, dans mon cas laquelle des deux lignes dois-je utiliser en sachant 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 dans le cas d'un filtre automatique ? Merci à tous les deux et j'espère scincérement, Eric, de ne pas t'avoir froissé.
Bonne soirée à tous.
 
- 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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…