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

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

Merci Spitnolan08 pour ta proposition,

Lorsque je teste directement sur ton fichier, comme tu l'as indiqué, j'ai l'erreur:

erreur d'exécution 424
Objet requis
 

Spitnolan08

XLDnaute Barbatruc
Re : Intégration macro à un module

Re,

Désolé
Effectivement, il faut changer le Target du second If par Locale... comme pour tous les Target qui pourraient se trouver dans le module de classe.

Cordialement
 

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
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…