simplifier cette macro

D

Domi_d

Guest
Bonjour,
Peut-on simplifier cette macro :

If Not Intersect(Target, Range('C2:C5')) Is Nothing Then
If Target.Row Mod 2 = 0 Then
Target.Value = 3
Target.Offset(1, 0).Value = Empty
li = Target.Row / 2 + 2
Else
Target.Value = 3
Target.Offset(-1, 0).Value = Empty
li = Target.Row \\ 2 + 2
End If
Cells(li, 6).Value = Target.Offset(0, -1).Value
End If

If Not Intersect(Target, Range('C6:C9')) Is Nothing Then
If Target.Row Mod 2 = 0 Then
Target.Value = 3
Target.Offset(1, 0).Value = Empty
li = Target.Row / 2 + 4
Else
Target.Value = 3
Target.Offset(-1, 0).Value = Empty
li = Target.Row \\ 2 + 4
End If
Cells(li, 6).Value = Target.Offset(0, -1).Value
End If

If Not Intersect(Target, Range('C10:C13')) Is Nothing Then
If Target.Row Mod 2 = 0 Then
Target.Value = 3
Target.Offset(1, 0).Value = Empty
li = Target.Row / 2 + 6
Else
Target.Value = 3
Target.Offset(-1, 0).Value = Empty
li = Target.Row \\ 2 + 6
End If
Cells(li, 6).Value = Target.Offset(0, -1).Value
End If

If Not Intersect(Target, Range('C14:C17')) Is Nothing Then
If Target.Row Mod 2 = 0 Then
Target.Value = 3
Target.Offset(1, 0).Value = Empty
li = Target.Row / 2 + 8
Else
Target.Value = 3
Target.Offset(-1, 0).Value = Empty
li = Target.Row \\ 2 + 8
End If
Cells(li, 6).Value = Target.Offset(0, -1).Value
End If

If Not Intersect(Target, Range('C18:C21')) Is Nothing Then
If Target.Row Mod 2 = 0 Then
Target.Value = 3
Target.Offset(1, 0).Value = Empty
li = Target.Row / 2 + 10
Else
Target.Value = 3
Target.Offset(-1, 0).Value = Empty
li = Target.Row \\ 2 + 10
End If
Cells(li, 6).Value = Target.Offset(0, -1).Value
End If

If Not Intersect(Target, Range('C22:C25')) Is Nothing Then
If Target.Row Mod 2 = 0 Then
Target.Value = 3
Target.Offset(1, 0).Value = Empty
li = Target.Row / 2 + 12
Else
Target.Value = 3
Target.Offset(-1, 0).Value = Empty
li = Target.Row \\ 2 + 12
End If
Cells(li, 6).Value = Target.Offset(0, -1).Value
End If

If Not Intersect(Target, Range('C26:C29')) Is Nothing Then
If Target.Row Mod 2 = 0 Then
Target.Value = 3
Target.Offset(1, 0).Value = Empty
li = Target.Row / 2 + 14
Else
Target.Value = 3
Target.Offset(-1, 0).Value = Empty
li = Target.Row \\ 2 + 14
End If
Cells(li, 6).Value = Target.Offset(0, -1).Value
End If

If Not Intersect(Target, Range('C30:C33')) Is Nothing Then
If Target.Row Mod 2 = 0 Then
Target.Value = 3
Target.Offset(1, 0).Value = Empty
li = Target.Row / 2 + 16
Else
Target.Value = 3
Target.Offset(-1, 0).Value = Empty
li = Target.Row \\ 2 + 16
End If
Cells(li, 6).Value = Target.Offset(0, -1).Value
End If

-------------------------
Merci d'avance pour votre aide
 

jeromegmc

XLDnaute Occasionnel
Salut,

Tu peux essayer un truc de ce genre la et dis moi si ça marche car je n'ai pas regardé ce que faisait exactement ton programme:

Code:
Dim i, j

j = 2
For i = 0 To 28 Step 4

    If Not Intersect(Target, Range('C' & 2 + i & ':C' & 5 + i)) Is Nothing Then
    If Target.Row Mod 2 = 0 Then
    Target.Value = 3
    Target.Offset(1, 0).Value = Empty
    li = Target.Row / 2 + j
    Else
    Target.Value = 3
    Target.Offset(-1, 0).Value = Empty
    li = Target.Row / 2 + j
    End If
    Cells(li, 6).Value = Target.Offset(0, -1).Value
    End If

j = j + 2
Next i


A+
 

Charly2

Nous a quittés en 2006
Repose en paix
Bonjour Domi, Eric et Jérôme :)

Tu peux essayer ceci (pas sûr que les antislash apparaissent) :

Code:
For i = 0 To 7
  If Not Intersect(Target, Range(Cells(2 + i * 4, , 3), Cells(5 + i * 4, 3))) Is Nothing Then
    Target.Offset(1 - 2 * (Target.Row Mod 2), 0).Value = Empty
    li = Target.Row \\ 2 + 2 * (1 + i)
    Target.Value = 3
    Cells(li, 6).Value = Target.Offset(0, -1).Value
  End If
Next i

Tiens-nous au courant ;)

EDITION : écrit à la volée et non testé.

A+

Message édité par: Charly2, à: 08/02/2006 11:30
 

Discussions similaires

Statistiques des forums

Discussions
312 389
Messages
2 087 935
Membres
103 678
dernier inscrit
bibitm