Exploitation de la propriété ".Address"

Résolu
sfab41 Messages postés 28 Date d'inscription vendredi 27 mars 2009 Statut Membre Dernière intervention 9 juillet 2009 - 1 juin 2009 à 20:48
sfab41 Messages postés 28 Date d'inscription vendredi 27 mars 2009 Statut Membre Dernière intervention 9 juillet 2009 - 2 juin 2009 à 17:10
Bonjour,

je souhaite "surligner" 3 cellules d'une même ligne si l'une d'elles est sélectionnée. Pour faire cela j'ai mis en place cette macro avec l'évènement "SelectionChange" :

For Each cell In Range("D8:F" & max)
    cell.Interior.ColorIndex = 0
Next

If Not Intersect(Range("D8:F" & max), Target) Is Nothing Then
    If Not IsEmpty(Target) Then
'        For Each Target. In Range("D8:F" & max)
            ligne = Target.Row
            Cells(ligne, 4).Interior.ColorIndex = 24
            Cells(ligne, 5).Interior.ColorIndex = 24
            Cells(ligne, 6).Interior.ColorIndex = 24
'        Next
    End If
End If

Le problème est que cette macro ne marche pas si je sélectionne plusieurs cellules (il ne me surlignera que la première dans l'ordre de la liste).
C'est pour cette raison que j'ai pensé utiliser la propriété ".Address". Seulement je débute en programmation et je ne sais pas comment l'exploiter en cas de plusieurs cellules sélectionnées. Ce serait donc sympa d'avoir un coup de main sur ce coup là. Sinon est-ce que c'est la meilleure façon de faire?

6 réponses

us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
2 juin 2009 à 00:43
Bonsoir,

OnMouseOver existe seulement avec les objets sur une Form, mais pas pour les objets d'Excel...

Que veux tu dire avec "je souhaite "surligner" 3 cellules d'une même ligne si l'une d'elles est sélectionnée."
Le terme "sélectionner" signifie en programmation Excel, mettre le curseur sur une cellule... Donc juste un simple déplacement avec les touches par exemple sélectionne une cellule... je ne suis pas sur que tu veux cela, car juste en passant sur une des 3 cellules tu aura le surlignage (et comment le retirer éventuellement ?)...

Pour le bout code, je pense qu'il n'est pas terriblement bon... bien trop compliqué (et inutilement)... Utiliser uniquement la référence de la cellule renvoyée (donc Target) me semble bien mieux...

J'suis en attente d'explication plus précise pour voir la suite...

Amicalement,
Us.
3
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
2 juin 2009 à 11:17
Bonjour,

Euh... non le code ne marche pas !
Que vaut "max" ? Le type de Cell n'est pas déclaré ?! Quel intérêt de cette instruction "IsEmpty(Target)" ? ... target vaut nécessairement qlqch sinon l'événement ne se serait pas produit... etc...

Enfin, je pense avoir compris ce que tu cherches à faire, j'vais voir...

Amicalement,
Us.
3
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
2 juin 2009 à 11:39
Voici ma version :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

' Paramètres
Dim Max As Long
Dim Ligne As Long
Dim Colonne As Long
Max = 20

' Supprime la surbrillance
Range("d8:f" & Max).Interior.ColorIndex = 0

' Récupère emplacment cellule active = objet target
Ligne = Target.Row
Colonne = Target.Column

' Test si dans la plage sensible sinon sort
If Ligne < 8 Or Ligne > Max Then Exit Sub
If Colonne < 4 Or Colonne > 6 Then Exit Sub

' Met la surbrillance jaune
Range("d" & Ligne & ":f" & Selection.Rows.Count + Selection.Row - 1).Interior.ColorIndex = 6

End Sub

=

Mais en cas de sélection multiple, bien évidemment la surbrillance se retrouve sur une seule ligne au moindre changement (mouvement de curseur)... ce qui est fort logique... mais bon... je ne discuterai pas de l'intérêt de cette démarche...

Amicalement,
Us.
3
sfab41 Messages postés 28 Date d'inscription vendredi 27 mars 2009 Statut Membre Dernière intervention 9 juillet 2009
1 juin 2009 à 20:51
J'oubliais : existe-t-il un évènement "OnMouseOver" en vba?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sfab41 Messages postés 28 Date d'inscription vendredi 27 mars 2009 Statut Membre Dernière intervention 9 juillet 2009
2 juin 2009 à 07:50
Tout d'abord, merci de m'aider. En fait j'ai une liste dans laquelle j'ai des noms de fichier (colonne D) avec des informations sur celui-ci (colonne E et F de la même ligne). Je voudrais juste qu'en sélectionnant une de ces 3 cellules, excel me change la couleur de remplissage des 3 cellules.
L'idéal aurait été OnMouseOver mais bon... Le code marche mais pas en cas de sélection de plusieurs lignes, d'où l'idée de voir si c'est possible avec la propriété "Address" car elle donne la totalité des cellules sélectionnées.

PS : Le surlignage se retire automatiquement quand la cellule de la plage n'est plus sélectionnée grâce à ces 3 lignes placées au début :
For Each cell In Range("D8:F" & max)
    cell.Interior.ColorIndex = 0
Next
0
sfab41 Messages postés 28 Date d'inscription vendredi 27 mars 2009 Statut Membre Dernière intervention 9 juillet 2009
2 juin 2009 à 17:10
Merci pour la macro! En effet je pouvais simplifier. Pour le reste j'utilise "if isempty (target)" car certaines cellules de la plage ne sont pas remplies.
Voilà, mon problème est encore tiré au clair grâce à ce super sîte donc merci et surement à bientôt (débutant oblige)!
0
Rejoignez-nous