OVH Cloud OVH Cloud

Interdiction sur plusieurs feuilles

6 réponses
Avatar
Hua Seng
Bjrs tous le monde.

Je viens vers vous pr 1 question. Comment interdire par vba sur plusieurs
feuilles ( 5 par exemple, sur la même colonne, en occurence B:B ), le format
de date style jj.mm.aa ou jj.mm.aaaa.

J'ai fait par l' enregistreur de macro sous excel pro et j'obtiens le code
suivant :

Sub Interdiction()
Range("B2:B26").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateDate, AlertStyle:=xlValidAlertStop, Operator:=
_
xlBetween, Formula1:="1/1/1900", Formula2:="12/31/3000"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End Sub

De là, j'ai essayé de déclarer qu'il y a 5 feuilles ds mon classeur et que
la colonne B:B auront pr format de date jj/mm/aa ou jj/mm/aaaa, tjs par
l'enregistreur de macro mais j'arrive pas, qq'1 parmi vous a une idée.

D'avance, merci pr vos guides

Seng

6 réponses

Avatar
michdenis
Bonjour Hua Seng,

Copie cette procédure dans le ThisWorkbook de ton classeur :

Dans cette ligne de code, remplace les noms des feuilles par celles de ton application.
Arr = Array("Feuil1", "Feuil2", "Feuil3", "Feuil4", "Feuil5")

Voici le format retenu pour l'affichage de tes données en Colonne B:B, libre à toi d'en choisir un autre.
rg.NumberFormat = "dd/mm/yy"


'-------------------------------
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

Dim Arr(), Rg As Range
Arr = Array("Feuil1", "Feuil2", "Feuil3")

If Not IsError(Application.Match(Sh.Name, Arr, 0)) Then
Set rg = Intersect(Target, Range("B:B"))
If Not rg Is Nothing Then
Application.CommandBars(1).Controls(5).Controls(1).Enabled = False
rg.NumberFormat = "dd/mm/yy"
Else
Application.CommandBars(1).Controls(5).Controls(1).Enabled = True
End If
End If
Set Rg = Nothing
End Sub
'-------------------------------


Salutations!



"Hua Seng" a écrit dans le message de news:
Bjrs tous le monde.

Je viens vers vous pr 1 question. Comment interdire par vba sur plusieurs
feuilles ( 5 par exemple, sur la même colonne, en occurence B:B ), le format
de date style jj.mm.aa ou jj.mm.aaaa.

J'ai fait par l' enregistreur de macro sous excel pro et j'obtiens le code
suivant :

Sub Interdiction()
Range("B2:B26").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateDate, AlertStyle:=xlValidAlertStop, Operator: _
xlBetween, Formula1:="1/1/1900", Formula2:="12/31/3000"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End Sub

De là, j'ai essayé de déclarer qu'il y a 5 feuilles ds mon classeur et que
la colonne B:B auront pr format de date jj/mm/aa ou jj/mm/aaaa, tjs par
l'enregistreur de macro mais j'arrive pas, qq'1 parmi vous a une idée.

D'avance, merci pr vos guides

Seng
Avatar
Hua Seng
Bonsoir,

Merci d'avoir répondu à ma question.
Je vais tester le macro demain.

seng
"michdenis" a écrit dans le message de
news:
Bonjour Hua Seng,

Copie cette procédure dans le ThisWorkbook de ton classeur :

Dans cette ligne de code, remplace les noms des feuilles par celles de ton
application.

Arr = Array("Feuil1", "Feuil2", "Feuil3", "Feuil4", "Feuil5")

Voici le format retenu pour l'affichage de tes données en Colonne B:B,
libre à toi d'en choisir un autre.

rg.NumberFormat = "dd/mm/yy"


'-------------------------------
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target
As Range)


Dim Arr(), Rg As Range
Arr = Array("Feuil1", "Feuil2", "Feuil3")

If Not IsError(Application.Match(Sh.Name, Arr, 0)) Then
Set rg = Intersect(Target, Range("B:B"))
If Not rg Is Nothing Then
Application.CommandBars(1).Controls(5).Controls(1).Enabled = False
rg.NumberFormat = "dd/mm/yy"
Else
Application.CommandBars(1).Controls(5).Controls(1).Enabled = True
End If
End If
Set Rg = Nothing
End Sub
'-------------------------------


Salutations!



"Hua Seng" a écrit dans le message de
news:

Bjrs tous le monde.

Je viens vers vous pr 1 question. Comment interdire par vba sur plusieurs
feuilles ( 5 par exemple, sur la même colonne, en occurence B:B ), le
format

de date style jj.mm.aa ou jj.mm.aaaa.

J'ai fait par l' enregistreur de macro sous excel pro et j'obtiens le code
suivant :

Sub Interdiction()
Range("B2:B26").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateDate, AlertStyle:=xlValidAlertStop,
Operator: > _

xlBetween, Formula1:="1/1/1900", Formula2:="12/31/3000"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End Sub

De là, j'ai essayé de déclarer qu'il y a 5 feuilles ds mon classeur et que
la colonne B:B auront pr format de date jj/mm/aa ou jj/mm/aaaa, tjs par
l'enregistreur de macro mais j'arrive pas, qq'1 parmi vous a une idée.

D'avance, merci pr vos guides

Seng





Avatar
Hua Seng
Bonsoir à tous,

Je reviens vers vous concernant mon post ci-dessous. j'ai essayé le code que
m'a donné Denis ou Mich ( excuse- moi je ne sais pas lequel est vraiement
son prénom ) çà n'a pas fonctionné du tous. Est ce qq'1 peut m' aider +.

Merci d'avance.

seng
"michdenis" a écrit dans le message de
news:
Bonjour Hua Seng,

Copie cette procédure dans le ThisWorkbook de ton classeur :

Dans cette ligne de code, remplace les noms des feuilles par celles de ton
application.

Arr = Array("Feuil1", "Feuil2", "Feuil3", "Feuil4", "Feuil5")

Voici le format retenu pour l'affichage de tes données en Colonne B:B,
libre à toi d'en choisir un autre.

rg.NumberFormat = "dd/mm/yy"


'-------------------------------
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target
As Range)


Dim Arr(), Rg As Range
Arr = Array("Feuil1", "Feuil2", "Feuil3")

If Not IsError(Application.Match(Sh.Name, Arr, 0)) Then
Set rg = Intersect(Target, Range("B:B"))
If Not rg Is Nothing Then
Application.CommandBars(1).Controls(5).Controls(1).Enabled = False
rg.NumberFormat = "dd/mm/yy"
Else
Application.CommandBars(1).Controls(5).Controls(1).Enabled = True
End If
End If
Set Rg = Nothing
End Sub
'-------------------------------


Salutations!



"Hua Seng" a écrit dans le message de
news:

Bjrs tous le monde.

Je viens vers vous pr 1 question. Comment interdire par vba sur plusieurs
feuilles ( 5 par exemple, sur la même colonne, en occurence B:B ), le
format

de date style jj.mm.aa ou jj.mm.aaaa.

J'ai fait par l' enregistreur de macro sous excel pro et j'obtiens le code
suivant :

Sub Interdiction()
Range("B2:B26").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateDate, AlertStyle:=xlValidAlertStop,
Operator: > _

xlBetween, Formula1:="1/1/1900", Formula2:="12/31/3000"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End Sub

De là, j'ai essayé de déclarer qu'il y a 5 feuilles ds mon classeur et que
les utilisateurs peuvent utiliser seulement >sur la colonne B:B que le

format de date jj/mm/aa ou jj/mm/aaaa, tjrs par
l'enregistreur de macro mais j'arrive pas, qq'1 parmi vous a une idée.

D'avance, merci pr vos guides

Seng





Avatar
michdenis
Bonjour Hua Seng,

Désolé de te contredire, moi je prétends qu'elle fonctionne très bien selon les exigences de la question initiale. Je
t'ai fait parvenir un fichier exemple.

Si tu as un problème avec l'exemple du fichier, il faut préciser ce qui ne fonctionne pas ... de dire que cela ne marche
pas comme tu voudrais, c'est un peu court comme explication !


Salutations!


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

Je reviens vers vous concernant mon post ci-dessous. j'ai essayé le code que
m'a donné Denis ou Mich ( excuse- moi je ne sais pas lequel est vraiement
son prénom ) çà n'a pas fonctionné du tous. Est ce qq'1 peut m' aider +.

Merci d'avance.

seng
"michdenis" a écrit dans le message de
news:
Bonjour Hua Seng,

Copie cette procédure dans le ThisWorkbook de ton classeur :

Dans cette ligne de code, remplace les noms des feuilles par celles de ton
application.

Arr = Array("Feuil1", "Feuil2", "Feuil3", "Feuil4", "Feuil5")

Voici le format retenu pour l'affichage de tes données en Colonne B:B,
libre à toi d'en choisir un autre.

rg.NumberFormat = "dd/mm/yy"


'-------------------------------
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target
As Range)


Dim Arr(), Rg As Range
Arr = Array("Feuil1", "Feuil2", "Feuil3")

If Not IsError(Application.Match(Sh.Name, Arr, 0)) Then
Set rg = Intersect(Target, Range("B:B"))
If Not rg Is Nothing Then
Application.CommandBars(1).Controls(5).Controls(1).Enabled = False
rg.NumberFormat = "dd/mm/yy"
Else
Application.CommandBars(1).Controls(5).Controls(1).Enabled = True
End If
End If
Set Rg = Nothing
End Sub
'-------------------------------


Salutations!



"Hua Seng" a écrit dans le message de
news:

Bjrs tous le monde.

Je viens vers vous pr 1 question. Comment interdire par vba sur plusieurs
feuilles ( 5 par exemple, sur la même colonne, en occurence B:B ), le
format

de date style jj.mm.aa ou jj.mm.aaaa.

J'ai fait par l' enregistreur de macro sous excel pro et j'obtiens le code
suivant :

Sub Interdiction()
Range("B2:B26").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateDate, AlertStyle:=xlValidAlertStop,
Operator: > _

xlBetween, Formula1:="1/1/1900", Formula2:="12/31/3000"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End Sub

De là, j'ai essayé de déclarer qu'il y a 5 feuilles ds mon classeur et que
les utilisateurs peuvent utiliser seulement >sur la colonne B:B que le

format de date jj/mm/aa ou jj/mm/aaaa, tjrs par
l'enregistreur de macro mais j'arrive pas, qq'1 parmi vous a une idée.

D'avance, merci pr vos guides

Seng





Avatar
Hua Seng
Bonsoir,

Excusez moi, je me suis mal exprimé, et peut être aussi dans mon post. En
fait, je veux bloquer la colonne B, aux utilisateurs, pour qu'ils utilisent
seulement les formats jj/mm/aa et/ou jj/mm/aaaa ( 01/01/2004 ou 31/01/04 ),
s'ils écrivent 01.01.2004 ou 01.01.04, un avertissement visuel dit
"ATTENTION FORMAT NON AUTORISE".

Le macro que j'ai fait correspond aux commandes d' excel : Donnés =>
Validation, Option, Critére de validation, date, Données comprise 01/01/1999
et 31/12/3000"

Encore 1 fois, merci et excusez moi.

seng

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

Je reviens vers vous concernant mon post ci-dessous. j'ai essayé le code
que

m'a donné Denis ou Mich ( excuse- moi je ne sais pas lequel est vraiement
son prénom ) çà n'a pas fonctionné du tous. Est ce qq'1 peut m' aider +.

Merci d'avance.

seng
"michdenis" a écrit dans le message de
news:
Bonjour Hua Seng,

Copie cette procédure dans le ThisWorkbook de ton classeur :

Dans cette ligne de code, remplace les noms des feuilles par celles de
ton


application.
Arr = Array("Feuil1", "Feuil2", "Feuil3", "Feuil4", "Feuil5")

Voici le format retenu pour l'affichage de tes données en Colonne B:B,
libre à toi d'en choisir un autre.

rg.NumberFormat = "dd/mm/yy"


'-------------------------------
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal
Target


As Range)

Dim Arr(), Rg As Range
Arr = Array("Feuil1", "Feuil2", "Feuil3")

If Not IsError(Application.Match(Sh.Name, Arr, 0)) Then
Set rg = Intersect(Target, Range("B:B"))
If Not rg Is Nothing Then
Application.CommandBars(1).Controls(5).Controls(1).Enabled False
rg.NumberFormat = "dd/mm/yy"
Else
Application.CommandBars(1).Controls(5).Controls(1).Enabled True
End If
End If
Set Rg = Nothing
End Sub
'-------------------------------


Salutations!



"Hua Seng" a écrit dans le message de
news:

Bjrs tous le monde.

Je viens vers vous pr 1 question. Comment interdire par vba sur
plusieurs


feuilles ( 5 par exemple, sur la même colonne, en occurence B:B ), le
format

de date style jj.mm.aa ou jj.mm.aaaa.

J'ai fait par l' enregistreur de macro sous excel pro et j'obtiens le
code


suivant :

Sub Interdiction()
Range("B2:B26").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateDate, AlertStyle:=xlValidAlertStop,
Operator: > > _

xlBetween, Formula1:="1/1/1900", Formula2:="12/31/3000"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End Sub

De là, j'ai essayé de déclarer qu'il y a 5 feuilles ds mon classeur et
que


les utilisateurs peuvent utiliser seulement >sur la colonne B:B que le
format de date jj/mm/aa ou jj/mm/aaaa, tjrs par
l'enregistreur de macro mais j'arrive pas, qq'1 parmi vous a une idée.

D'avance, merci pr vos guides

Seng









Avatar
Frédéric Sigonneau
Bonsoir,

Une solution possible, si j'ai bien compris (et si tu utilises Excel 2000 ou +
récent).

Dans un module standard de ton classeur :

'================================ Function DateCorrecte(D) As Boolean
Dim Arr
Arr = Split(D, "/")
If UBound(Arr) <> 2 Then Exit Function
If Not IsDate(D) Then Exit Function
If Len(CStr(Arr(0))) <> 2 Or _
Len(CStr(Arr(1))) <> 2 Or _
(Len(Arr(2)) <> 2 And Len(Arr(2)) <> 4) Then Exit Function
DateCorrecte = True
End Function
'=================================
Dans le module Thisworkbook du même classeur :

'================================= Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Not Intersect(Target, Range("B:B")) Is Nothing Then
If Not DateCorrecte(Target.Value) Then
Application.EnableEvents = False
MsgBox "ATTENTION FORMAT NON AUTORISÉ"
Target.Clear
Target.Select
Application.EnableEvents = True
End If
End If
End Sub
'=================================
FS
---
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !


Bonsoir,

Excusez moi, je me suis mal exprimé, et peut être aussi dans mon post. En
fait, je veux bloquer la colonne B, aux utilisateurs, pour qu'ils utilisent
seulement les formats jj/mm/aa et/ou jj/mm/aaaa ( 01/01/2004 ou 31/01/04 ),
s'ils écrivent 01.01.2004 ou 01.01.04, un avertissement visuel dit
"ATTENTION FORMAT NON AUTORISE".

Le macro que j'ai fait correspond aux commandes d' excel : Donnés =>
Validation, Option, Critére de validation, date, Données comprise 01/01/1999
et 31/12/3000"

Encore 1 fois, merci et excusez moi.

seng

"Hua Seng" a écrit dans le message de
news:

Bonsoir à tous,

Je reviens vers vous concernant mon post ci-dessous. j'ai essayé le code


que

m'a donné Denis ou Mich ( excuse- moi je ne sais pas lequel est vraiement
son prénom ) çà n'a pas fonctionné du tous. Est ce qq'1 peut m' aider +.

Merci d'avance.

seng
"michdenis" a écrit dans le message de
news:

Bonjour Hua Seng,

Copie cette procédure dans le ThisWorkbook de ton classeur :

Dans cette ligne de code, remplace les noms des feuilles par celles de



ton

application.

Arr = Array("Feuil1", "Feuil2", "Feuil3", "Feuil4", "Feuil5")

Voici le format retenu pour l'affichage de tes données en Colonne B:B,


libre à toi d'en choisir un autre.

rg.NumberFormat = "dd/mm/yy"


'-------------------------------
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal



Target

As Range)

Dim Arr(), Rg As Range
Arr = Array("Feuil1", "Feuil2", "Feuil3")

If Not IsError(Application.Match(Sh.Name, Arr, 0)) Then
Set rg = Intersect(Target, Range("B:B"))
If Not rg Is Nothing Then
Application.CommandBars(1).Controls(5).Controls(1).Enabled >
False



rg.NumberFormat = "dd/mm/yy"
Else
Application.CommandBars(1).Controls(5).Controls(1).Enabled >
True



End If
End If
Set Rg = Nothing
End Sub
'-------------------------------


Salutations!



"Hua Seng" a écrit dans le message de


news:

Bjrs tous le monde.

Je viens vers vous pr 1 question. Comment interdire par vba sur



plusieurs

feuilles ( 5 par exemple, sur la même colonne, en occurence B:B ), le


format

de date style jj.mm.aa ou jj.mm.aaaa.

J'ai fait par l' enregistreur de macro sous excel pro et j'obtiens le



code

suivant :

Sub Interdiction()
Range("B2:B26").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateDate, AlertStyle:=xlValidAlertStop,


Operator: >>
_
xlBetween, Formula1:="1/1/1900", Formula2:="12/31/3000"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End Sub

De là, j'ai essayé de déclarer qu'il y a 5 feuilles ds mon classeur et



que

les utilisateurs peuvent utiliser seulement >sur la colonne B:B que le
format de date jj/mm/aa ou jj/mm/aaaa, tjrs par

l'enregistreur de macro mais j'arrive pas, qq'1 parmi vous a une idée.

D'avance, merci pr vos guides

Seng