VBA EXcel

Résolu
Bonjour,

c est encors moi je découvre vrement VBA donc j aimerai savoir si il ya un moyen d interdir l ecriture sur une cellule par exemple B8 si A8="Non" si c est pas le cas on peut ecrire normalement j est essayer avec la validation de donnée sur ms c est pas vrement sa car si on fait du copier coller sa ne marche plus
merci :)

14 réponses

  1. Contributeur
    Bonjour,

    Une solution en VBA.

    1/Selectionner la feuille entière et dévérouiller toutes les cellules
    2/ Dans le code associé à la feuille (clic droit sur le nom et "visualiser le code")
    Copier coller la macro suivante :
    Private Sub Worksheet_Change(ByVal Target As Range) 
        ActiveSheet.Unprotect 
        Range("B8").Locked = Not Intersect(Target, Range("A8")) Is Nothing And Range("A8").Value = "Non" 
        ActiveSheet.Protect 
    End Sub


    Ainsi chaque fois que l'on modifie la valeur de A8 si on met la valeur "Non" cela protége la cellule B8 qui ne peut plus être modifiée.

    A+
    Cordialement,
    1. merci sa marche a merveille
      si je peux me permettre comment faire la macro sa sur toute la cologne A jusqu'a se qu on atteigne une cellule vide

      merciiiii :)
      1. Contributeur
        Je ne comprend pas bien.
        Il faut que cela fonctionne sur toute la colonne A. C'est à dire que pour n'importe quelle ligne (tant que l'on est pas à la fin). Donc prenons un exemple si il y a des valeurs jusqu'a la ligne 20.
        Aors si A1 faut Non on ne peut pas modifier B1.. si A2 vaut Non on ne peut pas modifier B2 etc... Jusqu'a si A20 vaut Non on ne peut pas modifier B20.
        C'est bien cela ?
      2. c est excactement sa et pour etre plus precis c est pas que la valeur ne dois pas etres modifier ms sa doit reste une case vide car si il mentionne non sa veu dire qu il refuse quelque service dc pas besoin de mettrede prix sa dois tt simplement se verouiller
      3. ou bien metttre la case en gris par contre si on chosi autre chose on pourra modifier et remplacer nos cellule normalment
        merciiiiii
        javoue je suis vrement un novice
    2. ah dsl ms finalement sa marche pas sa me bloque mon choix une une fois que j ai choisi non je peu plus rechoisir oui sa ne modifie plus ma cellule a8 elle reste figé a une valeur
      1. voila c est excactement sa et pour etreplus precis c est pas que la valeur dois etres modifier ms sa doit reste une case vide car si il mentionne non sa veu dire qu il refuse quelque service dc pas besoin de mettrede prix sa dois tt simplement se verouiller
        1. Contributeur
          Voila une nouvelle proposition pour la macro. Toujours clic droit sur l'onglet de la feuille et "visualiser le code". Remplacer la macro précédente par celle-ci

          Private Sub Worksheet_Change(ByVal Target As Range)  
              If Not Intersect(Target, Range("A:A")) Is Nothing Then  
                  ActiveSheet.Unprotect  
                  Application.EnableEvents = False  
                  DerLig = Range("A" & Rows.Count).End(xlUp).Row  
                  For Lig = 1 To DerLig  
                      If Range("A" & Lig).Value = "Non" Then  
                          Range("B" & Lig).Interior.Color = RGB(200, 200, 200)  
                          Range("B" & Lig).Value = ""  
                          Range("B" & Lig).Locked = True  
                      Else  
                          Range("B" & Lig).Interior.Pattern = xlNone  
                          Range("B" & Lig).Locked = False  
                      End If  
                  Next Lig  
                  Application.EnableEvents = True  
                  ActiveSheet.Protect  
              End If  
          End Sub


          Si on met "Non" en A la cellule se grise en B et est mise à vide

          Il faut toujours en préalable déverrouiller toutes les cellules (sélectionner toutes les cellules par le carré en haut à gauche puis "format de cellule"/"Protection" décocher la case "verrouillée")
          Juste une remarque : La feuille est protégée sans mot de passe par la macro. A la fin elle reste protégée donc il faut penser à la déprotéger si besoin. Mais dès que l'on modifie une valeur dans la colonne A la macro se déclenche et reprotége la feuille.

          Cordialement,
          1. MERCI POUR LA REPONSE
            ms voila une fois que je me mais sur A1 ET que je choisi ma reponse sa me bloque b2 ET ensuite sa bloque tt les autre case je ne peu rien changer meme si j avais choisi non je ne peu plus le retirer par exemple si je me ss tromper ou bien je ne peu meme plus saisir sur A3.... sa bloque tt
            merciiii
            1. il ya aussi un soucis c est qu on verouillant la feuille sa marche parfaitement ms il empeche ms autre macros de fonctionner il me dis qu il ya des erreru lorsque la macros dois colorier une celllule esque ya moyen d arranger sa
              merci
              et désolé de vs deranger autant
              1. parse que apré chaque saisie notre feuille se verouille donc a chaque nouvelle saisie de ligne en dois oter la protection dc si ya moyen de se passé de sa sa serai tt simplement parfait
                1. et la feuille verouille toute les cellules pas selement celle que je voulai verouillé donc une fois lancé rien ne peut etre change meme les cologne non utiliser dans le programme :)
                  1. Contributeur
                    ça ne devrait pas bloquer d'autres cellules que celles qui sont dans la colonne B en face de cellule A qui sont à "Non". Chez moi cela fonctionne parfaitement
                    Si c'est la cas c'est que les cellules sont vérouillées.
                    Il faut dévérouillier toutes les cellules de la feuille avant tout.
                    Le principe de protection de la feuille en Excel c'est que cela ne protége que les cellules vérouillées.

                    Pour les autres macros. Effectivement je n'avais pas pensé à cela. Il faut mettre dans chaque macro.
                    Au début :ActiveSheet.Unprotect
                    A la fin :ActiveSheet.Protect

                    Si ça ne marche toujours pas il faudra me communiquer le fichier en le déposant sur www.cjoint.com ( en enlevant les données confidentielles) et en me donnant le lien pour le télécharger et je pourrais ainsi le corriger.

                    A+
                    Cordialement,
                    1. merci c est trés gentille je vais voir et je te tiens au courant :)
                      merci
                      1. Contributeur
                        J'ai regardé le code, je te propose la modification suivante :

                        Dans le code de la feuille "site offer" mettre le code suivant :
                        Private Sub Worksheet_Activate()
                            ActiveSheet.Protect
                        End Sub
                        
                        Private Sub Worksheet_Change(ByVal Target As Range)
                            If Not Intersect(Target, Range("W:W")) Is Nothing Then
                                ActiveSheet.Unprotect
                                Application.EnableEvents = False
                                DerLig = Range("W" & Rows.Count).End(xlUp).Row
                                For Lig = 8 To DerLig
                                    If Range("W" & Lig).Value = "Non" Then
                                        Range("X" & Lig & ":AE" & Lig).Interior.Color = RGB(200, 200, 200)
                                        Range("X" & Lig & ":AE" & Lig).Value = ""
                                        Range("X" & Lig & ":AE" & Lig).Locked = True
                                    Else
                                        Range("X" & Lig & ":AE" & Lig).Interior.Pattern = xlNone
                                        Range("X" & Lig & ":AE" & Lig).Locked = False
                                    End If
                                Next Lig
                                Application.EnableEvents = True
                                ActiveSheet.Protect
                            End If
                        End Sub


                        J'ai un peu simplifié car les colonnes se suivent.

                        Et dans le code de la feuille "test coherence" car je crois que c'est depuis cette feuille que tu lances toutes les macros :
                        Private Sub Worksheet_Activate()
                            Sheets("site offer").Unprotect
                        End Sub


                        Voila,

                        a Tester