Explications:
Il n'y a pas de liste.
Dès l'ouverture et activation des macros cela déclenche la macro "listeville"en workbook_open
Tout comme Robert à l'ouverture de l'userform.
On passe sur tous les onglets (sauf "recap") on copie dans un dico tous les noms dans les colonnes A et cela sans doublons, on trie ensuite par ordre alphabétique et on alimente le combobox1.
Le click en combobox1 déclenche cette macro
Private Sub ComboBox1_Change()
Sheets("recap").ComboBox2.Clear
nom = Sheets("recap").ComboBox1
If nom = "" Then Exit Sub
For k = 1 To Sheets.Count
If Sheets(k).Name = "recap" Then GoTo saute:
With Sheets(k).[A1:A1000]
Set c = .Find(nom, LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
Sheets("recap").ComboBox2.AddItem Sheets(k).Name
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
saute:
Next
End Sub
et le Click sur combobox2 est......
Private Sub ComboBox2_Click()
Sheets(Sheets("recap").ComboBox2.Value).Select
End Sub
Passer par un userform comme le fait Robert possède un avantage.
Si tu crées une nouvelle ville celle-ci est prise en compte dès l'affichage de l'userform tandis que moi il faut lancer la macro "listeville"
Nombre de feuilles ilimitées comme les noms de villes.
Possibilité de mettre un bouton intitulé "mise à jour Villes" et affecter la macro "listeville"
Voici la macro listville en workbook_open il suffit de mettre..... listeville
Pour le faire sur ton fichier en fentre des projets double click sur Thisworkbook ensuite choisit à gauche Workbook et à droite Open et mets entre les 2 lignes listeville
ca va donner cela
Private Sub Workbook_Open()
listeville
End Sub
Sub listeville()
Sheets("recap").ComboBox1 = ""
Sheets("recap").ComboBox2 = ""
Set dico = CreateObject("Scripting.Dictionary")
For k = 1 To Sheets.Count
With Sheets(k)
If .Name = "recap" Then GoTo saute
For Each c In .Range(.[a1], .Cells(Rows.Count, 1).End(xlUp))
dico.Item(c.Value) = dico.Item(c.Value)
Next
saute:
End With
Next
a = dico.keys 'Obtient les éléments
For k = 0 To UBound(a) - 1 'trie éléments
For b = k + 1 To UBound(a)
If a(b) < a(k) Then
temp = a(b)
a(b) = a(k)
a(k) = temp
End If
Next
Next
Sheets("recap").ComboBox1.List = a
End Sub
Espère t'avoir un peu éclairé
Bruno