Cell.offset ans une boucle for each
Bonjour, bonjour,
J'ai problème et je ne trouve pas l'explication.
Voici le code que me pose problème:
For Each cell In cola 'cola est un range
If WorksheetFunction.Weekday(Value, 2) > 4 Or cell.DisplayFormat.Interior.Color <> 16777215 Then
cell.Offset(0, 1).Value = "x"
End IfEt que j'écrive cells.offset.... ou cell.offset...., soit vba me retourne une erreur 424 ou une 1004.
J'ai aussi essayé le if avec une seule condition, blocage.
si pour l'offset je mets activecell, ça marche, mais il reste sur la première cellule même si y a un for each avant. et j'ai pas envie de m'amuser avec des select etc, etc
je ne sais plus où chercher, du coup je sollicite votre aide.
Merci d'avance pour votre aide.
Bonjour jojo69, le forum,
A tester....à tout hasard...en supposant que cola est une plage nommée.
Sub test()
Dim c As Range
Application.ScreenUpdating = False
For Each c In Range("cola") 'cola est un range
If WorksheetFunction.Weekday(Value, 2) > 4 Or _
c.DisplayFormat.Interior.Color <> 16777215 Then _
c.Offset(0, 1).Value = "x"
Next c
End Subsinon, en définissant ta plage:
Sub test()
Dim c As Range, cola As Range
Application.ScreenUpdating = False
Set cola = Sheets("TaFeuille").Range("Taplage") ' à adapter
For Each c In cola 'cola est un range
If WorksheetFunction.Weekday(Value, 2) > 4 Or _
c.DisplayFormat.Interior.Color <> 16777215 Then _
c.Offset(0, 1).Value = "x"
Next c
End SubCordialement,
Merci xorsankukai pour ta contribution.
Alors ça a réglé le problème pour le x, mais m'en a généré plusieurs autres.
Je voulais essayer de simplifier mon code:
cola = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row 'compte la colonne A
For w = 2 To cola
With Cells(w, 1) 'marque les jours fériés
comp = Application.Match(Cells(w, 1), Sheets("Data").Range("E3:E15"), 0)
If Not IsError(comp) Then
Cells(w, 1).Interior.Color = RGB(255, 192, 0)
End If
End With
With Cells(w, 1) 'couleur pour les vacances
vac = Application.Match(Cells(w, 1), Sheets("data").Range("G3:G15"), 0)
If Not IsError(vac) Then
Cells(w, 1).Interior.Color = RGB(255, 192, 0)
End If
End With
With Cells(w, 1) 'écris un x pour ve-di
If WorksheetFunction.Weekday(.Value, 2) > 4 Or Cells(w, 1).DisplayFormat.Interior.Color <> 16777215 Then
Cells(w, 1).Offset(0, 1).Value = "x"
End If
End With
With Cells(w, 1) 'colorie sa-di
If WorksheetFunction.Weekday(.Value, 2) > 5 Then
Cells(w, 1).Interior.Color = RGB(255, 192, 0)
End If
End With
Next wqui est écris dans un select avec trois cas, par un for each Cell:
sub joursoff()
cola=range("A2:A32")
For each Cell in cola
'marque les jours fériés
comp = Application.Match(Cell, Data.Range("E3:E15"), 0)
If Not IsError(comp) Then
Cell.DisplayFormat.Interior.Color = RGB(255, 192, 0)
End If
'couleur pour les vacances
vac = Application.Match(Cell, data.Range("G3:G15"), 0)
If Not IsError(vac) Then
Cell.DisplayFormat.Interior.Color = RGB(255, 192, 0)
End If
'écris un x pour ve-di
If WorksheetFunction.Weekday(Value, 2) > 4 Or Cell.DisplayFormat.Interior.Color <> 16777215 Then
Cell.Offset(0, 1).Value = "x"
End If
'colorie sa-di
If WorksheetFunction.Weekday(Value, 2) > 5 Then
Cell.DisplayFormat.Interior.Color = RGB(255, 192, 0)
End If
Next cell
end subet là jusqu'au x, ça marchait.
Mais pas moyen d'aller plus loin. Du coup je suis revenu à l'ancienne variante.
Merci pour les pistes.
Belle soirée
Re,
J'ai fini par trouver une solution. Je la poste au cas où qq'un aurait un problème similaire
Sub joursoff(ws)
Set data = Worksheets("Data")
derA = ws.Range("A" & Rows.Count).End(xlUp).Row
cola = ws.Range("A2" & ":A" & derA)
For Each cell In ws.Range("A2" & ":A" & derA)
comp = Application.Match(cell, data.Range("E3:E14"), 0)
vac = Application.Match(cell, data.Range("G3:G14"), 0)
If Not IsError(comp) Or Not IsError(vac) Then
cell.Interior.Color = RGB(255, 192, 0)
End If
If WorksheetFunction.Weekday(cell, 2) > 4 Or cell.Interior.Color <> 16777215 Then
cell.Offset(0, 1).Value = "x"
End If
If WorksheetFunction.Weekday(cell, 2) > 5 Then
cell.Interior.Color = RGB(255, 192, 0)
End If
Next cell
End Subchose étrange, si j'écris For each in cola ça me génère une erreur "objet requis", mais écris comme dans le code ci-dessus , ça fonctionne....