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 :

Code VBA Déverouilage automatique de cellules


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Septembre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Septembre 2018
    Messages : 13
    Points : 4
    Points
    4
    Par défaut Code VBA Déverouilage automatique de cellules
    Bonjour à Tous,

    Je suis novice en VBA et j'aimerais bien si quelqu'un peut m'aider à écrire le code VBA qui permet :
    De déverrouiller des cellules de la colonne B (qui elle-même doit rester verrouillée car elle contient une formule) en fonction du contenu des cellules de la colonne A

    En vous remerciant par avance pour votre aide

  2. #2
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2012
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 214
    Points : 367
    Points
    367

  3. #3
    Candidat au Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Septembre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Septembre 2018
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Merci sogedic de m'avoir répondu mais j'ai bien vu le lien avant de poster et cela n'a pas résolu ma question

  4. #4
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Points : 3 666
    Points
    3 666
    Par défaut
    Bonjour,

    Qu'as-tu dans A ? Une saisie ou une formule ?
    Si c'est une saisie c'est à faire à ce moment pour la ligne ou c'est à faire sur demande pour la colonne ?

    en fonction du contenu des cellules de la colonne A
    Mais encore ?
    eric

  5. #5
    Candidat au Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Septembre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Septembre 2018
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Bonjour Eriiic,

    En Fait, les cellules de la colonne A (nommée Produit) contiennent une liste déroulante
    Les cellules de la colonne B (Nommée Transport) contiennent la formule recherche V ( ce qui fait que cette colonne doit rester verrouillé )

    Ce que je souhaite obtenir est que si la cellule A2 = "X1" ou "X2" ou "X3" , la cellule B2 reste verrouillée sinon si la cellule A2 ="Y1" ou "Y2" ou "Y3" alors la cellule B2 se déverrouille automatiquement. je veux ensuite reproduire cela a toute la colonne B.

    Avec tous mes remerciements,

  6. #6
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 139
    Points : 9 974
    Points
    9 974
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    j'ai limité le test sur la plage utilisée dans la feuille au niveau de la colonne A
    un exemple à adapter donc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub toto()
    Dim i As Long
        With ThisWorkbook.Worksheets("Feuil1") ' à adapter
            For i = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row ' à adapter si on commence pas en ligne 1 ou qu'on veut aller plus bas que la plage utilisée en colonne A
                Select Case .Cells(i, 1).Value
                    Case "X1", "X2", "X3"
                        .Cells(i, 2).Locked = True
                    Case Else
                        .Cells(i, 2).Locked = False
                End Select
            Next i
        End With
    End Sub
    une variante moins intuitive
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub toto()
    Dim i As Long
        With ThisWorkbook.Worksheets("Feuil1") ' à adapter
            For i = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row ' à adapter si on commence pas en ligne 1
                .Cells(i, 2).Locked = .Cells(i, 1).Value Like "X?" And Val(.Cells(i, 1).Value) < 4
            Next i
        End With
    End Sub

  7. #7
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Points : 3 666
    Points
    3 666
    Par défaut
    Re, bonjour joe,

    une autre version qui met à jour lors du choix :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim pl As Range, c As Range
        Set pl = Intersect(Target, Columns(1))
        For Each c In pl
            Target.Offset(, 1).Locked = Not Target Like "Y#"
        Next c
        Debug.Print Target.Offset(, 1).Locked
    End Sub
    Ici déverrouillé pour Y0 à Y9. Fonctionne également si tu colles plusieurs lignes d'un coup.
    eric

  8. #8
    Candidat au Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Septembre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Septembre 2018
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Re-bonjour à tous,

    D'abord, je tiens a vous remercier pour toutes vos propositions mais avec mon niveau de débutant en VBA, je peine a mettre en place ses solutions.

    Afin de vous permettre de comprendre ma demande, j'ai joins ci-dessous un exemple de mon tableau

    Cordialement,

    Exemple.rar

  9. #9
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Points : 3 666
    Points
    3 666
    Par défaut
    Bah tu vas apprendre... :-)
    Pour ma proposition :
    clic-droit sur l'onglet concerné, 'Visualiser le code', copier-coller le code dedans.
    Le fait de choisir/saisir en A met à jour la protection en B.

    Pour la proposition de joe : idem sauf que tu peux la mettre dans un module Standard (clic-droit sur le projet de ton classeur à gauche dans VBE, 'Insertion / Module'

    Mais tout ceci me fait penser qu'on a oublié que la feuille est protégée.
    Pour ne pas à avoir à l'enlever dans la macro et qu'elle ne soit pas gênée, tu vas la protéger par macro à fermeture (avec UserInterfaceOnly:=True seul l'utilisateur est bloqué).
    Comme ça, même si tu oublies de reprotéger la feuille, la macro n'oubliera pas.
    Double-clique sur ThisWorkbook et ajoute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
        ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, UserInterfaceOnly:=True
    End Sub
    eric

  10. #10
    Candidat au Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Septembre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Septembre 2018
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Re-bonjour Eric,

    Je me suis appliqué et voilà ce que j'ai comme message " Impossible de définir la propriété Locked de la classe Range"

  11. #11
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Points : 3 666
    Points
    3 666
    Par défaut
    Lance au moins une fois Workbook_BeforeClose que la feuille soit protégée correctement pour la macro.
    eric

  12. #12
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Points : 3 666
    Points
    3 666
    Par défaut
    Lance au moins une fois Workbook_BeforeClose que la feuille soit protégée correctement pour la macro.

    Soit tu fermes et rouvres ton fichier, soit tu te fais un sub avec juste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sub protege
        Sheets("nom_de_ta_feuille").Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, UserInterfaceOnly:=True
    end sub
    Si toujours pb dépose ton fichier avec le code que tu as mis.
    eric

    PS : remplace ActiveSheet par Sheets("nom_de_ta_feuille") dans Workbook_BeforeClose

  13. #13
    Candidat au Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Septembre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Septembre 2018
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Je te remercie encore une fois Eric d'être aussi patient avec moi.
    Il me semble que sur l'exemple que j'ai posté, j'ai joint un texte explicatif avec le tableau ainsi que le mot de passe de protection.
    Mais je le reposte comme même avec les 2 code VBA dans le workbook.
    Cela vous permettra de vérifier ce que ça donne.

    Cordialement,

    Exemple(1).rar

  14. #14
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Points : 3 666
    Points
    3 666
    Par défaut
    Compresser un fichier de 200 ko n'est pas nécessaire. Et encore moins en .rar que tout le monde n'a pas.
    Si tu protèges ta feuille avec un mot de passe il faudrait peut-être nous le fournir.
    Et surtout l'indiquer à la macro puisque tu ne fais pas comme je t'ai proposé.
    D'ailleurs je ne vois aucune ligne de ma proposition, dans aucun des modules indiqués...
    eric

  15. #15
    Candidat au Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Septembre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Septembre 2018
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Mais il me semble j'ai bien noté le mot de passe sur l'explication que j'ai joins au tableau quant au format rar, désolé pour. Mais voici encore une autre fois mon exemple en fichier Xlsm.

    Cordialement,

    Exemple.xlsm

  16. #16
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Points : 3 666
    Points
    3 666
    Par défaut
    Je n'avais pas vu ton mot de passe, désolé.
    Là c'est la proposition de joe qui traite toute la colonne, je le laisse te répondre.
    Moi je te proposais de ne faire que la ligne concernée.

    Je dirais juste que si tu demandes pour les colonnes A et B, et qu'en vrai c'est H et N, c'est que tu comptes prendre en charge l'adaptation.
    Ce qui n'est pas fait. Là tu verrouilles B selon le contenu de B (?!? bizarre). C'est Cells(ligne, colonne)
    De plus tu as tout mis dans ThisWorkbook, ce n'était pas dit.

    Quand on utilise un tableau structuré on ajoute pas des lignes d'avance puisqu'il s'étend automatiquement en copiant formules et formats dès l'ajout d'une ligne.
    Tu perds un de ses avantage...
    A vouloir alterner formules et saisies dans une colonne, je ne suis pas sûr que le tableau structuré aime ça tout le temps.
    Pas impossible qu'un jour il ne mette plus la formule à l'ajout d'une ligne.
    eric

  17. #17
    Candidat au Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Septembre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Septembre 2018
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    J'ai dis colonne A et B car je travaillais sur un fichier test avant de finaliser mon tableau.
    Je te remercie beaucoup ERIC pour ton aide et pour tes explications.

    Cordialement,

Discussions similaires

  1. Code VBA Déverouilage automatique de cellules
    Par ABBATO dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 10/09/2018, 17h41
  2. [XL-2007] Code VBA remplacement automatique par une liste de mots
    Par summerfllore dans le forum Macros et VBA Excel
    Réponses: 31
    Dernier message: 23/06/2016, 08h19
  3. [XL-2002] Code VBA pour colorier des cellules à partir de plusieurs critères
    Par NoodleDS dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 04/11/2013, 22h05
  4. [XL-2003] Associer Cellule à un code VBA + tri automatique
    Par Razekiel_ dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 10/07/2012, 13h59
  5. Code VBA pour Copier une cellule dans un filtre?
    Par Redisdead dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/02/2009, 05h48

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