RESOLU Cellule active colorée

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

Dernière édition:
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:
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
 
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
 
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
 
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:
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
 
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

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
 
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

Dernière édition:
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
 
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. 😎



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:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
14
Affichages
292
Réponses
9
Affichages
337
Retour