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 :

Verrouiller une cellule (qui contient une liste) si j+30


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2011
    Messages : 44
    Points : 19
    Points
    19
    Par défaut Verrouiller une cellule (qui contient une liste) si j+30
    Bonjour tout le monde.

    Quelqu'un sait il me fournir le code VBA (macro) svp?

    Pour que une fois la date j+30 passée, (les dates se trouvent sur la gauche du tableau) attention les dates vont changer les seront indiquée toutes meme les we. donc 31 dates) on ne puisse plus rien changer aux cellules.

    Apparement c est un language VAB car les cellules du tableau contiennent déja une validation de données.

    D'avance merci.

    test hit rate.xlsx

  2. #2
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 468
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 468
    Points : 16 348
    Points
    16 348
    Par défaut
    Bonjour

    Manuellement il faut protéger la feuille pour protéger des cellules : soit tu déclares d'abord les cellules modifiables puis tu actives la protection. Le VBA devra juste changer l'aspect modifiable de ces cellules lorsque la date sera atteinte.

    Sinon, si on n'utilise pas la protection, il faut une procédure événementielle qui, chaque fois que l'on essaie de modifier une cellule dont la date est atteinte, rejette la modification.

    Éventuellement par validation de données on peut bloquer certaines choses mais on n'a pas assez d'infos sur ton contexte...
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2011
    Messages : 44
    Points : 19
    Points
    19
    Par défaut
    merci beaucoup pour ton début d explication

    De A4 à R18 par exemple la date en A3 est de plus de 30 jours (nous sommes le 25/05/2014) donc j'aimerais que cette place ne soit plus modifiable (pop up qui le signal (aucune personne ne peut modifier cela).

    j'ai trouvé ce code sur le net qui bloque tout l'onglet:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        If Sheets("Avril").Range("A3").Value >= Date And Sheets("Avril").Range("A3").Value <= Date + 30 Then
            ActiveWorkbook.Protect Password:="password"
            MsgBox "This workbook is locked, please contact <a href="mailto:xxx@xxx.com">xxx@xxx.com</a>"
        Else
            'MsgBox "unlocked"
        End If
    End Sub
    j'ouvre une fichier excel puis je copie colle ce texte et l'enregistre sous excel add in 1997 - 2003. comme ca j'obtiens un fichier addin in.

    Ensuite j'ouvre mon fichier excel et je vais dans l'onglet "développeur" et j'essaie d'ouvrir la macro VBA mais cela ne fonctionne pas. j'ai aussi essayé de l'ouvrir en double cliquand tu le fichier crée "book1" mais tj rien.

    Est-ce plus clair pour que vous puissez m'aider?

  4. #4
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 468
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 468
    Points : 16 348
    Points
    16 348
    Par défaut
    Re,

    Je n'avais pas vu le fichier joint.

    Je ne vois pas trop l'intérêt d'un add in...

    Le code que tu donnes protège le classeur (juste sa structure pas son contenu) et non la feuille.

    Si c'est la date en A3 qui définit le blocage il faudrait plutôt se baser sur le nombre du jours du mois et non sur 30.

    Je verrais plutôt dans le module ThisWorkbook du classeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Madate = ActiveSheet.Range("A3")
    If Madate <> 0 And DateSerial(Year(Madate), Month(Madate) + 1, 0) < Date Then
            ActiveSheet.Protect Password:="password"
        End If
    End Sub
    A adapter si le classeur contient d'autres types d'onglets que des mois sur le même modèle.
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2011
    Messages : 44
    Points : 19
    Points
    19
    Par défaut
    wahou super !!! Merci!

    En fait, on peut modifier le contenu d'un jour "J" jusqu a 30 jours dans le futur au 31 ème on ne sait plus la modifier.

    En fait, nous avons un objectif

    On envoie un contrat et il a 30 jours pour revenir. Donc on peut modifier les collones Q,L,R, (la collone T ne doit jamais être bloquée elle) et d'autres si on s'apercoit d'une faute. Mais après ces 30 jours (comme nos chiffres sont figés par notre manager commercial) cela ne sert plus a rien de modifier et donc les faussers.

    Est-ce donc ta formule la bonne?

    En tout cas, encore un grand merci de cette aide super préciseuse

    Michael

    ps: tu saurais m'expliquer comment on intègre ta forume dans exel car a part "ALT + F11" et faire un copier coller de ton texte je ne sais pas faire d'autre manip. Mais je crois que cela c est juste pour atteindre la macro

  6. #6
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 468
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 468
    Points : 16 348
    Points
    16 348
    Par défaut
    Bonjour

    Après Alt F 11, double cliquer à gauche sur ThisWorkbook avant de coller

    La formule tient compte de la fin du mois : donc de la dernière date : le 1er mai, tout avril est verrouillé.
    Si c'est date par date c'est tout à fait autre chose.

    Si la colonne T ne doit pas être bloquée, il faut au préalable déclarer toutes les cellules de cette colonne comme non verrouillées : la protection appliquée ne les concernera pas.
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2011
    Messages : 44
    Points : 19
    Points
    19
    Par défaut
    c'est en effet date par date.

    J+30 du jour donc le 1 Avril 2014 en effet aujourd'hui ce n'est plus modifiable. Mais aujourd'hui on peut encore modifier le 26,27,28,29,30 Avril 2014.

    Merci pour l'asute de excel pour ton code

  8. #8
    Invité
    Invité(e)
    Par défaut Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If DateDiff("d", "25/04/2014", "26/05/2014") > 30 Then MsgBox "Je Verrouille"

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2011
    Messages : 44
    Points : 19
    Points
    19
    Par défaut
    merci beaucoup pour ta réponse.

    La formule que tu me donnes est à ajouter avec l'autre.

    Ou la tienne suffit?

  10. #10
    Invité
    Invité(e)
    Par défaut
    en fonction de ce que j'ai compris, si la date de la cellule à gauche est supérieur de 30 jours à la date en cours on verrouille la ligne?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Madate = ActiveSheet.Range("A3")
     ActiveSheet.Unprotect Password:="password"
    If DateDiff("d", Madate, Date) > 30 Then
           ActiveSheet.Range("A3").EntireRow.Locked = True
    else
    ActiveSheet.Range("A3").EntireRow.Locked = false
    End If
        ActiveSheet.Protect Password:="password"
    End Sub
    si tu veux pouvoir travailler sur les autre linge il faut que la propriété Locked soit à false sur les autre ligne!
    Dernière modification par AlainTech ; 30/05/2014 à 15h12. Motif: Suppression de la citation inutile

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2011
    Messages : 44
    Points : 19
    Points
    19
    Par défaut
    re salut

    Si la date du jour est supérieur à la date de la cellule "A3" par exemple on verrouille. Mais la suite du tableau ... donc a partir de la cellule "A19" si ce n est pas de 30 jours dépassé la partie de cette plage et donc le reste de la feuille reste accessible.

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2011
    Messages : 44
    Points : 19
    Points
    19
    Par défaut
    Bonsoir,

    cela ne fonctionne pas.

    Excel me demande de déburger et il me surligne une ligne du code en jaune. La premiere ligne qui parle de password:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Madate = ActiveSheet.Range("A3")
     ActiveSheet.Unprotect Password:="mic00"
    If DateDiff("d", Madate, Date) > 30 Then
           ActiveSheet.Range("A3").EntireRow.Locked = True
    Else
    ActiveSheet.Range("A3").EntireRow.Locked = False
    End If
        ActiveSheet.Protect Password:="mic00"
        
    End Sub
    En outre:

    je dois placer ou cette formule:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If DateDiff("d", "25/04/2014", "26/05/2014") > 30 Then MsgBox "Je Verrouille"
    Car j'ai ceci dans le premier message de réponse:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Madate = ActiveSheet.Range("A3")
     ActiveSheet.Unprotect Password:="password"
    If DateDiff("d", Madate, Date) > 30 Then
           ActiveSheet.Range("A3").EntireRow.Locked = True
    else
    ActiveSheet.Range("A3").EntireRow.Locked = false
    End If
        ActiveSheet.Protect Password:="password"
    End Sub

    puis dans un second message cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If DateDiff("d", "25/04/2014", "26/05/2014") > 30 Then MsgBox "Je Verrouille"
    Et je panique car en fait maintenant mon menu Excel est inutilisable? Pratiquement Tout est grisé. Je sais completé l'onglet (donc la formule pour moi ne fonctionne pas. Pourtant aujourd hui on est bien a + de 30 jours par rapport au 1 avril).

    voyez vous quelques choses a désactiver et/ou modifier?

    D'avance merci,

    Michael

  13. #13
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 468
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 468
    Points : 16 348
    Points
    16 348
    Par défaut
    Bonjour

    Dans ma première réponse j'expliquais qu'une des solutions était de verrouiller la feuille : quand une feuille est verrouillée, on peut saisir dans les cellules non verrouillées mais on ne pas modifier grand chose d'où les menus grisés...

    Il serait bien que tu regarde déjà comment fonctionne la protection avant de vouloir l'automatiser par VBA : l'aide en ligne est là pour cela.

    Je te redonne un code pour protéger par groupe de 16 lignes puisque tu as une date toutes les 16 lignes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    ActiveSheet.Unprotect Password:="password"
    For i = 3 To 325 Step 16
        Madate = ActiveSheet.Cells(i, 1)
        Range(Cells(i, 1), Cells(i + 15, 1)).EntireRow.Locked = Madate <> 0 And Madate < Date - 30
    Next i
    ActiveSheet.Protect Password:="password"
    End Sub
    password coorespond à ton mot de passe : à adapter

    Merci de ne pas m'envoyer de MP pour les questions techniques.
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2011
    Messages : 44
    Points : 19
    Points
    19
    Par défaut
    merci beaucoup. C'est justement en fuiant sur le site que j'ai pu comprendre qu'il fallait une VAB pour n e pas faire de saisie manuellement de verouillage.

    Je le souhaite automatique une fois la date d'aujourd'hui est plus grande que la date dans la cellule de 30 jours. Et ce toutes les 16 lignes en effet.

    Merci donc de ton aide.

    Michael

    ps: je test et reviens vers toi.

    Re:

    voila cela ne fonctionne pas. Je sais tout modifier

    Je l'ai bien copier coller dans le "ThisWorkBook" (sachant que j'ai 14 sheet (un pour chaque mois de l'année + un pour les stat annuel + un pour un exemple d'année précédente ).

    Ca m'ennuie fortement. je n'ai pas le temps de m'auto former. (formation à venir) et j'aimerais présenter mon bijoux. Diju! (du wallon non de dieu )

  15. #15
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 468
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 468
    Points : 16 348
    Points
    16 348
    Par défaut
    Bonjour

    Citation Envoyé par micnac Voir le message
    ...
    voila cela ne fonctionne pas. Je sais tout modifier
    J'ai testé sur ton classeur initial et cela fonctionne. Donc il doit y avoir quelque chose pas identique ou dans ta feuille ou dans ton code...

    Repars éventuellement d'un classeur sans code car tu as peut-être empilé des codes incompatibles entres eux...

    Quand cela ne marche pas il faut préciser quelle ligne ne marche pas : sinon on ne sait pas ce qui ne marche pas... ou bien si ce n'est pas un plantage : j'attendais cela, j'obtiens ceci donc il faut modifier dans tel sens...
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2011
    Messages : 44
    Points : 19
    Points
    19
    Par défaut
    Je m'en doutais que cela pouvait être ca.

    En fait, malgré avoir supprimé les codes qui ne fonctionnaient pas et/ou test, il me demande tj mon mot de passe quand je rentre dans visual basic.

    (une question me vient: Pourquoi? Y a t il une solutiuon pour effacer tout ce que j ai fais plus en profondeur dans visual basic? )

    j'ai ouvert un nouveau fichier vierge excel je fais alt + f11, il m'ouvre visual basic:je copie colle ton code, je clic sur la disquette (pour enregister) la il me propose de l'enregister sous Map1. ce que je fais et il me dit que:

    "Les articles suivants ne peuvent pas être stockés dans des classeurs sans macros:

    projet VB

    Pour enregistrer un fichier avec ces caractéristiques, cliquez sur Non, puis choisissez un type de fichier avec les macros dans la liste Type de fichier.
    Cliquez sur Oui pour enregistrer un classeur sans fichier de macros"


    alors j'enregistre via excel avec macro.

    je vais rechercher mon fichier que j'ouvre a nouveau. Tj rien

    Voila ma manipulation par print screen:
    Images attachées Images attachées      

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2011
    Messages : 44
    Points : 19
    Points
    19
    Par défaut
    Nom : ScreenShot859.jpg
Affichages : 549
Taille : 82,9 KoNom : ScreenShot860.jpg
Affichages : 461
Taille : 6,1 KoNom : ScreenShot861.jpg
Affichages : 474
Taille : 25,3 KoNom : ScreenShot862.jpg
Affichages : 512
Taille : 2,7 Ko

Discussions similaires

  1. Réponses: 6
    Dernier message: 08/05/2015, 09h11
  2. Réponses: 7
    Dernier message: 26/05/2014, 08h39
  3. Supprimer une cellule qui contient une information
    Par florianc31 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 13/02/2013, 11h26
  4. Réponses: 0
    Dernier message: 04/08/2010, 14h02
  5. comment afficher une cellule qui contient une formule, dans textbox
    Par cali59 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/08/2009, 00h07

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