Intégration macro à un module

degap05

XLDnaute Impliqué
Bonjour,
J'ai mis en place dans mon travail, grâce à l'aide des membres du forum,
un classeur qui comprend 15 feuilles, dont une seule est visible à l'ouverture: "Acceuil".
Les autres feuilles sont appelées par un menu, à la demande.
Sur dix feuilles nommées de ce classeur, j'ai une macro exécutée par cellules cibles.
Ce type de macro peut-elle être intégrée à un module (plutôt que dans chaque feuille), en désignant les feuilles dans lesquelles elle doit être exécutée:

'remplir les données de la feuille Ordonnancier
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
Dim Lig, derlig, num1 As Integer, Couleur As Long
Lig = Target.Row
If Target.Count > 1 Then Exit Sub
If Target.Value = "" Then GoTo suite
If Target.Column = 26 Then
With Sheets("Ordonnancier")
.Visible = True
derlig = .Range("A65500").End(xlUp).Row + 1
.Cells(derlig, 2).Value = Cells(Lig, 2).Value
' tenir compte des 2 colonnes cachées
.Cells(derlig, 3).Value = Cells(Lig, 3).Value
.Cells(derlig, 4).Value = Cells(Lig, 10).Value
.Cells(derlig, 5).Value = Cells(Lig, 9).Value
.Cells(derlig, 6).Value = Cells(Lig, 12).Value
.Cells(derlig, 7).Value = Cells(Lig, 11).Value
.Cells(derlig, 8).Value = Cells(Lig, 20).Value
.Cells(derlig, 9).Value = Cells(Lig, 26).Value
.Cells(derlig, 10).Value = Cells(Lig, 8).Value
.Cells(derlig, 11).Value = Cells(Lig, 21).Value
.Cells(derlig, 12).Value = Cells(Lig, 22).Value
.Cells(derlig, 13).Value = Cells(Lig, 23).Value
.Cells(derlig, 14).Value = Cells(Lig, 24).Value
.Cells(derlig, 15).Value = Cells(Lig, 25).Value
.Cells(derlig, 1).Value = ActiveSheet.Name
num1 = .Cells(derlig - 1, 16).Value
.Cells(derlig, 16).Value = num1 + 1
End With
' pour protéger la ligne qui vient d'être validée et enregistrée à l'ordonnancier
Target.EntireRow.Select
Selection.Locked = True
Lig = Target.Row
Cells(Lig + 0, 1).EntireRow.Select
Selection.Locked = True
'pour remplir les données de l'imprimé Nominatif
End If
If Target.Column = 18 Then
With Sheets("Nominatif")
derlig = .Range("A65500").End(xlUp).Row + 1
.Range("F11").Value = Cells(Lig, 9).Value
.Range("B9").Value = Range("H1").Value
.Range("D1").Value = Cells(Lig, 8).Value
.Range("B3").Value = Cells(Lig, 18).Value
.Range("B4").Value = Cells(Lig, 14).Value
.Range("B5").Value = Cells(Lig, 15).Value
.Range("B6").Value = Cells(Lig, 16).Value
.Range("B7").Value = Cells(Lig, 17).Value
.Range("B10").Value = Cells(Lig, 2).Value
.Range("B11").Value = Cells(Lig, 3).Value
.Range("F9").Value = Cells(Lig, 10).Value
.Range("E45").Value = Cells(Lig, 12).Value
.Range("E46").Value = Cells(Lig, 11).Value
num1 = .Range("F2").Value
.Range("F2") = num1 + 1
End With
'pour remplir les données de l'imprimé Dotation
End If
If Target.Column = 8 Then
With Sheets("Dotation")
derlig = .Range("A65500").End(xlUp).Row + 1
.Range("F11").Value = Cells(Lig, 6).Value
.Range("B9").Value = Range("H1").Value
.Range("D1").Value = Cells(Lig, 8).Value
.Range("B10").Value = Cells(Lig, 2).Value
.Range("B11").Value = Cells(Lig, 3).Value
.Range("F9").Value = Cells(Lig, 7).Value
num1 = .Range("F2").Value
.Range("F2") = num1 + 1
End With
'pour colorer les cellules à la dispensation
suite:
End If
If Target.Column = 8 Then
If Target.Value <> "" Then
Range(Cells(Lig, 1), Cells(Lig, 8)).Interior.ColorIndex = 43
Else
Range(Cells(Lig, 1), Cells(Lig, 8)).Interior.ColorIndex = xlNone
End If
End If
If Target.Column = 18 Then
If Target.Value <> "" Then
Range(Cells(Lig, 1), Cells(Lig, 18)).Interior.ColorIndex = 44
Else
Range(Cells(Lig, 1), Cells(Lig, 18)).Interior.ColorIndex = xlNone
End If
End If
If Target.Column = 20 Then
If Target.Value <> "" Then
Range(Cells(Lig, 1), Cells(Lig, 25)).Interior.ColorIndex = 48
Else
Range(Cells(Lig, 1), Cells(Lig, 25)).Interior.ColorIndex = xlNone
End If
End If
Application.ScreenUpdating = True

End Sub



Merci beaucoup pour votre aide.
 

cbea

XLDnaute Impliqué
Re : Intégration macro à un module

Bonjour degap05,

Dans le fichier joint, tu trouveras une solution.
J'ai mis le code qui se trouvait dans "WorkSheet_Change..." dans le module1 avec la procédure "Traitement".

Dans chaque feuille, tu devras ajouter :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    Call Traitement(Target)
End Sub

J'espère que cela correspond à ta demande.
 

Pièces jointes

  • Macro_degap05_v1.xls
    36 KB · Affichages: 48

Spitnolan08

XLDnaute Barbatruc
Re : Intégration macro à un module

Bonjour,

Tu peux utiliser un module de classe. dans ce cas ce n'est pas très compliqué.

Cordialement

Edit : mais la solution de cbea est probablement plus simple.
Edit2 : je confirme
 
Dernière édition:

degap05

XLDnaute Impliqué
Re : Intégration macro à un module

Bonjour et merci "cbea" et Spitnolan08,

Problème:
Sur n'importe quelle cellule d'une des feuilles ou doit fonctionner la macro, quand j'entre une donnée, j'ai le message:Erreur de compilation: Variable ou procédure attendue, et non un module.
 

Spitnolan08

XLDnaute Barbatruc
Re : Intégration macro à un module

Re,

Pourtant la solution de cbea fonctionne sans problème. Mais comme on n'a pas ton fichier, il y a très certainement des détails qui nous échappent...

A tout hasard je te joints un essai rapide avec module de classe.

Cordialement
 

Pièces jointes

  • XLDmoduleClasseEvtFeuille.zip
    11.1 KB · Affichages: 17

Pierrot93

XLDnaute Barbatruc
Re : Intégration macro à un module

Bonjour Degap, Spitnolan:), Cbea

autre solution, ton code dans le module "thisworkbook" et utilisation de l'événement "SheetChange" :

Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Sh.Name <> "exeptfeuil1" And Sh.Name <> "exeptfeuil2" And Sh.Name <> "exeptfeuil3" Then
'ton code
End If
End Sub

bon après midi
@+
 

degap05

XLDnaute Impliqué
Re : Intégration macro à un module

Bonjour, du coup j'ai deux solutions qui fonctionnent:

-celle de Spitnolan08 (sur sa feuille pour l'instant), après changement "Locale",
-et celle de Pierrot93 que j'ai mis en place sur mon classeur pendant ce temps.


Merci à vous deux:)
 

Statistiques des forums

Discussions
312 841
Messages
2 092 709
Membres
105 515
dernier inscrit
zourino