RESOLU Cellule active colorée

olivepao

XLDnaute Occasionnel
Bonjour à tous
J'ai créé une feuille (modèle xltm) formulaire ou je mets en temporairement en évidence la cellule active (ici en rouge).
Les cellules changent de couleur quand je clique dessus ou passe d'une cellule à l'autre avec TAB.
Le problème survient lorsque je veux enregistrer ma feuille, la cellule active ne reprend pas sa couleur d'origine et l'enregistrement plante car la variable est considérée comme vide.

Les variables sont déclarées Public dans Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) et leurs valeurs ne sont pas restituées dans Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean).


Les variables sont testées par msgbox.


J'ai cherché, en vain, comment conserver la valeur des varaibles. Je vous remercie de votre préciause aide.




' Variables
Public AncienneCouleurCellule As Integer
Public AncienneAdresseCellule As Range



Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
'==========

' La cellule active est mise en évidence (ici, avec la couleur rouge)

' Ne fonctionne que si les cellules sont colorisées avec les 56 couleurs de base d'Excel.

' Procédure (1) si la feuille est protégée (sinon plantage
Application.ScreenUpdating = False
ActiveSheet.Unprotect


' Procédure principale
If Not AncienneAdresseCellule Is Nothing Then
AncienneAdresseCellule.Interior.ColorIndex = AncienneCouleurCellule
End If


AncienneCouleurCellule = Target.Interior.ColorIndex

Target.Interior.ColorIndex = 3

Set AncienneAdresseCellule = Target


' Test
MsgBox "La couleur d'origine est la couleur N° " & AncienneCouleurCellule



' Procédure (2) si la feuille est protégée (sinon plantage) - 2
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Pushed = True
Application.ScreenUpdating = True

'==========

End Sub

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

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)


If ActiveCell.Interior.ColorIndex = 3 Then


' Test
MsgBox "La couleur d'origine est la couleur N° " & AncienneCouleurCellule


ActiveCell.Interior.ColorIndex = AncienneCouleurCellule


End If
End Sub


Je ne sais pas si le ma feuille sera jointe au message car étant en réseau les pièces jointes ne sont pas tjs prises en compte. Si c'est le cas je la ferai parvenir plus tard.
 

Pièces jointes

  • Couleurs_Evidence.xlsm
    18.1 KB · Affichages: 64
Dernière édition:

Paf

XLDnaute Barbatruc
Re : Conservation de la valeur d'une variable.

bonjour,
pour être visible de toute la Worksheet, les variables doivent être déclarées au niveau Worksheet.

edit: pour être visible de l'ensemble des feuilles , déclarer au niveau This workbook ou encore dans un module.

Bonne suite
 
Dernière édition:

olivepao

XLDnaute Occasionnel
Re : Conservation de la valeur d'une variable.

Bonjour,

Je viens de suivre ton conseil, j'ai déclaré les variable dans Workbook et lorsque je me positionne dans une cellule j'ai un plantage.

Erreur d'exécution 424 - Objez requis

sur la ligne :

If Not AncienneAdresseCellule Is Nothing Then

Merci quand même pourta participation
 

olivepao

XLDnaute Occasionnel
Re : Conservation de la valeur d'une variable.

Re,

J'ai déclaré mes variables dans une module mais j'ai un plantage dans
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Merci si toi ou qqun d'autre peut me donner un petit coup de main
 

laetitia90

XLDnaute Barbatruc
Re : Conservation de la valeur d'une variable.

bonjour tous
tu peus faire cela... pas simplifier ton code

Code:
Public AncienneCouleurCellule As Integer
Public AncienneAdresseCellule As Range
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
If Not Intersect(Target, [a1:g9]) Is Nothing And Target.Count = 1 Then
ActiveSheet.Unprotect
If Not AncienneAdresseCellule Is Nothing Then
   AncienneAdresseCellule.Interior.ColorIndex = AncienneCouleurCellule
End If
 AncienneCouleurCellule = Target.Interior.ColorIndex
Target.Interior.ColorIndex = 3
Set AncienneAdresseCellule = Target
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Pushed = True
End If
End Sub

Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Cells(9, 1).Select
End Sub
 

olivepao

XLDnaute Occasionnel
Re : Conservation de la valeur d'une variable.

Hello

Merci, effectivement ça fonctionne très bien.

Le seul petit hc est que si ma feuille est grande, je me retrouve tout en bas de la feuille lorsque je fais une sauvegarde en cours de travail.

Je dois par conséquent remonter manuellement dans la feuille et rechercher la cellule que j'ai abandonné avant ma sauvegarde.


De plus si j'ouvre ma feuille après l'avoir quittée, la cellule active est celle tout en bas . . .

A l'ouverture on peut faire

Code:
Private Sub Workbook_Open()
Cells(1, 1).Select
End Sub

:)
 
Dernière édition:

olivepao

XLDnaute Occasionnel
Re : Conservation de la valeur d'une variable.

Re tout le monde

Je tourne en rond et je ne trouve tjs pas de soluce pour sauver ma feuille sur la cellule active sans que celle-ci prenne la couleur qui doit la mettre temporairement en évidence.

A+ et merci à tous ceux qui participe (participeront) à ma recherche
 

laetitia90

XLDnaute Barbatruc
Re : Conservation de la valeur d'une variable.

re
on pourait faire comme cela

on reste sur cell(9,1) on supprime le code dans sauvegarde

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
 If Not Intersect(Target, [a1:g8]) Is Nothing And Target.Count = 1 Then ' ajouter pour definir la plage
 ActiveSheet.Unprotect
 If Not AncienneAdresseCellule Is Nothing Then
   AncienneAdresseCellule.Interior.ColorIndex = AncienneCouleurCellule
  End If
 AncienneCouleurCellule = Target.Interior.ColorIndex
 Target.Interior.ColorIndex = 3
 Set AncienneAdresseCellule = Target
 Cells(9, 1) = AncienneCouleurCellule 'ajouter
 MsgBox "La couleur d'origine est la couleur N° " & AncienneCouleurCellule
 ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
 Pushed = True
 End If
End Sub

Code:
Private Sub Workbook_Open()
 ActiveSheet.Unprotect
 ActiveCell.Interior.ColorIndex = Cells(9, 1).Value
End Sub
 

Pièces jointes

  • Couleurs_Evidence (1).xlsm
    17.9 KB · Affichages: 42

olivepao

XLDnaute Occasionnel
Re : Conservation de la valeur d'une variable.

Merci laetitia90

Ta première soluce était meilleure que ta nouvelle proposition.

En effet, à l'ouverture de la feuille la cellule A9 à la valeur d'une ancienne couleur et je dois appuyer 4x sur la touche TAB pour me retrouver dans la cellule A2 car au départ je suis positionné su la cellule A4.

J'ai modifié ta feuille pour que la cellule d'acceuil soit la A1 mais à l'ouverture de la feuille, la couleur de la cellule est blanche et conserve cette couleur blanche sans revenir au noir.

Je continue de chercher. Il serait intéressant d'avoir l'aide d'autres excelnautes
 

olivepao

XLDnaute Occasionnel
Re : Conservation de la valeur d'une variable.

hello

J'ai trouvé un début de soluce en reprenant mon code.

Le problème car il y a un problème (autrement se serait plus simple . . .) est que ça fonctionne lorsque l'on procède à l'enregistrement de la feuille mais au moment où on quitte la feuille, qu'on la sauve ou pas, la cellule précédente garde la couleur rouge de mise en évidence.

J'ai reproduit le code de Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) dans Private Sub Workbook_BeforeClose(Cancel As Boolean) mais cela ne fonctionne pas !

Dans une module :

Code:
' Variables
Public AncienneCouleurCellule As Integer
Public AncienneAdresseCellule As Range


Dans la feuille

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
'==========

' La cellule active est mise en évidence (ici, avec la couleur rouge)

' Ne fonctionne que si les cellules sont colorisées avec les 56 couleurs de base d'Excel.

' Procédure (1) si la feuille est protégée (sinon plantage
Application.ScreenUpdating = False
ActiveSheet.Unprotect


' Procédure principale
If Not AncienneAdresseCellule Is Nothing Then
    AncienneAdresseCellule.Interior.ColorIndex = AncienneCouleurCellule
End If
    
AncienneCouleurCellule = Target.Interior.ColorIndex

Target.Interior.ColorIndex = 3

Set AncienneAdresseCellule = Target

' Procédure (2) si la feuille est protégée (sinon plantage) - 2
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Pushed = True
Application.ScreenUpdating = True

'==========

End Sub

Dans le classeur

Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

If ActiveCell.Interior.ColorIndex = 3 Then
 
    Set AncienneAdresseCellule = ActiveCell

End If
   
End Sub


Private Sub Workbook_BeforeClose(Cancel As Boolean)

If ActiveCell.Interior.ColorIndex = 3 Then
 
    Set AncienneAdresseCellule = ActiveCell

End If

End Sub


Merci pour votre aide

A++
 

Pièces jointes

  • Couleurs_Evidence_Modif1.xlsm
    19.4 KB · Affichages: 37
Dernière édition:

olivepao

XLDnaute Occasionnel
Re : Conservation de la valeur d'une variable.

Re à tous

Je sais, il est tard mais mon problème me donne des insomnies :) . . .

Voilà une soluce pour le Private Sub Workbook_BeforeClose(Cancel As Boolean)

La soluce fontcionne mais n'est pas très élégante car elle supprime la boîte de dialogue de fermeture


Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)

ActiveWorkbook.Close savechanges:=False
    
End Sub


Si quelqu'un a mieux, je suis preneur !

Et maintenant dodo
 

laurent950

XLDnaute Accro
Re : Conservation de la valeur d'une variable.

Bonsoir,

Il est un peut tard ce soir mais le sujet est intéressant, j'ai trouvé la solution. je vous joint le fichier, et si cela est juste peux être que je vais avoir de nombreux Like ;-))

Laurent
 

Pièces jointes

  • Couleurs_Vrai_Evidence.xlsm
    19.2 KB · Affichages: 48
Dernière édition:

olivepao

XLDnaute Occasionnel
Re : Conservation de la valeur d'une variable.

Hello laurent950

Effectivement ta soluce fonctionne nickel.

Les like, tu les mérites amplement.

Il semble que plus l'heure avance dans la nuit, plus les solutions sont trouvées. :cool:



Je rencontre un seul petit problème, si je rajoute d'autres macros et après avoir sauvé ma feuille, Excel est figé et je ne peut sortir qu'en le tuant avec le gestionnaire de tâches. Mais après la feuille refonctionne nickel tant que je ne rentre pas dans Visual Basic.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 489
Messages
2 088 852
Membres
103 975
dernier inscrit
denry