re,
Faites les changements suivants:
1. Allez dans la feuille Synoptique des moyens et remplacez tout le code par celui ci-dessous
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("Choix_ville")) Is Nothing Then
Dim dcol As Integer, lig As Integer, i As Integer
Dim cel As Range, plage As Range
Call Affiche
dcol = ActiveSheet.UsedRange.Columns.Count
If Target = vbNullString Then
lig = Target.Offset(-1, 0).Row
For i = 2 To dcol Step 5
Columns(i).Hidden = True
Columns(i + 2).Hidden = True
Columns(i + 4).Hidden = True
Next i
Rows("2:" & lig).EntireRow.Hidden = True
Liste_validation Target
Exit Sub
End If
On Error Resume Next
lig = WorksheetFunction.Match(Target.Value, Range("Villes")) + 1
Liste_validation Target
Set plage = Range(Cells(lig, 2), Cells(lig, dcol))
'masquer affiche colonne
For Each cel In plage
If cel.Value > 0 Then
cel.EntireColumn.Hidden = False
Else: cel.EntireColumn.Hidden = True
End If
Next cel
'masquer afficher villes
For Each cel In Range("Villes")
If cel.Row = Target.Row Then Exit Sub
If cel <> Target.Value Then
Rows(cel.Row).Hidden = True
Else: Rows(cel.Row).Hidden = False
End If
Next cel
End If
Range("Choix_ville").Select 'selectionne la cellule contenant le liste deroulante
End Sub
2. Allez dans le module 1 et en dessous du code Affiche, ajoutez ce code-ci
Sub Liste_validation(Target As Range)
Dim tablo
Dim cel As Range
For Each cel In Range("Villes")
If cel Like "*" & Target & "*" Then
tablo = tablo & cel.Value & ","
End If
Next cel
With Range("Choix_ville").Validation
.Delete
.Add Type:=xlValidateList, Formula1:=tablo
.ShowInput = True
.ShowError = False
End With
End Sub
Pour le test :
- Tapez une lettre ou 2 là où se trouve la liste de validation puis Entree
- Ensuite choisir dans la liste la ville que vous voulez
Si vous videz la cellule contenant la liste de validation, cela ré-affichera toutes les villes
Si vous voulez un petit plus :
Allez dans la feuille "Synoptique des moyens" ajoutez ce code en dessous du code Private Sub Worksheet_Change(ByVal Target As Range).
Cela déroulera automatiquement la liste de validation pour faire votre choix
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("Choix_ville")) Is Nothing Then SendKeys "%{down}"
End Sub