Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Liste déroulante sur cellule

Ben22play

XLDnaute Nouveau
Bonjour,

J'ai un rapide travail de fichier dans le cadre de mon stage. Le problème est le suivant, le fichier comporte des demandes de logement avec une multitude de colonne dont 10 colonnes qui représente le choix des communes (Feuille "Stats" Colonne BB à BH) Je souhaitais y intégrer une cellule (cellule BB1) qui afficherai la liste villes saisies et une fois la ville choisi que toutes les demandes ayant la ville saisie dans les 10 communes de choix s'affichent.

Pour cela j'ai établi un code à l'aide de différents aides sur les forums cependant je n'arrive pas a voir pourquoi la liste déroulante ne s'affiche pas cellule BB1. Seul le balayage des colonnes pour établir la liste de villes saisies fonctionne. Il faudrait une liste déroulante (liste déroulante avec comme choix toutes les villes détectés par le balayage).

Merci de votre aide. Le fichier est en PJ pour y voir plus claire.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
'creation de liste a partir de la feuille Liste
'---Target est la cellule avant changeement
'creation de la liste1
   For N = 3 To Sheets("Listes").Range("A65536").End(xlUp).Row
    liste = liste & Sheets("Listes").Range("A" & N) & ","
    If N > 3 Then liste1 = liste1 & Sheets("Listes").Range("A" & N) & ","
  Next N
  'si on rajoute un numéro de demande
If Target.Column = 54 And Target.Row > 3 Then
'mise a jour de la liste de validation des colonnes O e P
   With Target.Offset(0, 54).Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:=liste
    End With
    With Target.Offset(0, 55).Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:=liste
    End With
End If
'Si c'est la cellule bb1 qui a changé
If Target.Address = "$BB$1" Then

Application.ScreenUpdating = False
'on demasque toutes les lignes
Rows.Hidden = False
'pour Tous on quitte la sub
  If Target = "TOUS" Then Exit Sub
'balayage
For N = 6 To Range("BB65536").End(xlUp).Row
'si colonne
   If Range("BB" & N) = Target Or Range("BC" & N) = Target Or Range("BD" & N) = Target Or Range("BE" & N) = Target Or Range("BF" & N) = Target Or Range("BG" & N) = Target Or Range("BH" & N) = Target Then
   'on demasque la ligne
     Rows(N).Hidden = False
   Else
   'sinon on la masque
     Rows(N).Hidden = True
   End If
Next N
Application.ScreenUpdating = True
End If
End Sub
 

Pièces jointes

  • Demandes_Excel.xlsm
    51.3 KB · Affichages: 18

Lone-wolf

XLDnaute Barbatruc
Bonjour Ben

Je ne comprends pas ceci

For N = 3 To Sheets("Listes").Range("A65536").End(xlUp).Row
liste = liste & Sheets("Listes").Range("A" & N) & ","
If N > 3 Then liste1 = liste1 & Sheets("Listes").Range("A" & N) & ","
Next N

Ce ne serait pas plutôt

With Sheets("Listes")
For N = 3 To .Range("A" & Rows.count).End(xlUp).Row
liste = liste & .Range("A" & N) & ","
If N > 3 Then liste1 = liste
Next N
End With

Si tu veux créer des listes de validations. Exemple

VB:
Sub TestValidations()
Dim derlig As Long, i As Long, x As Integer, plage(1 To 5) As String

    On Error Resume Next

    With Feuil1
        .Range("a2:e" & Rows.Count).Validation.Delete
        derlig = .Range("a" & Rows.Count).End(xlUp).Row + 1
        x = 1
        plage(1) = "=Feuil2!$A$2:$A$65536"
        plage(2) = "=Feuil2!$B$2:$B$65536"
        plage(3) = "=Feuil2!$C$2:$C$65536"
        plage(4) = "=Feuil2!$D$2:$D$65536"
        plage(5) = "=Feuil2!$E$2:$E$65536"

        For i = 2 To derlig
            x = x + 1
            With .Range("a" & x)
                .Validation.Add Type:=xlValidateList, Formula1:=plage(1)
            End With
            With .Range("b" & x)
                .Validation.Add Type:=xlValidateList, Formula1:=plage(2)
            End With
            With .Range("c" & x)
                .Validation.Add Type:=xlValidateList, Formula1:=plage(3)
            End With
            With .Range("d" & x)
                .Validation.Add Type:=xlValidateList, Formula1:=plage(4)
            End With
            With .Range("e" & x)
                .Validation.Add Type:=xlValidateList, Formula1:=plage(5)
            End With
        Next i
    End With
End Sub
 

Fred0o

XLDnaute Barbatruc
Bonjour Ben22play

Touta d'abord, j'ai corrige ta macro. La ligne suivante :
VB:
For N = 6 To Sheets("Stats").Range("B50000").End(xlUp).Row
A ete remplacee par ceci :
VB:
For N = 6 To Sheets("Stats").Range("BB50000").End(xlUp).Row

Ensuite, j'ai cree un nom dynamique, faisant reference a la liste des villes ainsi cree en feuille "Listes" en A4:Axx (La fonction OFFSET est la fonction DECALER en Francais) :



Pour finir, j'ai cre en cellule BB1 de la feuille Stats, un validation de donnees faisant reference a la liste de villes nommee "List_Villes"



Voir fichier en piece jointe.
 

Pièces jointes

  • Demandes_Excel_v1.xlsm
    49.8 KB · Affichages: 15

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…