Valeur par défaut sur condition

tuonoman

XLDnaute Occasionnel
Bonjour a tous,

Je dois réaliser une petite nomenclature pour mon travail et malheureusement je bute sur deux choses relativement simple, je pense.
En l’occurrence dans une cellule A1 je renseigne une quantité, dans une autre cellule ( A3 ) je souhaite que si la quantité dans A1 soit 1 celle de A3 soit de 0 par défaut, si la quantité dans A1 est de 2 celle de A2 reste libre à remplir par l’utilisateur.
Par contre si je remets 1 dans A1 je souhaite que A3 se remette a 0 par défaut.
J’ai essayé de réaliser ceci via une validation de données, mais sans réussite.

Pouvez-vous m’aider ?
 

vgendron

XLDnaute Barbatruc
Re : Valeur par défaut sur condition

Bonjour

avec ce code VBA à mettre dans la feuille concernée..

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [A1]) Is Nothing Then
    If [A1] = 1 Then
        [A3] = 0
    Else: [A3].ClearContents
    End If
End If
End Sub


ouvrir editeur vba (Alt + F11)
à gauche dans l'explorateur : double cliquer sur la feuille sur laquelle tu veux faire le controle des cellules A1 et A3
à droite, dans la fenetre de code qui vient de s'ouvrir. tu copie colles le code ci dessus
et voila
 

vgendron

XLDnaute Barbatruc
Re : Valeur par défaut sur condition

euh.. c'est quoi la même chose.
selon valeur de A4, on met A5 à 0 ou pas ?
il te suffit de faire un copier coller..

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
'si la valeur changée est en A1
If Not Intersect(Target, [A1]) Is Nothing Then
    If [A1] = 1 Then
        [A3] = 0
    Else: [A3].ClearContents
    End If
End If

'si la valeur changée est en A4
If Not Intersect(Target, [A4]) Is Nothing Then
    If [A4] = 1 Then
        [A5] = 0
    Else: [A5].ClearContents
    End If
End If

End Sub
 

tuonoman

XLDnaute Occasionnel
Re : Valeur par défaut sur condition

Désolé, mes explications ne sont pas claires concrètement dans la version finale je dois arriver à ça

Si A1 = 1
A3= « libre d’écriture »
A4=0
A5=0
A6=0

Si A1 = 2
A3= « libre d’écriture »
A4= « libre d’écriture »
A5=0
A6=0

Si A1 = 3
A3= « libre d’écriture »
A4= « libre d’écriture »
A5=« libre d’écriture »
A6=0

Si A1 = 4
A3= « libre d’écriture »
A4= « libre d’écriture »
A5=« libre d’écriture »
A6=« libre d’écriture »

Merci de ton aide.
 

tuonoman

XLDnaute Occasionnel
Re : Valeur par défaut sur condition

salut, je suis arrivé a ça, le résulta est là, mais je voudrais aussi verrouiller les cellules qui sont a 0 en écriture

Possible ou pas ?


Private Sub Worksheet_Change(ByVal Target As Range)
'si la valeur changée est en A1

If Not Intersect(Target, [A1]) Is Nothing Then
If [A1] = 1 Then
[A3] = 0
[A4] = 0
[A5] = 0
End If
If [A1] = 2 Then
[A3] = ""
[A4] = 0
[A5] = 0
End If
If [A1] = 3 Then
[A3] = ""
[A4] = ""
[A5] = 0
End If
If [A1] = 4 Then
[A3] = ""
[A4] = ""
[A5] = ""

End If
End If
 

vgendron

XLDnaute Barbatruc
Re : Valeur par défaut sur condition

Hello

pour simplifier le code tu peux utiliser un Select case

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
'si la valeur changée est en A1
Application.EnableEvents = False
If Not Intersect(Target, [A1]) Is Nothing Then

Select Case [A1]
    Case 1
        [A3] = 0
        [A4] = 0
        [A5] = 0
    
    Case 2
        [A3] = ""
        [A4] = 0
        [A5] = 0

    Case 3
        [A3] = ""
        [A4] = ""
        [A5] = 0

    Case 4
        [A3] = ""
        [A4] = ""
        [A5] = ""
End Select

End If
Application.EnableEvents = True

End Sub

pour verrouiller les cellules à 0.. il faut passer par la protection de classeur. et la. je t'avoue que je maitrise pas du tout le concept..
je crois que par défaut. toutes les cellules sont verrouillées.. et donc. si la protection est activée. tu ne peux plus rien modifier..
je pense que tu peux facilement trouver en tapant sur google ou meme dans ce forum..
 

vgendron

XLDnaute Barbatruc
Re : Valeur par défaut sur condition

bah voila. c'était moins compliqué que prévu.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
'si la valeur changée est en A1
Application.EnableEvents = False
ActiveSheet.Unprotect
If Not Intersect(Target, [A1]) Is Nothing Then

Select Case [A1]
    Case 1
        [A3] = 0
        [A4] = 0
        [A5] = 0
        [A3].Locked = True
        [A4].Locked = True
        [A5].Locked = True
    
    Case 2
        [A3] = ""
        [A4] = 0
        [A5] = 0
        [A3].Locked = False
        [A4].Locked = True
        [A5].Locked = True

    Case 3
        [A3] = ""
        [A4] = ""
        [A5] = 0
        [A3].Locked = False
        [A4].Locked = False
        [A5].Locked = True

    Case 4
        [A3] = ""
        [A4] = ""
        [A5] = ""
        [A3].Locked = False
        [A4].Locked = False
        [A5].Locked = False
End Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
ActiveSheet.EnableSelection = xlUnlockedCells

End If
Application.EnableEvents = True

End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 334
Membres
103 189
dernier inscrit
Bob34000