Problèmes options paramêtres dpl sélection

glaine

XLDnaute Junior
J'ai écris une petite macro qui met le fond de la cellule en rouge si sa valeur est une date. Elle marche très bien si dans excel dans options paramêtre déplacement seléction, tout est décoché. Dans le cas contraire, il faut revenir manuellement sur la cellule pour que cela fonctionne. Je pense tenir une piste avec un problème de focus, mais je suis loin d'être sûr. MERCI D'AVANCE pour toute aide apportée.
Amicalement
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 7 Then
For Each Item In Selection
    If IsDate(Item) = True Then
    Item.Interior.ColorIndex = 3
    ActiveCell.Offset(1, 0).Select
    Exit Sub
    End If
Next
End If
End Sub
 

Gael

XLDnaute Barbatruc
Re : Problèmes options paramêtres dpl sélection

Bonjour Glaine, bonjour à tous,

Je ne comprend pas de quelle option tu parles à moins que l'on ne travaille pas sur la même version d'Excel.

Par contre pour ta procédure, si l'objectif est de mettre en rouge toutes les dates de la plage sélectionnée, j'aurais simplement écrit:

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 2 Then
For Each Item In Selection
    If IsDate(Item) = True Then
    Item.Interior.ColorIndex = 3
    End If
Next
End If
End Sub

Le For each...next permet de balayer toute la plage sélectionnée.

Chaque fois que tu exécutes "Activecell.offset(1,0)" tu fais une nouvelle sélection d'une cellule et tu relances automatiquement la procédure évènementielle, c'est pourquoi je l'aurais supprimée.

@+

Gael
 

glaine

XLDnaute Junior
Re : Problèmes options paramêtres dpl sélection

Effectivement, j'ai copié un peu vite ce que j'avais mis en test. La version finale ne comporte pas la ligne avec offset. De même, pour retrouver l'option à décocher, il faut faire outils, options, modifications( paramêtres se trouve juste en dessous à gauche). Je livre aussi une version plus élégante de la macro que l'on m'a suggérée sur un autre forum. Mon problème reste pourtant le même.
Amicalement
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Cel As Range
for each cel in target
     If cel.Column = 7 Then
          cel.Interior.ColorIndex = xlNone
          if isdate(cel) then cel.Interior.ColorIndex = 3
    End If
Next cel
End Sub
 

Gael

XLDnaute Barbatruc
Re : Problèmes options paramêtres dpl sélection

Bonjour Glaine, bonjour à tous,

Ca y est, j'ai mieux compris. L'option dont tu parles passe automatiquement à la cellule suivante lorsque tu modifies une cellule. Dans ce cas, la sélection porte sur la nouvelle cellule qui ne contient rien et ne se trouve pas sur la même colonne donc la procédure s'exécute sans rien modifier.

2 solutions possibles selon ton besoin:

Si tu souhaites pouvoir sélectionner une plage de cellules pour colorier toutes les cellules contenant une date, tu gardes ta procédure telle qu'elle est et tu ajoutes la procédure suivante:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 7 Then
          Target.Interior.ColorIndex = xlNone
          If IsDate(Target) Then Target.Interior.ColorIndex = 3
    End If
End Sub

Cette procédure va gérer le cas où tu modifies une cellule. Ce n'est plus un "Selectionchange" mais un "change". Le For each... next n'est plus nécessaire puisqu'on ne modifie qu'une cellule à la fois.

Si par contre la sélection d'une plage de cellules n'est pas utile, la procédure ci-dessus suffit et tu peux supprimer la précédente.

@+

Gael
 

Statistiques des forums

Discussions
312 801
Messages
2 092 243
Membres
105 312
dernier inscrit
DD07