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

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

Réponses
1
Affichages
277
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…