Faire une action avant de fermer un classeur

Salut a tous,

Quelqu'un saurait pourquoi ça ne fonctionne pas ? ça me met bien les lignes en non masquées mais ça ne veut pas coller les valeurs dans les cellules

Dim rclbk As Variant

Sub Workbook_Open()
rclbk = Range("B17:K20").Value
End Sub

Sub Workbook_BeforeClose(Cancel As Boolean)
Rows("17:20").EntireRow.Hidden = False
Range("B17:K20").Value = rclbk
End Sub

ça devrait fonctionner normalement, je pete un cable dessus depuis des heures ^^

Personne ne sait là vraiment ?

Bonjour,

Chez moi votre code fonctionne. Tout dépend comment est initialisé votre tableau. Si vous renseignez les valeurs B17:K20 après avoir ouvert le classeur votre variable est vide et écrase alors vos données.

Il est nécessaire de joindre un exemple de ce qui ne fonctionne pas, et de développer cette idée (contexte, manipulation, etc ...)

Cdlt,

Bonjour Anastasiya Bratko, Ergotamine,

Essayer avec les modifications suivantes :

- déclarer la variable rclbk en Public dans un module standard (pour le principe...)

- modifier la Sub Workbook_BeforeClose(... en :

Rows("17:20").EntireRow.Hidden = False
Range("B17").Resize(UBound(rclbk, 1), UBound(rclbk, 2)) = rclbk

A+

Edit :

et le mieux serait de préciser la feuille du range:

WorkSheets("LeNom").Rows("17:20").EntireRow.Hidden = False
WorkSheets("LeNom").Range("B17").Resize(UBound(rclbk, 1), UBound(rclbk, 2)) = rclbk

Pareil pour Workbook_open .

suivant la feuille sur laquelle on est lors de la fermeture du classeur (ou de son enregistrement) les instructions ne s'appliqueront pas forcément sur la feuille voulue...

Re A+

Bonjour @algoplus et @ergotamine,

Le code ne fonctionne toujours pas chez moi. En principe je veux que les valeurs que j'ai inscrites dans la range Range("B17:K20") restent les memes en ouverture et en fermeture. En gros je veux que toutes les modifications effectuées sur cette range soient annulés avant fermeture.

Quand je ferme mon fichier j'ai bien les lignes qui ne sont plus masquées mais les cellules restent vides, à croire que la valeur rclbk est nulle

et le mieux serait de préciser la feuille du range

Je n'ai qu'une feuille dans mon WB

Merci pour votre aide en tout cas

Bonjour,

Comme expliqué je pense que l'initialisation de votre tableau n'est pas correcte, en tout cas j'ai eu du mal à intégrer mes valeurs correctement pour que ça fonctionne avec les sécurités de protection des macros, etc ... Il a fallu que je désactive la macro de fermeture, remplisse ma range correctement, enregistre, réouvre mon fichier, réactive la macro de fermeture, enregistre et à ce moment là ça a fonctionné à l'ouverture et fermeture suivante.

Question peut être idiote mais ... Si vous ne souhaitez pas de modifications sur ces cellules il n'est pas plus simple de les protéger, soit par verrouillage de la feuille en ayant toutes les autres cellules non vérouillées, soit par VBA:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("B17:K20")) Is Nothing Then
    MsgBox "Interdiction de modifier cette plage", vbCritical
    Application.EnableEvents = False
    Application.Undo
    Application.EnableEvents = True
End If
End Sub

Cdlt,

14classeur15.xlsm (13.70 Ko)

Bonjour,

Essayez en remplaçant Dim rclbk As Variant par Dim rclbk() As Variant

Bonjour, au cas ou vous pouvez aussi stocker les infos de vos lignes dans un onglet caché.

Il sera alors bien plus facile de récupérer les valeurs pour les recopier avant fermeture de votre fichier.

@bibunesco Maintenant j'ai une erreur d'incompatibilité, je joins le fichier pour que ce soit plus parlant pour tout le monde

Oui j'y pensais de sotcker les infos en dur quelque part mais bon, ça m'étonne que ce que j'avais en tete ne soit pas possible, le cheminement est pourtant logique lol

Il semblerait que ça reste un mystère pour tout le monde.....

Bonjour,

Chez moi votre fichier fonctionne après avoir activé deux fois les macros dû au téléchargement puis à son enregistrement sur mon bureau.

Si je met 3 en F18 à la place de 800 alors quand je vais pour fermer le classeur, 800 réapparaît dans la cellule.

Donc je ne vois pas quand vous dites que ça ne fonctionne pas désolé ..

Cdlt,

Bonjour, Idem pour moi excel 2013 çà fonctionne aussi. les valeurs sont réinjectées à la fermeture.

Bonjour…

Avec un Array (tableau VBA), dans ThisWorkbook

Dim T 'Ici !
Sub Workbook_Open()
  T = [B17:K20].Value
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  [B17:K20] = T
End Sub
Rechercher des sujets similaires à "action fermer classeur"