For Each qui ne joue pas

  • Initiateur de la discussion Initiateur de la discussion Hulk
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Hulk

XLDnaute Barbatruc
Hello,

J'ai réussi à faire un bout de code, mais je n'arrive pas le finir... Voyez plutôt
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i 
Dim MaCell As Variant

i = "Irlande"

For Each MaCell In Range("C5:C10")
    If MaCell.Value = i Then
     MaCell.Interior.ColorIndex = 40
     Cells.Offset(i, 4).Interior.ColorIndex = 40
     Cells.Offset(i, 5).Interior.ColorIndex = 40
    End If
Next

End Sub
Il me dit "Icompatibilité de type"
Code:
Cells.Offset(i, 4).Interior.ColorIndex = 40
Cells.Offset(i, 5).Interior.ColorIndex = 40
J'avoue ne pas comprendre.

Au fait donc, si "Irlande" en C7 -> D7 et E7 = Interior.ColorIndex = 40

Merci pour votre aide, Hulk.
 
Re : For Each qui ne joue pas

Bonjour,

A tester ... pour éviter les ennuis mieux vaut déclarer tout ...
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i  As String
Dim MaCell As Variant
i = "Irlande"
For Each MaCell In Range("C5:C10")
    If MaCell.Value = i Then
     MaCell.Interior.ColorIndex = 40
     MaCell.Offset(0, 4).Interior.ColorIndex = 40
     MaCell.Offset(0, 5).Interior.ColorIndex = 40
    End If
Next
End Sub

A +

Edit : la confusion vient du fait que i est très souvent déclaré comme Integer ... d'où la confusion avec MaCell.Row ... Avec i déclaré en String, tu devras de toutes façons insérer ce code dans une boucle qui modifie i ... cat tu ne fais pas tout çà ... que pour l' Irlande ...
 
Dernière édition:
Re : For Each qui ne joue pas

Bonjour,

Plutot quelque chose dans ce gout là :

Sub Test()
Dim i
Dim MaCell As Variant
i = "Irlande"
For Each MaCell In Range("C5:C10")
If MaCell.Value = i Then
MaCell.Interior.ColorIndex = 40
MaCell.Offset(0, 4).Resize(1, 2).Interior.ColorIndex = 40
End If
Next
End Sub

i est un string donc ne risque pas de fontionner dans Offset
Cells c'est l'ensemble des cellules de la feuille. C'est plutot MaCell à partir de laquelle tu travailles ? non ?
Si les 2 cellules à traiter sont contiguës, le Resize permet de gagner une ligne de code.

Si ce n'est pas ça, le mieux serait que tu nous dises ce que tu veux faire ...
 
Dernière édition:
Re : For Each qui ne joue pas

Re, Catrice, James,

Voili, grâce à Catrice, j'y suis parvenu.

James ton code ne jouait pas, je l'avais déjà fais aussi et en déclarants les variables 😀

Catrice, ce que je voulais c'est ça
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As String
Dim MaCell As Variant

i = "Irlande"
    
    For Each MaCell In Range("C5:C10")
     If MaCell.Value = i Then
      MaCell.Interior.ColorIndex = 40
      MaCell.Offset(0, 1).Interior.ColorIndex = 40
      MaCell.Offset(0, 2).Interior.ColorIndex = 40
     End If
    Next

End Sub
Tu vois ?

Donc exemple : Si C7 = "Irlande" D7 et E7 = couleur 40
Autre exemple : SI C2 ="Irlande" D2 et E2 = couleur 40

Au fait c'est ton code, mais sans le Resize(1, 2), et ça joue !

Merci à vous tous.

Cdt, Hulk.
 
Re : For Each qui ne joue pas

Bonjour à tous,

tu peux peut être également faire ainsi :

Code:
Dim i As String
Dim MaCell As Variant
i = "Irlande"
    For Each MaCell In Range("C5:C10")
        If MaCell.Value = i Then Range(MaCell, MaCell.Offset(0, 2)).Interior.ColorIndex = 40
    Next

bon après midi
@+
 
Re : For Each qui ne joue pas

Re,

Au fait James, non ce n'était pas tout à fais le même que j'avais fait...

Toi c'était
Code:
MaCell.Offset(0, 1).Interior.ColorIndex = 40
MaCell.Offset(0, 2).Interior.ColorIndex = 40
et moi
Code:
Cells.Offset(i, 1).Interior.ColorIndex = 40
Cells.Offset(i, 2).Interior.ColorIndex = 40
Bref les deux ne jouaient pas.

Par contre le tien n'était vraiment pas loin de celui à Catrice... Bref encore 😀

Je reviens à la charge pour vous demander autre chose :

Si je fais ça pour étaler le coloriage jusqu'à la colonne L
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As String
Dim MaCell As Variant

i = "Irlande"
    
    For Each MaCell In Range("C5:C10")
     If MaCell.Value = i Then
      MaCell.Interior.ColorIndex = 40
      MaCell.Offset(0, 1).Interior.ColorIndex = 40
      MaCell.Offset(0, 2).Interior.ColorIndex = 40
      MaCell.Offset(0, 3).Interior.ColorIndex = 40
      MaCell.Offset(0, 4).Interior.ColorIndex = 40
      MaCell.Offset(0, 5).Interior.ColorIndex = 40
      MaCell.Offset(0, 6).Interior.ColorIndex = 40
      MaCell.Offset(0, 7).Interior.ColorIndex = 40
      MaCell.Offset(0, 8).Interior.ColorIndex = 40
      MaCell.Offset(0, 9).Interior.ColorIndex = 40
     End If
    Next

End Sub
Y a pas moyen de le raccourcir ?? de l'optimiser quoi ?

Merci pour vos réponses.

Cdt, Hulk.
 
Re : For Each qui ne joue pas

Re,

En effet, avais pas vu ton post Pierrot !

C'est impeccable !

Donc ça
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As String
Dim MaCell As Variant

i = "Irlande"
    
    For Each MaCell In Range("C5:C10")
        If MaCell.Value = i Then Range(MaCell, MaCell.Offset(0, 9)).Interior.ColorIndex = 40
    Next

End Sub
Et ça colorie de col C à L.

Merci à vous tous les chefs !

Au plaisir, Hulk.
 
Re : For Each qui ne joue pas

Re,

Ok merci, maintenant je comprends mieux le Resize.

Corsons la chose, si je veux aussi la colonne B en couleur 40...

J'ai essayé ceci, mais non...
Code:
For Each MaCell In Range("C5:C10")
If MaCell.Value = "Irlande" Then MaCell.Resize([B][COLOR="Red"]-1[/COLOR][/B], 10).Interior.ColorIndex = 40
Next
ou ceci
Code:
For Each MaCell In [COLOR="Red"][B]Range("B5:C10")[/B][/COLOR]
If MaCell.Value = "Irlande" Then MaCell.Resize(1, 10).Interior.ColorIndex = 40
Next
et idem ça ne joue pas !

Merci encore !

Hulk.
 
Re : For Each qui ne joue pas

Re

comme ceci peut être :

Code:
Dim i As String
Dim MaCell As Variant
i = "Irlande"
    For Each MaCell In Range("C5:C10")
        If MaCell.Value = i Then MaCell.Offset(0, -1).Resize(1, 11).Interior.ColorIndex = 40
    Next

@+
 
Re : For Each qui ne joue pas

Re,

For Each MaCell In Range("C5:C10")
If MaCell.Value = "Irlande" Then MaCell.Offset(0,-1).Resize(1, 11).Interior.ColorIndex = 40
Next

Le Resize j'en avais parlé dans mon Post 😉

Edit : Pierrot est plus rapide ...
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

R
Réponses
2
Affichages
663
R
Réponses
0
Affichages
661
Retour