XL 2013 La fonction INDIRECT dans les listes ne fonctionne pas

Emeline20

XLDnaute Nouveau
Bonjour,

J'ai pour habitude d'utiliser la fonction INDIRECT pour qu'une liste déroulante dépende d'une autre liste déroulante.
Or sur ce fichier elle ne veut pas fonctionner. Est-ce que quelqu'un voit d'où peut venir le problème ?

Merci d'avance

P.S. Si quelqu'un est chaud, je souhaite également que les cases "Combustible 2 - PCI 2 - Humidité 2" soient barrées d'un trait diagonal si le PCI 1 = 100 %
 

Pièces jointes

  • Tabl-croisé-dyn_HAP-origine.xlsx
    15.6 KB · Affichages: 11
Dernière édition:

job75

XLDnaute Barbatruc
Bonsoir Emeline20, JHA, djidji59430,

Pour mettre des bordures diagonales il faut du VBA.

Alors faisons tout en VBA, le code de la 1ère feuille :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim col As Variant
Cells.Validation.Delete 'RAZ des validations
col = ActiveCell.Column
If ActiveCell.Row = 1 Or Not (col = 2 Or col = 3 Or col = 6 Or col = 9) Then Exit Sub
With Feuil2 'CodeName
    If col <> 3 Then
        col = IIf(col = 2, 1, 10)
    Else
        col = Application.Match(ActiveCell(1, 0), .Rows(2), 0)
    End If
    If IsNumeric(col) Then ActiveCell.Validation.Add xlValidateList, Formula1:="=" & .Range(.Cells(3, col), .Cells(.Rows.Count, col).End(xlUp)).Address(External:=True)
End With
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range, i As Byte
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive les évènements
'---effacements des colonnes C et D---
Set r = Intersect(Target, Range("B2:B" & Rows.Count))
If Not r Is Nothing Then Intersect(r.EntireRow, [C:D]) = ""
'---calcul de la colonne D---
Set r = Intersect(Target, Range("C2:D" & Rows.Count), UsedRange)
If Not r Is Nothing Then
    Set r = Intersect(r.EntireRow, [D:D])
    For Each r In r.Areas
        r = "=IFERROR(VLOOKUP(RC[-1],'Listes déroulantes'!R2C7:R7C8,2,0),"""")"
        r = r.Value 'supprime les formules
    Next r
End If
Application.EnableEvents = True 'réactive les évènements
'---Bordures diagonales---
Set r = Intersect(Target, Range("G2:G" & Rows.Count), UsedRange)
If Not r Is Nothing Then
    For Each r In r
        For i = 5 To 6
            With Intersect(r.EntireRow, Range("I:K")).Borders(i)
                If r = 100 Then .Weight = xlThin Else .LineStyle = xlNone
            End With
    Next i, r
End If
End Sub
Notez que les valeurs de la colonne D ne peuvent plus être modifiées manuellement.

A+
 

Pièces jointes

  • Tabl-croisé-dyn_HAP-origine(1).xlsm
    28.4 KB · Affichages: 2

Statistiques des forums

Discussions
312 088
Messages
2 085 202
Membres
102 817
dernier inscrit
Nini668