Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Feuille et fin de mois

Z

ZeH

Guest
Bonjour à tous,

Est-il possible en VBA d'empêcher la modification d'une feuille lors d'une échéance?

Par ex: le 31 janvier 2005 à minuit, la feuille devient inaccessible en écriture.

Merci par avance.

ZeH
 
R

Rai

Guest
Bonjour à toi,

On peut passer par le VBA pour ce genre de choses.
Le plus simple est de tester la date à l'ouverture du classeur.

Private Sub Workbook_Open()
Datelimite = CDate("31/01/2005")
If Date > Datelimite Then
Sheets("MaFeuille").Protect Password:="OneTwoThree"
End If
End Sub

Une contrainte : si l'utilisateur laisse le fichier ouvert du 31/01 au 01/02 ... le 01/02 il pourra encore saisir des données.
Mais bon, as-tu des utilisateurs qui travaillent à minuit ?
Si oui, tu peux toujours utiliser cette procédure sur l'évennement de changement dans la feuille concernée.

Bonne journée

Rai
 
R

Rai

Guest
Salut,

Je t'ai mis un fichier en PJ.

La feuille 'Test' est concernée par l'échéance.

Pour visualiser le code, il faut aller dans l'éditeur VBE et double-cliquer sur ThisWorkbook.
J'ai mis la macro sur l'évennement change.
Comme ça, même si tes utilisateurs travaillent dessus à minuit ... le vérouillage se fait automatiquement dès lors qu'ils entrent une donnée n'importe où dans le classeur.

Ci-dessous le code :
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Feuille$ = "Test"
'Placer ici le nom de la feuille concernée

Echeance = CDate("31/01/2005")
'Placer ici la date concernée, au format jj/mm/aaaa

If Date > Echeance Then
Sheets(Feuille).Protect Password:="OneTwoThree"
End If
End Sub


Bonne suite

Rai
 

Pièces jointes

  • echeance.zip
    6.9 KB · Affichages: 25
  • echeance.zip
    6.9 KB · Affichages: 26
  • echeance.zip
    6.9 KB · Affichages: 27
Z

ZeH

Guest
Merci bien Rai, cela fonctionne à merveille.

Une autre question si tu le permets, est-ce possible d'autoriser une feuille en écriture uniquement entre deux dates.

Ex:

Autoriser l'écriture de la feuille test uniquement du 1er janvier 2005 au 31 janvier 2005?

Merci pour ton aide.
 
R

Rai

Guest
Salut,

Bien sûr que c'est possible.
Dans ce cas, si tu penses à un mois plutôt qu'à 2 dates (à en juger ton exemple), j'utiliserais la fonction VBA Month() équivalent de la fonction MOIS d'Excel. Et idem avec Year pour tester l'année (à moins que tu ne veuilles avoir la même feuille valide TOUS les mois de janvier.

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Feuille$ = "Test"
'Placer ici le nom de la feuille concernée

Echeance = CDate("01/01/2005")
'Placer ici la date concernée, au format jj/mm/aaaa

If Month(Date) = Month(Echeance) and Year(Date)=Year(Echeance)Then
Sheets(Feuille).Unprotect Password:="OneTwoThree"
else
Sheets(Feuille).Protect Password:="OneTwoThree"
End If
End Sub
 
Z

ZeH

Guest
Hello Rai,

J'ai un message d'erreur "erreur de compilation, variable non définie"

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Feuille$ = "bilan janvier"
'Placer ici le nom de la feuille concernée

Echeance = CDate("01/01/2005")
'Placer ici la date concernée, au format jj/mm/aaaa

If Month(Date) = Month(Echeance) And Year(Date) = Year(Echeance) Then
Sheets(Feuille).Unprotect Password:="OneTwoThree"
Else
Sheets(Feuille).Protect Password:="OneTwoThree"
End If
End Sub

Si tu as la solution, merci bien

ZeH
 
R

Rai

Guest
Salut,

Je viens de tester sur mon PC : Windows XP et Excel 2003 (XP), ça tourne impecc'

Peux-tu mettre ton ficher en PJ ?
Pas besoin des données chiffrées qu'il contient.
2 feuilles (dont 'bilan janvier') & les macros suffiront.
Bien entendu pour 'bilan janvier' tu peux aussi virer ou changer les chiffres ou textes.

J'regarde ça dans la foulée

Rai
 
R

Rai

Guest
re-,

Grrrrrrrrrr, des fois je me mordrais moi-même, tellement j'oublie des évidences.

Merci pour ton fichier, il m'a ouvert les yeux.


2 solutions :
Soit tu enlèves le 'Option Explicit' du début de ton code

Soit tu déclares TOUTES tes variables AVANT de les utiliser
Dans le cas présent :
Dim Feuille As String
Dim Echeance As Date

------

Si tu ne veux pas t'encombrer avec ces déclarations, dans l'éditeur VBE :
Menu Outils/Options et décoche la case 'Déclaration des variables obligatoire"


Comme quoi, des fois ...

A bientôt

Rai
 

Discussions similaires

Réponses
8
Affichages
663
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…