Votre question
Résolu

Excel mettre en couleur la ligne et la colonne de la cellule selection

Tags :
  • Microsoft Excel
  • Programmation
  • VB
Dernière réponse : dans Programmation
12 Janvier 2010 13:03:21

Bonjour,
J'aimerai sur excel, lorsque je déplace le curseur de la souris sur une cellule, que la ligne et la colonne, correspondants à cette dernière se mettent en couleur.
Par exemple si la souris se trouve sur la cellule I23, la ligne 23 et la colonne I se colorient.
De même, si la cellule D8 se trouve sous le curseur de la souris, la ligne 8 et la colonne D se colorient.

J'aimerai pouvoir effectuer cette opération dans une plage donné, par exemple range ("E5;S31").

Autres pages sur : excel mettre couleur ligne colonne cellule selection

a b L Programmation
12 Janvier 2010 17:07:13

Bonjour,

Utilise la méthode SelectionChange de l'objet Worksheet dans le code de la feuille à considérer.
m
0
l
13 Janvier 2010 08:31:59

Mais il me semble que l'objet selection change du worksheet, s'active que lorsque l'on active une cellule.
Alors que ce que je souhaite c'est activer le code simplement au passage de la souris
m
0
l
Contenus similaires
a b L Programmation
13 Janvier 2010 10:19:22

Ah. Et bien ce n'est pas possible (*).
L'événement OnMouseOver n'existe pas. :spamafote: 

_____________
(*) A moins de monter une usine à gaz qui nous ferait quitter de facto le cadre de la programmation Excel/VBA.
m
0
l
13 Janvier 2010 11:27:24

Est t-il possible de le créer?
m
0
l
13 Janvier 2010 11:34:36

Je viens d'avoir la réponse.
Effectivement , par macro on ne peut pas. Cependant, en utilisant les mises en formes conditionnelles avec une formule, on y arrive
m
0
l
a b L Programmation
13 Janvier 2010 13:42:16

?
Par macro, on peut, puisque le VBA se base sur le VB. Toute l'API Windows est donc disponible. Mais je me vois mal t'expliquer comment utiliser en VB les fonction C WindowFromPoint et autres GetCursorPos, avec le passage des paramètres de VB à C, ainsi que la création d'un timer pour scruter régulièrement si le curseur est ou pas au dessus de la fenêtre Excel....

Par contre, je serais curieux de voir quelle formule tu utilises !
m
0
l
14 Janvier 2010 08:32:52

Effectivement, celà me parait compliqué pour creer cette macro :) , mais curieux comme je suis j'irai rechercher certaines notions lool
Concernant le code pour les mise en formes conditionnelles, il se déclenche aussi sur le click de la souris, et non pas au passage de celle-ci sur la cellule.
Mais bon j'ai du me résigner à celà.

Après avoir défini la zone ou l'on souhaite appiliquer les régles de mise en forme, on créer 2 règles

1) La première pour indiquer toute les cellules que l'on ne souhaite pas mettre en couleur

=OU(CELLULE("ligne")<8;CELLULE("ligne")>38;CELLULE("colonne")<3;CELLULE("colonne")>8)


2) La deuxième, pour indiquer les cellules que l'on souhaite mettre en couleur

=OU(LIGNE()=CELLULE("ligne");COLONNE()=CELLULE("colonne"))
m
0
l
a b L Programmation
14 Janvier 2010 11:35:01

Citation :
il se déclenche aussi sur le click de la souris
C'est tout ce que je voulais savoir ;) 
m
0
l
a b L Programmation
14 Janvier 2010 11:41:32

Si le montage de l'usine à gaz t'intéresse, on peut en discuter sur ce forum. Il y a juste que je te sens un peu ... bleu. Mais c'est en forgeant, qu'on devient forgeron.
m
0
l
15 Janvier 2010 09:59:02

Oui je ne peux pas nier que je suis débutant en la matière, mais bon celà ne me dérange pas d'apprendre.
Je voudrais bien en effet, en savoir davantage sur cette "usine à gaz".
Si tu peux me donner des liens ou des références afin que je puisse me documenter celà serai vraiment bien.
Merci
m
0
l
15 Janvier 2010 11:18:34

Bonjour,

Je serais aussi intéressé, juste par curiosité :bounce: 

m
0
l

Meilleure solution

a b L Programmation
18 Janvier 2010 17:52:11

Salut les ptits gars.

Aujourd'hui, je vous montre comment récupérer la cellule au dessus de laquelle le curseur de la souris se balade. Comme promis, c'est une usine à gaz !

  1. Option Explicit
Obligatoire, sinon je m'énerve :fou: 

-----------------------------


  1. Private Type POINTAPI
  2. X As Long
  3. Y As Long
  4. End Type
  5.  
  6. Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  7. Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
  8. Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
  9. Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
  10. Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
Excel/VBa ne sait pas le faire. Windows, si. Voici les fonctions C présentent dans la DLL %windir%\system32\user32.dll qui vont nous être utiles.

-----------------------------


  1. Const UneSeconde As Double = #12:00:01 AM#
  2. Dim Boucle As Boolean
Deux variables globales. C'est laid le VB :( 

  1. Private Function WindowText(hWnd As Long) As String
  2. Dim s As String
  3. Dim l As Long
  4. Dim r As Long
  5. s = Space$(150)
  6. l = 149
  7. r = GetWindowText(hWnd, s, l)
  8. WindowText = Mid(s, 1, r)
  9. End Function
Spa trivial de passer du C au VB. :o 
Cette fonction ne sert à rien, sinon à voir un peu mieux ce que nous faisons. Nous nous en servirons en debug pour voir le titre des fenêtres repérées.

-----------------------------


  1. Private Function CelluleSurvolee() As Range
  2. Dim hWndMain As Long
  3. Dim hWndDesk As Long
  4. Dim hWndSheet As Long
  5. Dim hWndCurs As Long
  6. Dim r As Long
  7. Dim p As POINTAPI
  8. Dim c As Range
  9.  
  10. Set CelluleSurvolee = Nothing
  11.  
  12. hWndMain = FindWindow("XLMAIN", Application.Caption)
  13. If hWndMain = 0 Then
  14. Debug.Print "Je n'ai trouvé la fenêtre principale d'Excel."
  15. Exit Function
  16. End If
  17. Debug.Print "J'ai trouvé la fenêtre principale d'Excel : [" & hWndMain & "] '" & WindowText(hWndMain) & "'"
  18.  
  19. hWndDesk = FindWindowEx(hWndMain, 0, "XLDESK", vbNullString)
  20. If hWndDesk = 0 Then
  21. Debug.Print "Je n'ai trouvé la fenêtre principale d'Excel."
  22. Exit Function
  23. End If
  24. Debug.Print "J'ai trouvé la fenêtre MDI d'Excel : [" & hWndDesk & "] '" & WindowText(hWndDesk) & "'"
  25.  
  26. hWndSheet = FindWindowEx(hWndDesk, 0, vbNullString, ActiveWindow.Caption)
  27. If hWndSheet = 0 Then
  28. Debug.Print "Je n'ai trouvé la fenêtre active d'Excel."
  29. Exit Function
  30. End If
  31. Debug.Print "J'ai trouvé la fenêtre active d'Excel : [" & hWndSheet & "] '" & WindowText(hWndSheet) & "'"
  32.  
  33. r = GetCursorPos(p)
  34. Debug.Print "La souris, par rapport à l'écran, est là : " & p.X & "x" & p.Y
  35.  
  36. hWndCurs = WindowFromPoint(p.X, p.Y)
  37. Debug.Print "La fenêtre sous la souris est : [" & hWndCurs & "] '" & WindowText(hWndCurs) & "'"
  38.  
  39. If hWndCurs <> hWndSheet Then
  40. Debug.Print "La fenêtre sous la souris n'est pas la feuille Excel."
  41. Exit Function
  42. End If
  43. Debug.Print "Ca tombe, bien, c'est la fenêtre qu'on cherchait à survoler"
  44.  
  45. Set c = ActiveWindow.RangeFromPoint(p.X, p.Y)
  46. If Not (c Is Nothing) Then
  47. Debug.Print "Voilà la cellule survolée : " & c.Address
  48. Set CelluleSurvolee = c
  49. End If
  50. End Function
Yeepeeeeeee! C'est dans cette fonction que l'on récupère la cellule survolée.

-----------------------------


  1. Private Sub Survol()
  2. Dim cell As Range
  3.  
  4. If Not Boucle Then Exit Sub
  5.  
  6. Set cell = CelluleSurvolee
  7. If cell Is Nothing Then Range("A1").Value = "" Else Range("A1").Value = cell.Address
  8. DoEvents
  9. Application.OnTime Now + UneSeconde, "Survol"
  10. End Sub
C'est là que l'on boucle et qu'on fait quelque chose de la cellule récupérée. A la fin, on réarme le timer.

-----------------------------


  1. Public Sub Survol_Demarre()
  2. Boucle = True
  3. Application.OnTime Now + UneSeconde, "Survol"
  4. End Sub
C'est ici qu'on initialise le timer et la boucle. C'est parti !


-----------------------------


  1. Public Sub Survol_Arrete()
  2. Boucle = False
  3. End Sub
Stop !

-----------------------------


Et voilà. :sol: 
Ne vous avais-je pas promis une usine à gaz ? :o 
partage
19 Janvier 2010 09:11:05

Effectivement je me rend compte de la complexité de la chose. Je vais donc me contenter du click sur la cellule mdrr. En revanche, cela m aspire a une autre question; peux tu m expliquer la nuance entre les diiferentes procedures private public type et les autres? Et sans vouloir chnger de sujet tu saurai ou je pourais avoir des info pour recuperer mon mot de passe oublié sur msn? Je te pose cette question au cas ou tu sois polyvalent sur la programmation
m
0
l
a b L Programmation
19 Janvier 2010 11:03:30

Désolé, je ne récupère pas les mots de passe MSN.
(Comment est-ce possible d'oublier son MDP ? :pfff:  )
(Comment est-ce possible de récupérer un MDP ? :o  )

Euh, par contre, côté polyvalence sur la programmation, je ne me plains pas. :sol: 

L'élément de syntaxe Private indique que la procédure, la fonction ou la variable déclarée n'est accessible qu'à d'autres procédures ou fonctions du module dans lequel elle a été déclarée. C'est une question de portée.
m
0
l
19 Janvier 2010 19:33:05

Merci encore pour tes réponses
C'est un mot de passe d'une adresse que je n'ai presque pas utilisé, donc pas de gravité.. heureusement pour moi lool
En revanche si tu connais des liens qui peuven m'expliquer... mais j'en doute mdr
m
0
l