Bonjour,
Après une après midi de recherche, j'abandonne ! La ligne surlignée contient une érreur. En effet, la validation des donnée fonctionne parfaitement si je la tape à la main, mais bloque par macro. Quelqu'un peut il m'épargner le suicide ???
Sub nommerchan()
Call Listecateg
Dim categ As String
Dim param As String
Dim listcateg As String
Dim feuil as string
Dim f1 as Sheet
Dim f2 as Sheet
feuil = ActiveSheet.Range("Q2").Value
Set f1 = Sheets(feuil)
Set f2 = ActiveSheet
'définition noms plages
categ = "categorie_" & f2.Range("Q2").Value
param = "parametre_" & f2.Range("Q2").Value
listcateg = "liste_categorie_" & f2.Range("Q2").Value
'RAZ plages précédentes
ActiveWorkbook.Names(listcateg).Delete
ActiveWorkbook.Names(categ).Delete
ActiveWorkbook.Names(param).Delete
'définie plage listecatégorie
ActiveWorkbook.Names.Add name:=listcateg, RefersTo:=Range("BN7", Range("BN7").End(xlDown))
'définie plage catégorie
f1.Activate
ActiveWorkbook.Names.Add name:=categ, RefersTo:=Range("A7", Range("A300").End(xlUp))
'définie plage parametre
ActiveWorkbook.Names.Add name:=param, RefersTo:=Range("B7", Range("B300").End(xlUp))
'redéfini menu déroulant données graphiques
f2.Activate
For Each cel In ActiveSheet.UsedRange
temp = 0
If cel.Interior.ColorIndex = 34 Then
With cel.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=" & listcateg
End With
End If
If cel.Interior.ColorIndex = 35 Then
If cel.Offset(0, -4).Value = "" Then
cel.Offset(0, -4).Value = Range("BN9").Value
temp = 1
End If
With cel.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=Application.Offset(param, Application.Match(cel.Offset(0, -4).Value, categ, 0) - 1, 0, Application.CountIf(categ, cel.Offset(0, -4).Value))
'OU '"=DECALER(" & param & ";EQUIV(" & cel.Offset(0, -4).Address & ";" & categ & ";0)-1;0;NB.SI(" & categ & ";" & cel.Offset(0, -4).Address & "))"
If temp = 1 Then
cel.Offset(0, -4).Value = ""
End If
End If
Next
End Sub