VBA EXcel

Résolu/Fermé
djeff94 Messages postés 26 Date d'inscription mercredi 20 février 2013 Statut Membre Dernière intervention 25 avril 2013 - 28 févr. 2013 à 10:53
djeff94 Messages postés 26 Date d'inscription mercredi 20 février 2013 Statut Membre Dernière intervention 25 avril 2013 - 1 mars 2013 à 09:28
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

pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 643
Modifié par pilas31 le 28/02/2013 à 11:57
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
djeff94 Messages postés 26 Date d'inscription mercredi 20 février 2013 Statut Membre Dernière intervention 25 avril 2013
28 févr. 2013 à 13:13
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 :)
0
pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 643
28 févr. 2013 à 13:28
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 ?
0
djeff94 Messages postés 26 Date d'inscription mercredi 20 février 2013 Statut Membre Dernière intervention 25 avril 2013
28 févr. 2013 à 14:12
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
0
djeff94 Messages postés 26 Date d'inscription mercredi 20 février 2013 Statut Membre Dernière intervention 25 avril 2013
28 févr. 2013 à 14:28
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
0
djeff94 Messages postés 26 Date d'inscription mercredi 20 février 2013 Statut Membre Dernière intervention 25 avril 2013
28 févr. 2013 à 13:56
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
0
djeff94 Messages postés 26 Date d'inscription mercredi 20 février 2013 Statut Membre Dernière intervention 25 avril 2013
28 févr. 2013 à 14:10
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 643
Modifié par pilas31 le 28/02/2013 à 15:33
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,
0
djeff94 Messages postés 26 Date d'inscription mercredi 20 février 2013 Statut Membre Dernière intervention 25 avril 2013
28 févr. 2013 à 16:00
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
0
djeff94 Messages postés 26 Date d'inscription mercredi 20 février 2013 Statut Membre Dernière intervention 25 avril 2013
28 févr. 2013 à 16:07
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
0
djeff94 Messages postés 26 Date d'inscription mercredi 20 février 2013 Statut Membre Dernière intervention 25 avril 2013
28 févr. 2013 à 16:31
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
0
djeff94 Messages postés 26 Date d'inscription mercredi 20 février 2013 Statut Membre Dernière intervention 25 avril 2013
28 févr. 2013 à 16:35
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 :)
0
pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 643
Modifié par pilas31 le 28/02/2013 à 16:52
ç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,
0
djeff94 Messages postés 26 Date d'inscription mercredi 20 février 2013 Statut Membre Dernière intervention 25 avril 2013
28 févr. 2013 à 16:53
merci c est trés gentille je vais voir et je te tiens au courant :)
merci
0
djeff94 Messages postés 26 Date d'inscription mercredi 20 février 2013 Statut Membre Dernière intervention 25 avril 2013
28 févr. 2013 à 17:36
https://www.cjoint.com/?3BCrINfVfgp
voici le liens ou tu pourra trouver le code donc voila une fois ke je remplis ma cologne et que ton programme se lance sa empeche les autre macros de fonctionné :)
merci
0
pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 643
28 févr. 2013 à 18:24
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
0
djeff94 Messages postés 26 Date d'inscription mercredi 20 février 2013 Statut Membre Dernière intervention 25 avril 2013
1 mars 2013 à 09:28
merci pilas31 sa marche super bien tu est un expert merciiiiii
0