Création d'un module

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
 
P

Pascal76

Guest
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
 
A

Arnaud

Guest
Salut :D,

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

  • Classeur1.zip
    6.9 KB · Affichages: 21
  • Classeur1.zip
    6.9 KB · Affichages: 21
  • Classeur1.zip
    6.9 KB · Affichages: 16
S

Sylvain

Guest
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
 
P

Pascal76

Guest
Re

Il faut que tu ecrives comme ceci

If Target.Worksheet.Name <> "Détails" and Target.Worksheet.Name <> "Consolidation UCPA" and Target.Worksheet.Name <> "consolidation ARFA" Then

Bon courage

Pascal
 
S

Sylvain

Guest
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 ?
 
S

Sylvain

Guest
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 ?
 
P

Pascal76

Guest
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:D39")) Is Nothing Then

'Ton code


Pascal
 
S

Sylvain

Guest
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
 
A

Arnaud

Guest
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 :D même si c vrai celle de Pascal est + rapide ;) )
 
S

Sylvain

Guest
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

  • Copie_de_Essai.zip
    47.5 KB · Affichages: 18

Discussions similaires

Réponses
11
Affichages
435

Statistiques des forums

Discussions
312 215
Messages
2 086 330
Membres
103 187
dernier inscrit
ebenhamel