OVH Cloud OVH Cloud

VBA, prtection de lignes f(date)

5 réponses
Avatar
Domi
Bonsoir à tous,

Je vous sollicites pas mal ces temps ci...
J'ai sur la feuille TEST un tableau avec en B10:B1000 des dates.
Je voudrais par macro protéger en écriture toutes les lignes (Entières) dont
la date en B est <= Date du jour +5
j'exécuterai ensuite cette macro à chaque ouverture, là je sais faire.
Quelqu'un pourrait-il m'indiquer la syntaxe à utiliser ?

Merci
Domi

5 réponses

Avatar
michdenis
Bonjour Domi,


Les procédures soumises ont pour effet de protéger toutes les lignes de la feuille 1 dont la teneur de la colonne B1:B100 a
une date supérieur à aujourdhui() +5

Attention dans le +5 , la date de la journée en cours est incluse. Si tu veux obtenir 5 jours excluant la journée en cours tu
dois additionner 6 jours dans la procédure.

La procédure prend pour acquis que toutes les informations contenues dans la colonne B1:B100 sont des dates. La procédure ne
possède pas aucune mesure de contrôle. Devrait-elle en avoir ?

La procédure va s'exécuter qu'une fois à l'ouverture du classeur... Il ne faut pas oublier d'adapter le nom de la feuille
dans la procédure pour celle de ton application.

Dans le thisworkbook de ton classeur : Copie ceci :

'--------------------
Private Sub Workbook_Open()
ProtegeLigne
End Sub
'--------------------

Dans un module standard

'---------------------------------------
Sub ProtegeLigne()

Dim Sel As Excel.XlEnableSelection
Dim Critère As Long
Dim Rg As Range, LeFormat As String

Critère = DateSerial(Year(Date), Month(Date), Day(Date) + 5)
Sel = xlUnlockedCells
With Worksheets("Feuil1") 'à déterminer Nom Feuille
.Unprotect "Toto"
Set Rg = .Range("B1:B100")
With Rg
.EntireRow.Locked = False
LeFormat = Rg(2).NumberFormat
Rg.NumberFormat = "General"
.AutoFilter Field:=1, Criteria1:=">" & Critère
.SpecialCells(xlCellTypeVisible).EntireRow.Locked = True
.AutoFilter
.NumberFormat = LeFormat
End With
.Protect "Toto", , , , True
.EnableSelection = Sel
End With
End Sub
'---------------------------------------


Salutations!




"Domi" a écrit dans le message de news:
Bonsoir à tous,

Je vous sollicites pas mal ces temps ci...
J'ai sur la feuille TEST un tableau avec en B10:B1000 des dates.
Je voudrais par macro protéger en écriture toutes les lignes (Entières) dont
la date en B est <= Date du jour +5
j'exécuterai ensuite cette macro à chaque ouverture, là je sais faire.
Quelqu'un pourrait-il m'indiquer la syntaxe à utiliser ?

Merci
Domi
Avatar
garnote
Je vous le dis, moi, ce sont des magiciens, ces gars-là !!!

Serge



'--------------------
Private Sub Workbook_Open()
ProtegeLigne
End Sub
'--------------------

Dans un module standard

'---------------------------------------
Sub ProtegeLigne()

Dim Sel As Excel.XlEnableSelection
Dim Critère As Long
Dim Rg As Range, LeFormat As String

Critère = DateSerial(Year(Date), Month(Date), Day(Date) + 5)
Sel = xlUnlockedCells
With Worksheets("Feuil1") 'à déterminer Nom Feuille
.Unprotect "Toto"
Set Rg = .Range("B1:B100")
With Rg
.EntireRow.Locked = False
LeFormat = Rg(2).NumberFormat
Rg.NumberFormat = "General"
.AutoFilter Field:=1, Criteria1:=">" & Critère
.SpecialCells(xlCellTypeVisible).EntireRow.Locked = True
.AutoFilter
.NumberFormat = LeFormat
End With
.Protect "Toto", , , , True
.EnableSelection = Sel
End With
End Sub
'---------------------------------------


Salutations!




"Domi" a écrit dans le message de
news:

Bonsoir à tous,

Je vous sollicites pas mal ces temps ci...
J'ai sur la feuille TEST un tableau avec en B10:B1000 des dates.
Je voudrais par macro protéger en écriture toutes les lignes (Entières)
dont

la date en B est <= Date du jour +5
j'exécuterai ensuite cette macro à chaque ouverture, là je sais faire.
Quelqu'un pourrait-il m'indiquer la syntaxe à utiliser ?

Merci
Domi





Avatar
michdenis
Légère correction apportée :

'---------------------------------
Sub ProtegeLigne()

Dim Sel As Excel.XlEnableSelection
Dim Critère As Long
Dim Rg As Range, LeFormat As String
Application.ScreenUpdating = False
Critère = DateSerial(Year(Date), Month(Date), Day(Date) + 6)
Sel = xlUnlockedCells
With Worksheets("Feuil1")
.Unprotect "Toto"
Set Rg = .Range("B1:B100")
With Rg
.EntireRow.Locked = False
LeFormat = .Item(2).NumberFormat
.NumberFormat = "General"
.AutoFilter Field:=1, Criteria1:=">" & Critère
.SpecialCells(xlCellTypeVisible).EntireRow.Locked = True
.AutoFilter
.NumberFormat = LeFormat
End With
.Protect "Toto", , , , True
.EnableSelection = Sel
End With
Set Rg = Nothing
End Sub
'---------------------------------


Salutations!


"michdenis" a écrit dans le message de news:
Bonjour Domi,


Les procédures soumises ont pour effet de protéger toutes les lignes de la feuille 1 dont la teneur de la colonne B1:B100 a
une date supérieur à aujourdhui() +5

Attention dans le +5 , la date de la journée en cours est incluse. Si tu veux obtenir 5 jours excluant la journée en cours tu
dois additionner 6 jours dans la procédure.

La procédure prend pour acquis que toutes les informations contenues dans la colonne B1:B100 sont des dates. La procédure ne
possède pas aucune mesure de contrôle. Devrait-elle en avoir ?

La procédure va s'exécuter qu'une fois à l'ouverture du classeur... Il ne faut pas oublier d'adapter le nom de la feuille
dans la procédure pour celle de ton application.

Dans le thisworkbook de ton classeur : Copie ceci :

'--------------------
Private Sub Workbook_Open()
ProtegeLigne
End Sub
'--------------------

Dans un module standard

'---------------------------------------
Sub ProtegeLigne()

Dim Sel As Excel.XlEnableSelection
Dim Critère As Long
Dim Rg As Range, LeFormat As String

Critère = DateSerial(Year(Date), Month(Date), Day(Date) + 5)
Sel = xlUnlockedCells
With Worksheets("Feuil1") 'à déterminer Nom Feuille
.Unprotect "Toto"
Set Rg = .Range("B1:B100")
With Rg
.EntireRow.Locked = False
LeFormat = Rg(2).NumberFormat
Rg.NumberFormat = "General"
.AutoFilter Field:=1, Criteria1:=">" & Critère
.SpecialCells(xlCellTypeVisible).EntireRow.Locked = True
.AutoFilter
.NumberFormat = LeFormat
End With
.Protect "Toto", , , , True
.EnableSelection = Sel
End With
End Sub
'---------------------------------------


Salutations!




"Domi" a écrit dans le message de news:
Bonsoir à tous,

Je vous sollicites pas mal ces temps ci...
J'ai sur la feuille TEST un tableau avec en B10:B1000 des dates.
Je voudrais par macro protéger en écriture toutes les lignes (Entières) dont
la date en B est <= Date du jour +5
j'exécuterai ensuite cette macro à chaque ouverture, là je sais faire.
Quelqu'un pourrait-il m'indiquer la syntaxe à utiliser ?

Merci
Domi
Avatar
michdenis
Et bien merci garnote....

C'est quand même plus terre à terre que certaines formules mathématiques !!!

;-))


Salutations!


"garnote" a écrit dans le message de news:DAZOa.26212$
Je vous le dis, moi, ce sont des magiciens, ces gars-là !!!

Serge



'--------------------
Private Sub Workbook_Open()
ProtegeLigne
End Sub
'--------------------

Dans un module standard

'---------------------------------------
Sub ProtegeLigne()

Dim Sel As Excel.XlEnableSelection
Dim Critère As Long
Dim Rg As Range, LeFormat As String

Critère = DateSerial(Year(Date), Month(Date), Day(Date) + 5)
Sel = xlUnlockedCells
With Worksheets("Feuil1") 'à déterminer Nom Feuille
.Unprotect "Toto"
Set Rg = .Range("B1:B100")
With Rg
.EntireRow.Locked = False
LeFormat = Rg(2).NumberFormat
Rg.NumberFormat = "General"
.AutoFilter Field:=1, Criteria1:=">" & Critère
.SpecialCells(xlCellTypeVisible).EntireRow.Locked = True
.AutoFilter
.NumberFormat = LeFormat
End With
.Protect "Toto", , , , True
.EnableSelection = Sel
End With
End Sub
'---------------------------------------


Salutations!




"Domi" a écrit dans le message de
news:

Bonsoir à tous,

Je vous sollicites pas mal ces temps ci...
J'ai sur la feuille TEST un tableau avec en B10:B1000 des dates.
Je voudrais par macro protéger en écriture toutes les lignes (Entières)
dont

la date en B est <= Date du jour +5
j'exécuterai ensuite cette macro à chaque ouverture, là je sais faire.
Quelqu'un pourrait-il m'indiquer la syntaxe à utiliser ?

Merci
Domi





Avatar
AV
Une variante

Dans le ThisWorkbook
Private Sub Workbook_Open()
ProtegeLigne
End Sub

Dans un module ordinaire
Sub ProtectDat()
Application.ScreenUpdating = False
With Sheets("Feuil1")
.Unprotect
With .[B9:B1000]
.EntireRow.Locked = False
.AutoFilter Field:=1, Criteria1:="<=" & Date * 1 - 5
.SpecialCells(xlCellTypeVisible).EntireRow.Locked = True
.AutoFilter
End With
.Protect
End With
End Sub

PS comme tu parles de la plage B10:B100, j'ai supposé une étiquette de col en B9

AV

"Domi" a écrit dans le message news:

Bonsoir à tous,

Je vous sollicites pas mal ces temps ci...
J'ai sur la feuille TEST un tableau avec en B10:B1000 des dates.
Je voudrais par macro protéger en écriture toutes les lignes (Entières) dont
la date en B est <= Date du jour +5
j'exécuterai ensuite cette macro à chaque ouverture, là je sais faire.
Quelqu'un pourrait-il m'indiquer la syntaxe à utiliser ?

Merci
Domi