IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Restrictions de cellules


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Sapeur-pompier
    Inscrit en
    Septembre 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Sapeur-pompier
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2013
    Messages : 54
    Par défaut Restrictions de cellules
    Bonjour tout le monde
    je reviens vers vous car j'ai un souci avec une formule..je dois créer un tableau dans lequel on doit inscrire un numéro de matricule (jusque là c'est ok! )
    Le tableau représentera des jours fractionné en heures( 24h/j)
    je voudrai en fait que si on est le 1/1/2000 à 12:00 on ne puisse plus modifier les cellules d'avant cette date et cette heure precise, en gros: je m'inscris le 2/2/2016 a 12:00 et reviens vers 12:30, ben plus moyen de modifier car on a dépassé la date inscrite par contre je dois pouvoir le faire pour les dates et heures futures.. ceci afin d'éviter les tricheries de certains

    Pas très clair j'imagine...

    Voilà un code que j'ai trouvé sur la toile et qui fonctionne mais uniquement pour les jours passés et non pour les heures passées

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Intersect(Target, Range("A1:P41")) Is Nothing Then
    Jour = [F1].Value
    If Date > Jour Then
    MsgBox ("Vous ne pouvez pas revenir à une date précedente")
    [Q1].Select
    Exit Sub
    End If
    End If
    End Sub
    Si quelqu'un à une idée de modifs je suis preneur

    Ps: Le code ne figure que sur la feuille1 dans vba..
    Fichiers attachés Fichiers attachés

  2. #2
    Membre éprouvé
    Homme Profil pro
    Technicien bureau d'études
    Inscrit en
    Novembre 2015
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien bureau d'études

    Informations forums :
    Inscription : Novembre 2015
    Messages : 118
    Par défaut
    Bonjour Vincendie.

    Une idée de solution.
    Si à chaque modification tu enregistres les changements, on peut imaginer remplacer la date en F1 par Now (date et heures de l'enregistrement).
    Ensuite on modifie ta condition.

    Dans ThisWorkbook:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Jour = Format(Date, "dd")
    Sheets(Jour).[F1].Value = Now
    End Sub
    La variable jour, récupère le numéro (22 pour aujourdhui), et enregistre Now dans l'onglet correspondant au jour.

    Dans les différents onglets:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Intersect(Target, Range("A1:P41")) Is Nothing Then
    Jour = [F1].Value
    If Now > Jour Then
    MsgBox ("Vous ne pouvez pas revenir à une date précedente, contactez le Sgt Lombaerts")
    [Q1].Select
    Exit Sub
    End If
    End If
    End Sub

  3. #3
    Membre averti
    Homme Profil pro
    Sapeur-pompier
    Inscrit en
    Septembre 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Sapeur-pompier
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2013
    Messages : 54
    Par défaut
    Merci pour ta suggestion mais ca ne fonctionne pas...
    y'aurait-il un moyen de faire ca sans passer par du vba?

  4. #4
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut


    Bonjour !

    Y aurait-il moyen de ne pas citer l'intégralité du message précédent ?‼

    Sinon vu qu'ici c'est le forum dédié au VBA …


    ______________________________________________________________________________________________________
    Je suis Paris, Charlie, Bruxelles, …


  5. #5
    Membre averti
    Homme Profil pro
    Sapeur-pompier
    Inscrit en
    Septembre 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Sapeur-pompier
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2013
    Messages : 54
    Par défaut
    Désolé Marc-L..
    tu n'aurais pas une idée toi?

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour,

    Les explications données ici ne sont pas (du moins pour moi) de la plus grande clarté.
    Je vais donc me contenter d'une remarque, à ce stade (et sans cette clarté) .
    Si une cellule est remplie, sa modification ne saurait venir qu'ultérieurement. Je ne vois dans ces conditions pas la nécessité d'un contrôle date/heure ... Il me semble, dans cette logique, qu'il suffit de ne pas permettre de revenir dans une cellule déjà remplie.
    A moins, bien sûr, que des précisions ajoutant la clarté nécessaire ne viennent changer la donne !

  7. #7
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Citation Envoyé par vincendie Voir le message
    y'aurait-il un moyen de faire ca sans passer par du vba?
    Cela m'étonnerait fort !

    Déjà utiliser l'évènement Change et non SelectionChange afin de vérifier si la cellule modifiée (Target)
    est une heure (ou dans une plage spécifique) et est dans les clous ou pas.

    Dans la négative, utiliser la méthode Undo

  8. #8
    Membre averti
    Homme Profil pro
    Sapeur-pompier
    Inscrit en
    Septembre 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Sapeur-pompier
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2013
    Messages : 54
    Par défaut
    UNPARIA, ton idée pourrait bien faire mon affaire mais comment y parvenir?...

  9. #9
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Comment ?
    Tiens donc !
    Tiens, je vais le faire sans même verrouiller quoi que ce soit en en me payant la bobine du tricheur ...
    Exemple avec la cellule B1 !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Dim toto As String
     
    Private Sub Worksheet_Change(ByVal Target As Range)
       If Target.Address = Range("B1").Address And toto <> "" Then
         MsgBox "on ne triche pas ici ! t'as déjà dit " & toto & " et cela restera " & toto
         Application.EnableEvents = False
         Target.Value = toto
         Application.EnableEvents = True
       End If
    End Sub
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     If Target.Address = Range("B1").Address And Target.Value <> "" Then
       toto = Target.Value
     Else
       toto = ""
     End If
    End Sub
    Renseigne donc B1 et essaye ensuite de la modifier ! Tu verras !

Discussions similaires

  1. Restriction de cellules
    Par vincendie dans le forum Excel
    Réponses: 1
    Dernier message: 13/03/2016, 10h08
  2. TDBGRID - Couleur de fond d'une seule cellule
    Par cgo dans le forum Bases de données
    Réponses: 5
    Dernier message: 11/09/2009, 10h16
  3. [VBA-E] Fonction sum() dans une cellule
    Par Gonzo dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 16/12/2002, 10h18
  4. [] [Excel] Fusionner des cellules
    Par SamyD dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 13/12/2002, 18h37
  5. [VBA-E] [Excel] Protection d'une plage de cellules
    Par fikou dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 20/11/2002, 11h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo