horazon
Messages postés9Date d'inscriptionlundi 8 septembre 2008StatutMembreDernière intervention10 septembre 2008
-
8 sept. 2008 à 10:59
horazon
Messages postés9Date d'inscriptionlundi 8 septembre 2008StatutMembreDernière intervention10 septembre 2008
-
10 sept. 2008 à 07:59
Bonjour à tous je suis débutant sous excel et VB pourtant il faudrait que je fasse un fichier regroupant pas mal d'informations.
Je voudrais si possible avoir une liste de choix qui conditionne l'apparition d'une autre liste de choix. C'est à dire si je choisi par exemple le choix 1 liste correspondante apparait , idem pour le choix 2 ....
J'ai essayé de le faire sans macro mais excel ne prend on compte que la valeur de la cellule alors que je voudrais qu'il prenne la formule.
Ayany échoué sur ce point j'ai fouillé diférent forum pour trouver une solution avec VB mais je suis trop débutant pour y comprendre quelque chose ^^.
Je vous remercie d'avance
PS: Je trouve pas comment joindre un fichier excel donc je vous met mon adresse mail au cas ou quelqu'un voudrait bien m'aider
dedenet2
Messages postés372Date d'inscriptionvendredi 27 juillet 2007StatutMembreDernière intervention22 juillet 20131 8 sept. 2008 à 21:08
Bonjour à tous ,
Pour les listes de choix , il faut utiliser l'instruction "Validation"
Voici le code de base que je te propose:
Dans cette exemple , j'utilise les cellules b3 et c3.
----------------------------------------------------------------------
Private Sub Workbook_Open()
On Error Resume Next
Range("b3").Validation.Delete
With Range("b3").Validation
.Add Type:=xlValidateList, Formula1:= _
"Gestion agitation,Gestion niveau,Gestion agitation + niveau"
End With
End Sub
----------------------------------------------------------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
Range("c3").Validation.Delete
If Range("b3").Value = "Gestion agitation" Then
With Range("c3").Validation
.Add Type:=xlValidateList, Formula1:= _
"Agitateur électrique 1,Agitateur électrique 2"
End With
ElseIf Range("b3").Value = "Gestion niveau" Then
With Range("c3").Validation
.Add Type:=xlValidateList, Formula1:= _
"Sonde de niveau ATEX 1,Sonde de niveau non ATEX"
End With
ElseIf Range("b3").Value = "Gestion agitation + niveau" Then
With Range("c3").Validation
.Add Type:=xlValidateList, Formula1:= _
"Agitateur électrique 1,Agitateur électrique 2, " & _
"Sonde de niveau ATEX,Sonde de niveau non ATEX"
End With
End If
End Sub
-----------------------------------------------------------------------
Argument Formula1:= permet de remplir la liste de choix.
Dans cette exemple , je mets directement les mots de la liste.
Si tu veux remplir la liste de choix depuis une plage de cellule ,
tu peux donc écrire à la place: Formula1:="=$b$10:$b$100"
horazon
Messages postés9Date d'inscriptionlundi 8 septembre 2008StatutMembreDernière intervention10 septembre 2008 8 sept. 2008 à 17:00
Pour etre bien clair mon problème est le suivant
J'ai une liste de choix dont les 3 choix sont: Gestion agitation; Gestion niveau; Gestion agitation + niveau
Si je choisi Gestion de niveau je veux qu'une autre liste de choix apparaisse dans la cellule d'à côté et dont les choix seront Agitateur électrique; Agitateur électrique
Si je choisi Gestion de niveau je veux une liste qui contient les choix : Sonde de niveau ATEX; sonde de niveau non ATEX
Si je choisi Gestion agitation + niveau je veux que les 2 listes apparaissent l'une en dessous de l'autre.
Voila en espérant avoir été clair sinon posez moi des questions
horazon
Messages postés9Date d'inscriptionlundi 8 septembre 2008StatutMembreDernière intervention10 septembre 2008 9 sept. 2008 à 15:16
Private Sub Workbook_Open()
On Error Resume Next
Range("d23").Validation.Delete
With Range("d23").Validation
.Add Type:=xlValidateList, Formula1:= _
"Coffret gestion agitation,Coffret gestion niveau,Coffret gestion agitation et de niveau"
End With
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
Range("d24").Validation.Delete
If Range("d23").Value = "Coffret gestion agitation" Then
With Range("d24").Validation
.Add Type:=xlValidateList, Formula1:= _
"Agitateur 0.12kW 60Hz,Agitateur 0.12kW ATEX,Agitateur 0.18kW,Agitateur 0.18kW ATEX,Agitateur 0.37kW,Agitateur 0.25kW ATEX,Agitateur 0.75kW ATEX,Agitateur pneumatique + Stop vérin"
End With
ElseIf Range("d23").Value = "Coffret gestion niveau" Then
With Range("d24").Validation
.Add Type:=xlValidateList, Formula1:= _
"Sonde de niveau 1 non ATEX lg 430mm,Sonde de niveau 1 ATEX lg 430mm"
End With
ElseIf Range("d23").Value = "Coffret gestion agitation et de niveau" Then
With Range("d24").Validation
.Add Type:=xlValidateList, Formula1:= _
"Agitateur 0.12kW 60Hz,Agitateur 0.12kW ATEX,Agitateur 0.18kW,Agitateur 0.18kW ATEX,Agitateur 0.37kW,Agitateur 0.25kW ATEX,Agitateur 0.75kW ATEX,Agitateur pneumatique + Stop vérin, " & _
"Sonde de niveau 1 non ATEX lg 430mm,Sonde de niveau 1 ATEX lg 430mm"
End With
End If
End Sub
Voila ma macro, maintenant je voudrais pousser un peu plus loin en faisant en sorte que si d23= "Coffret gestion agitation et de niveau"
Alors La liste des agitateurs apparait dans d24 et la liste des Sonde dans d25.
horazon
Messages postés9Date d'inscriptionlundi 8 septembre 2008StatutMembreDernière intervention10 septembre 2008 9 sept. 2008 à 16:48
Désolé je n'ai pas reussi à éditer le post précédent.
Mon problème est résolu seulement un autre est apparu ... (engrenage infernal )
Lorsque je choisi Gestion agitation ou Gestion niveau tout ce passe bien la cellule D24 se change, tout ce passe bien également lorsque je choisis les 2 combinés les cellules D24 et D25 se changent.
Seulement lorsque je veux revenir en arrière la cellule D25 reste en liste de choix alors que je voudrais qu'elle se remette à 0 sans choix possible.
Donc je vous post ma nouvelle macro:
Private Sub Workbook_Open()
On Error Resume Next
Range("d23").Validation.Delete
With Range("d23").Validation
.Add Type:=xlValidateList, Formula1:= _
"Coffret gestion agitation,Coffret gestion niveau,Coffret gestion agitation et de niveau"
End With
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
Range("d24").Validation.Delete
If Range("d23").Value = "Coffret gestion agitation" Then
With Range("d24").Validation
.Add Type:=xlValidateList, Formula1:= _
"Agitateur 0.12kW 60Hz,Agitateur 0.12kW ATEX,Agitateur 0.18kW,Agitateur 0.18kW ATEX,Agitateur 0.37kW,Agitateur 0.25kW ATEX,Agitateur 0.75kW ATEX,Agitateur pneumatique + Stop vérin,_"
End With
ElseIf Range("d23").Value = "Coffret gestion niveau" Then
With Range("d24").Validation
.Add Type:=xlValidateList, Formula1:= _
"Sonde de niveau 1 non ATEX lg 430mm,Sonde de niveau 1 ATEX lg 430mm,_"
End With
ElseIf Range("d23").Value = "Coffret gestion agitation et de niveau" Then
With Range("d24").Validation
.Add Type:=xlValidateList, Formula1:= _
"Agitateur 0.12kW 60Hz,Agitateur 0.12kW ATEX,Agitateur 0.18kW,Agitateur 0.18kW ATEX,Agitateur 0.37kW,Agitateur 0.25kW ATEX,Agitateur 0.75kW ATEX,Agitateur pneumatique + Stop vérin,_"
End With
With Range("d25").Validation
.Add Type:=xlValidateList, Formula1:= _
"Sonde de niveau 1 non ATEX lg 430mm,Sonde de niveau 1 ATEX lg 430mm,_"
End With
End If