Boucle For Each sur tableau pour mise en forme

Bonjour,

J'ai un petit soucis pour tester une condition dans un tableau (voir fichier joint) : pour chaque ligne du tableau, je dois appliquer un style de cellule en fonction de la valeur contenue dans la colonne nommée [FORME]. J'ai essayé avec le morceau de code suivant mais là je sèche... pourrais-je avoir un petit coup de pouce ?

Private Sub Worksheet_Change(ByVal Target As Range)

    'Désactive l'évènement
    Application.EnableEvents = False

    For Each cell In Range("TRAME1[FORME]")
        If cell.Value = "Grand titre" Then cell.Style = "GRAND TITRE MB CONCEPTION" Else: cell.Style = "Normal"
        End If
    Next cell
    Exit For

    'Réactive l'évènement
    Application.EnableEvents = True
End Sub

Merci

13test1.xlsm (32.58 Ko)

Bonjour,

Comme ça :

Private Sub Worksheet_Change(ByVal Target As Range)
    For Each cell In Range("TRAME1[FORME]")
        If cell.Value = "Grand titre" Then cell.Style = "GRAND TITRE MB CONCEPTION" Else cell.Style = "Normal"
    Next cell
End Sub

...Ça devrait suffire.

Remarque : Je ne vois pas de raison de vérifier toute la colonne quand une ligne a été modifié (sauf si on modifie toute la colonne en bloc avec un copier/Coller par exemple)

Donc si on estime qu'on ne change qu'une cellule à la fois, ce code devrait suffire :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 Then
   If Target.Value = "Grand titre" Then Target.Style = "GRAND TITRE MB CONCEPTION" Else Target.Style = "Normal"
End If
End Sub

Nota : Pas la peine de mettre des EnableEvents pour des changements de format. (non gérés)

A+

Merci pour ta réponse rapide ! tu as raison quant au fait de choisir la 2ème solution puisqu'une seule cellule est changée à la fois. As-tu testé sur le fichier joint ? car ça ne fonctionne pas chez moi

Edit : après redémarrage du fichier ça fonctionne. Il me reste néanmoins à modifier légèrement le code car seule la colonne "Forme" doit faire changer le style de cellule, or pour le moment le style est adapté dans n'importe quelle cellule modifiée...

tu peux le faire comme ça :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim isect
If Target.Count = 1 Then
   Set isect = Application.Intersect(Target, Range("TRAME1[FORME]"))
   If Not isect Is Nothing And Target.Value = "Grand titre" Then
      Target.Style = "GRAND TITRE MB CONCEPTION"
   Else
      Target.Style = "Normal"
   End If
End If
End Sub

A+

impeccable, ça marche nickel, je te remercie !

Rechercher des sujets similaires à "boucle each tableau mise forme"