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