Intégration macro à un module

  • Initiateur de la discussion Initiateur de la discussion degap05
  • 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 !

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.
 
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

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:
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.
 
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
@+
 
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🙂
 
- 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

Réponses
4
Affichages
385
  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
112
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
340
Réponses
35
Affichages
2 K
Réponses
2
Affichages
436
Réponses
2
Affichages
314
Réponses
16
Affichages
1 K
Retour