Je ne connais pas la programmation et après avoir vainement essayé de compléter 2 codes VBA qui m'ont été donnés sur ce forum je ne vois pas d'autre solution que de faire encore appel à vous.
1) Je souhaiterais compléter le code suivant :
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
If Intersect(Target, Range("d7:d17")) Is Nothing Or Target.Count > 1 Then Exit Sub
Cancel = True
Range("E" & Target.Row) = Range("E" & Target.Row) - Target
Target = ""
End Sub
pour indiquer que sont aussi concernées :
les cellules h7:h17 et colonne I
les cellules L7:L17 et colonne M
Dans mon fichier réel j'aurai d'autres plages mais la configuration sera la même.
2) je souhaiterais compléter le code suivant :
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("d7:d17")) Is Nothing Or Target.Count > 1 Then Exit Sub
Range("E" & Target.Row) = Range("E" & Target.Row) + Target
End Sub
pour indiquer que sont les mêmes zones que mentionnées plus haut sont concernées.
Comme plus haut, dans mon fichier réel j'aurai d'autres plages mais la configuration sera la même.
Tu as bien fait ne ne pas protéger tes codes. J’ai pu voir qu'il manque un module standard avec la déclaration Public pl As Range
Là, quand elle est initialisée à l’ouverture du Classeur, elle garde sa valeur dans toutes les macros tant qu’elle n’est pas redéfinie .
Si… tu multilpies le nombre de colonnes, autant passer par une boucle supplémentaire.
Dans ThisWorbook, remplace la macro par celle-ci
Code:
Private Sub Workbook_Open()
Feuil1.Activate
Set pl = Range("A10")
For l = 7 To 194 Step 17
For c = 4 To 29 Step 4 ‘toutes les 4 colonnes à partir de la D
Set pl = Application.Union(pl, Range(Cells(l, c), Cells(l + 10, c)))
Next
Next
End Sub
L'initialisation de fera au lancement de cette macro (click sur F5)ou après sauvegarde du classeur à sa réouverture.
Public pl As Range ( sans rien comprendre je l'avoue).
Puis j'ai changé l'ancien code dans Thisworkbook et ai mis :
Private Sub Workbook_Open()
Feuil1.Activate
Set pl = Range("A10")
For l = 7 To 194 Step 17
For c = 4 To 29 Step 4 ‘toutes les 4 colonnes à partir de la D
Set pl = Application.Union(pl, Range(Cells(l, c), Cells(l + 10, c)))
Next
Next
End Sub
J'ai erreur de syntaxe et cette ligne apparaît en rouge :
For c = 4 To 29 Step 4 ‘toutes les 4 colonnes à partir de la D
J'ai fait comme tu as dis mais maintenant dans le code :
Private Sub Worksheet_Change(ByVal R As Range)
If Not Intersect(R, pl) Is Nothing Then
If IsNumeric(R) Then
R(1, 2) = R(1, 2) + R
Else
Application.EnableEvents = False: R = "": R.Select: Application.EnableEvents = True
End If
End If
End Sub
j'ai If Not Intersect(R, pl) Is Nothing Then surligné en jaune.