empêcher la saisie après une date

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 !

bebop59

XLDnaute Nouveau
Bonsoir
j'ai réalisé cette macro qui permet de bloquer les saisies lorsque la date du jour est passée sur plusieurs lignes et plusieurs colonnes.


Private Sub Worksheet_selectionChange(ByVal Target As Range)
Dim c As Range


For Each c In Target


If Range("C1") > Range("A1") Then Exit Sub

If c.Address(0, 0) = "C2" Then Range("A1").Select
If c.Address(0, 0) = "C4" Then Range("A1").Select
If c.Address(0, 0) = "C6" Then Range("A1").Select
If c.Address(0, 0) = "C8" Then Range("A1").Select
If c.Address(0, 0) = "C10" Then Range("A1").Select
'......

If Range("D1") > Range("A1") Then Exit Sub

If c.Address(0, 0) = "D2" Then Range("A1").Select
If c.Address(0, 0) = "D4" Then Range("A1").Select
If c.Address(0, 0) = "D6" Then Range("A1").Select
If c.Address(0, 0) = "D8" Then Range("A1").Select
If c.Address(0, 0) = "D10" Then Range("A1").Select
'........

If Range("E1") > Range("A1") Then Exit Sub

If c.Address(0, 0) = "E2" Then Range("A1").Select
If c.Address(0, 0) = "E4" Then Range("A1").Select
If c.Address(0, 0) = "E6" Then Range("A1").Select
If c.Address(0, 0) = "E8" Then Range("A1").Select
If c.Address(0, 0) = "E10" Then Range("A1").Select

'..........


'If Range("c3") > Range("A4") Then Exit Sub
'If c.Address(0, 0) = "C4" Then Range("A1").Select

Next c
End Sub


Je voudrais la simplifier en réalisant des boucles mais je n'y arrive pas, d'autant que mon tableau de saisie comprend de nombreuses lignes et colonnes . Je joint un fichier avec la macro de l'essai de boucle .

Merci de votre aide
 

Pièces jointes

Re : empêcher la saisie après une date

Bonjour bebop59,
Un essai, si j'ai bien compris :

VB:
Private Sub Worksheet_selectionChange(ByVal Target As Range)
   Dim c As Range
   
   Set c = Target
  
   If Cells(1, c.Column) > Range("A1") Then Exit Sub
   If c.Row Mod 2 = 0 Then Range("A1").Select
   
End Sub
A+
 
Re : empêcher la saisie après une date

Bonjour grand Chaman
Oui c'est exactement cela! mais y a t'il une méthode pour que ' l'échappement' ne commence qu' à partir de la colonne C et éventuellement la ligne 4 par exemple si les entêtes de ligne sont en ligne 3 ?
Peux tu m'expliquez le principe de fonctionnement de la ligne c.row mod 2=0 ?

Un grand merci à toi
Bebop
 
Re : empêcher la saisie après une date

Bonjour,

Pour commencer à partir d'une ligne / colonne précise, on peut ajouter des conditions :

VB:
Private Sub Worksheet_selectionChange(ByVal Target As Range)
    Dim c As Range
    
    Set c = Target
   
    If Cells(1, c.Column) > Range("A1") And c.Row < 4 And c.Column < 3 Then Exit Sub
    If c.Row Mod 2 = 0 Then Range("A1").Select
    
End Sub

c.row mod 2 = 0 est l'utilisation de la fonction modulo.
Voir ici Modulo (opération) - Wikipédia

Exemple
4 mod 2 = 0
5 mod 2 = 1
6 mod 2 = 0
 
- 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
4
Affichages
146
Réponses
1
Affichages
322
Réponses
4
Affichages
400
Réponses
2
Affichages
405
Réponses
7
Affichages
98
Retour