Création d'un module

  • Initiateur de la discussion Initiateur de la discussion Sylvain
  • Date de début Date de début

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 !

S

Sylvain

Guest
Bonjour à tous le forum,
Grâce à l'un des utilisateurs de ce forum, Eric, que je remercie une nouvelle fois pour son aide, je suis sur le point d'achever la programmation de mon code.

Il me reste à résoudre un petit problème. Dans mon fichier, je possède différentes feuilles avec des données et deux feuilles de synthèses. POur le moment sur chacune des feuilles de données, j'utilise le code suivant :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells = Range("C17") Or Target.Cells = Range("D20") Or _
Target.Cells = Range("D21") Or Target.Cells = Range("D22") Or _
Target.Cells = Range("D23") Or Target.Cells = Range("D24") Or _
Target.Cells = Range("D25") Or Target.Cells = Range("D26") Or _
Target.Cells = Range("D27") Or Target.Cells = Range("D28") Or _
Target.Cells = Range("D29") Or Target.Cells = Range("D30") Or _
Target.Cells = Range("D31") Or Target.Cells = Range("D32") Or _
Target.Cells = Range("D33") Or Target.Cells = Range("D34") Or _
Target.Cells = Range("D35") Or Target.Cells = Range("D36") Or _
Target.Cells = Range("D37") Or Target.Cells = Range("D38") Or _
Target.Cells = Range("D39") Then
...
...
End sub

qui ne va donc se lancer que si une des cellules mentionnées ci-dessus est modifiée.

Ce code est le même quelque soit la feuille de donnée. Est-il possible de ne créer qu'une seule fois cette fonction et de la lancer lorsqu'une des cellules est modifiée. Pour le moment, j'ai recopié ce code sur chacune des feuilles de données.

Merci pour votre aide,
Sylvain
 
Bonjour

Il te suffit de placer ton code non dans chaque feuille mais dans ThisWorkbook et de choisir

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

End Sub

Bon courage

Pascal
 
Salut 😀,

comme tu l'as présicé ds ton titre, il faut que tu crée un module et que tu mette ton fonction dedans et après tu n'as plus qu'a appeller ta fonction derrière chaque évènement de tes feuilles.
je te joins un ex, ça sera surement plus clair 😉
 

Pièces jointes

Bonjour Pascal, Arnaud, le forum,
merci pour vos réponses aussi rapides.

Si je place ma fonction dans ThisWorkbook, elle va se lancer quelque soit la feuille non ? En fait je veux qu'elle se lance pour toutes les feuilles sauf trois dont je connais les noms.

J'ai essayé de rajouter cette condition mais ça ne marche pas
If Sheets.Name <> "Détails" And Sheets.Name <> "Consolidation UCPA" And Sheets.Name <> "consolidation ARFA" Then

Auriez vous une solution ?

Merci à vous
 
Re Pascal, Arnaud,

Arnaud, je n'avais pas essayé ta méthode car je pensais que celle de Pascal était plus simple, juste du code dans thisworkbook et rien à ajouter dans toutes les feuilles. 😉

J'ai encore un souci... je dois mal me débrouiller !

Dans ThisWorkbook, j'ai mis le code suivant :
Private Sub Workbook_sheetChange(ByVal Sh As Object, ByVal Target As Range)

Application.ScreenUpdating = False

If Sheets.Name <> "Détails" And Sheets.Name <> "Consolidation UCPA" And Sheets.Name <> "consolidation ARFA" Then

If Target.Cells = Range("C17") Or Target.Cells = Range("D20") Or _
Target.Cells = Range("D21") Or Target.Cells = Range("D22") Or _
Target.Cells = Range("D23") Or Target.Cells = Range("D24") Or _
Target.Cells = Range("D25") Or Target.Cells = Range("D26") Or _
Target.Cells = Range("D27") Or Target.Cells = Range("D28") Or _
Target.Cells = Range("D29") Or Target.Cells = Range("D30") Or _
Target.Cells = Range("D31") Or Target.Cells = Range("D32") Or _
Target.Cells = Range("D33") Or Target.Cells = Range("D34") Or _
Target.Cells = Range("D35") Or Target.Cells = Range("D36") Or _
Target.Cells = Range("D37") Or Target.Cells = Range("D38") Or _
Target.Cells = Range("D39") Then

mon code (qui marche si je le met sur chacune des feuilles)

End if
End if

Lorsque je modifie une cellule, le programme ne s'arrête plus ! Je suis obligé de fermer l'application avec ctrl+Alt+Supp

Savez-vous d'où ça peut venir ?
 
Re Pascal, Arnaud,

Le message précédent est faux, c'est pas le code que j'ai écrit... Sorry

Arnaud, je n'avais pas essayé ta méthode car je pensais que celle de Pascal était plus simple, juste du code dans thisworkbook et rien à ajouter dans toutes les feuilles. 😉

J'ai encore un souci... je dois mal me débrouiller !

Dans ThisWorkbook, j'ai mis le code suivant :
Private Sub Workbook_sheetChange(ByVal Sh As Object, ByVal Target As Range)

Application.ScreenUpdating = False

If Target.WorkSheet.Name <> "Détails" And Target.WorkSheet.Name <> "Consolidation UCPA" And Target.WorkSheet.Name <> "consolidation ARFA" Then

If Target.Cells = Range("C17") Or Target.Cells = Range("D20") Or _
Target.Cells = Range("D21") Or Target.Cells = Range("D22") Or _
Target.Cells = Range("D23") Or Target.Cells = Range("D24") Or _
Target.Cells = Range("D25") Or Target.Cells = Range("D26") Or _
Target.Cells = Range("D27") Or Target.Cells = Range("D28") Or _
Target.Cells = Range("D29") Or Target.Cells = Range("D30") Or _
Target.Cells = Range("D31") Or Target.Cells = Range("D32") Or _
Target.Cells = Range("D33") Or Target.Cells = Range("D34") Or _
Target.Cells = Range("D35") Or Target.Cells = Range("D36") Or _
Target.Cells = Range("D37") Or Target.Cells = Range("D38") Or _
Target.Cells = Range("D39") Then

mon code (qui marche si je le met sur chacune des feuilles)

End if
End if

Lorsque je modifie une cellule, le programme ne s'arrête plus ! Je suis obligé de fermer l'application avec ctrl+Alt+Supp

Savez-vous d'où ça peut venir ?
 
Re

essaiers déjà de simplifier toutes tes lignes par ceci

Private Sub Workbook_sheetChange(ByVal Sh As Object, ByVal Target As Range)

Application.ScreenUpdating = False

'Tes tests de pages avec la modif que je t'indiquais dans un post plus haut
' et tes tests de cellules simplifiés

If Not Intersect(Target, Range("C17, D20😀39")) Is Nothing Then

'Ton code


Pascal
 
re,

J'ai bien essayé ta dernière méthode Pascal mais lors du fonctionnement j'ai une erreur :
erreur 1004
la méthode 'Intersect' de l'objet '_Global' a échoué

Mon code est très long et un peu bizarre... Je l'ai testé en le mettant sur chacune des feuilles et tout marche bien donc je ne pense pas que ça vienne de là. Mais bon, si ça peut aider, je veux bien le déposer ici.

Je crois que je vais retourner à la bonne méthode un peu bourrin avec mon code sur chacune des pages... Tant pis pour la taille du fichier
 
re,

"Je crois que je vais retourner à la bonne méthode un peu bourrin avec mon code sur chacune des pages" <- évite de faire comme ça quand même.....car si tu as a modifier ta fonction ben tu vas t'amuser a le faire dans toutes tes feuilles........alors qu'avec ma solus tu ne le modifie qu'1 fois ( a ben j'y tient à ma solus 😀 même si c vrai celle de Pascal est + rapide 😉 )
 
re,

c'est vrai, tu as raison Arnaud ! ce sera plus simple.
Je m'en vais le programmer et vous tiens informer de la suite des événements...

Je vous joins mon fichier avec la solution de Pascal. J'ai enlevé plusieurs feuilles pour respecter la taille des pièces jointes

Merci à vous deux
 

Pièces jointes

- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

  • Question Question
Microsoft 365 Récuperer donner
Réponses
2
Affichages
769
Réponses
0
Affichages
2 K
Réponses
2
Affichages
885
Réponses
9
Affichages
1 K
Réponses
4
Affichages
2 K
Retour