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 If

Et 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 Sub

sinon, 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 Sub

Cordialement,

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 w

qui 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 sub

et 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 Sub

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

Rechercher des sujets similaires à "offset ans boucle each"