|
|
|
|
Bonjour,
Lors d'un choix dans une combobox d'un certain domaine [ Range("Q4:Q63") ] on souhaite sélectionner une plage plus réduite d'autre données.
La procédure pour la sélection des plages plus réduite fonctionne bien mais pour le choix dans la première combobox, je ne peux le faire que pour une cellule ( dans mon cas "Q4").
Le code parlera plus.
Voici l'appel de la macro lors des changements dans les combobox :
Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Address
Case Range("Q4").Address ' ou Case Range("Q4").ends(xldown).adress
Application.Run "'" & Excel.ActiveWorkbook.Path & "\MaMacro.xls'!MacrosChange"
End Select
End Sub
Public Sub MacrosChange()
'
' Selection des codes projets en fonction du nom du domaine
' Macro enregistrée le 18/06/2009 par odaxys
'
If Range("Q4").Text = "Domaine1" Then
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=CdPr1"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
ElseIf Range("Q4").Text = "Domaine2" Then
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=CdPr2"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
ElseIf Range("Q4").Text = "Domaine3" Then
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=CdPr3"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
Else
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=CdPr"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End If
End Sub
Select Case Target.Address
Case Range("Q4").Address ' ou Case Range("Q4").ends(xldown).adress
Configuration: Windows XP Firefox 3.0.11
Bonjour,
|
Désolé c'est pas facile à mettre sur le papier.
Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Address
Case Range("Q4").Address
Application.Run "'" & Excel.ActiveWorkbook.Path & "\MaMacro.xls'!MacrosChange"
End Select
End Sub
ça fonctionne très bien mais uniquement pour Q4. Ce que je souhaiterai c'est: Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Address
Case Range("Q4:Q63").Address ' ou Case Range("Q4").ends(xldown).adress
Application.Run "'" & Excel.ActiveWorkbook.Path & "\MaMacro.xls'!MacrosChange"
End Select
End Sub
La macro se trouve sur un autre fichier que ma feuille de calcule Faut il passer un paramètre à la macro ? une adresse ? Merci pour le coup d'œil. |
Je subodore que le pb vient de ta target.address, essaie de le piéger avec le débogueur. ceci dit, ta MacrosChange ne fait référence qu'à la valeur de "Q4"?
|
BonsoIr Lila, Coco_rico
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("Q4:Q63")) Is Nothing Then: Exit Sub
Application.Run ("macros.xls!MacrosChange")
End Sub
--
---------------------- Option Explicit Sub MacrosChange()
Dim liste As String
Select Case ActiveCell
Case Is = "domaine1"
liste = "=cdpr1"
Case Is = "domaine2"
liste = "=cdpr2"
'......autres cas dom3 &4&1....
Case Else
Exit Sub
End Select
With Range(ActiveCell.Address).Validation
.Delete
.Add Type:=xlValidateList, Formula1:=liste
End With
End Sub
Ci joint tite démo avec uniquement liste pour "domaine1" http://cjoint.com/?gswJbrgMUA Cordialement, Michel |
Bonjour,
|
Je pense m'en être sorti par un Select dans la macro :
Sub MacrosChange()
Dim liste As String
Select Case ActiveCell
Case Is = "domaine1"
liste = "=CdPr1"
Case Is = "domaine2"
liste = "=CdPr2"
Case Is = "domaine3L"
liste = "=CdPr3"
Case Else
Exit Sub
End Select
Range("R4:R63").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, Formula1:=liste
End With
End Sub
Après, je ne sais pas comment dé sélectionner mais ça n'est pas le souci majeur. Toutes mes salutations à michel_m pour ton aide très précieuse C'est le Intersect(Target, Range("Q4:Q63")) qui m'a sauvé. Cordialement. |