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. merci pilas31 sa marche super bien tu est un expert merciiiiii
    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
      1. merci c est trés gentille je vais voir et je te tiens au courant :)
        merci
        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. 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. 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. 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. 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. 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. 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. 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. 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. 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,