Problème code VBA liste déroulante "BD"
Bonjour / Bonsoir
j'aurais besoin de votre aide.
J'ai un soucis avec une macro Vba, quand j'appuis sur le boutton " crée les listes nommées" cela me créé une cellules Liste en "H1" Ainsi que toute les donner insérais dans A2 a F24 , le soucis et que quand j'ajoute un nouveau niveau cela fait planter mon code vba a la ligne 29 celle en jaune, j'ai pourtant essayer de modifier le plus possible mais cela étais encore pire, donc si une personne a un solution je serais heureux merci beaucoup de votre aide .
Voici le fichier
Bonjour TheTuto
Il faudrait peut-être en suivre un "Tuto" sur la méthode pour avoir de l'aide
Plus sérieusement, sans fichier cela va s’avérer très compliqué
@+
Bonjours BrunoM45 Merci de m'avoir répondu
je n'ai pas très bien compris il faut que je transfère mon fichier excel ?
Re,
Oups, je crois que j'ai les yeux pleins de "caca"
@+
Re,
Voici le code corrigé
Sub CreeListeBD()
colBD = 1
colListe = 8
Set f = Sheets("bd")
ligne = 1
f.Cells(ligne + 1, colListe).Resize(1000, 10).Clear
Set mondico = CreateObject("Scripting.Dictionary")
For Each c In Range(f.Cells(2, colBD), f.Cells(65000, colBD).End(xlUp))
mondico(c.Value) = c.Value
Next c
f.Cells(ligne, colListe) = "Liste"
f.Cells(ligne, colListe).Font.Bold = True
f.Cells(ligne + 1, colListe).Resize(mondico.Count) = Application.Transpose(mondico.items)
ActiveWorkbook.Names.Add Name:="Liste", RefersTo:=f.Cells(ligne + 1, colListe).Resize(mondico.Count)
'---- niv 2,3,..
For niv = 2 To 5 ' adapter le nombre de niveaux
colBD = colBD + 1
colListe = colListe + 2
ligne = 1
For Each c In Range(f.Cells(2, colListe - 2), f.Cells(65000, colListe - 2).End(xlUp))
If c <> "" And c.Font.Bold <> True Then
Set mondico = CreateObject("Scripting.Dictionary")
For Each d In Range(f.Cells(2, colBD), f.Cells(65000, colBD).End(xlUp))
If d.Offset(, -1) = c Then mondico(d.Value) = d.Value
Next d
f.Cells(ligne, colListe) = c
f.Cells(ligne, colListe).Font.Bold = True
f.Cells(ligne + 1, colListe).Resize(mondico.Count) = Application.Transpose(mondico.items)
Dim sNom As String
sNom = Replace(c, " ", "_")
If IsNumeric(Left(sNom, 2)) Then sNom = "_" & sNom
ActiveWorkbook.Names.Add Name:=sNom, RefersTo:=f.Cells(ligne + 1, colListe).Resize(mondico.Count)
ligne = ligne + mondico.Count + 1
End If
Next c
Next niv
End SubLe problème était que tu voulais donner un nom commençant par un chiffre "2000x1500" par exemple
Et ça, Excel n'aime pas
J'ai donc mis un underscore en premier si ça commence par un chiffre, mais tu peux mettre autre chose
@+
Re,
Voici le code corrigé
Sub CreeListeBD() colBD = 1 colListe = 8 Set f = Sheets("bd") ligne = 1 f.Cells(ligne + 1, colListe).Resize(1000, 10).Clear Set mondico = CreateObject("Scripting.Dictionary") For Each c In Range(f.Cells(2, colBD), f.Cells(65000, colBD).End(xlUp)) mondico(c.Value) = c.Value Next c f.Cells(ligne, colListe) = "Liste" f.Cells(ligne, colListe).Font.Bold = True f.Cells(ligne + 1, colListe).Resize(mondico.Count) = Application.Transpose(mondico.items) ActiveWorkbook.Names.Add Name:="Liste", RefersTo:=f.Cells(ligne + 1, colListe).Resize(mondico.Count) '---- niv 2,3,.. For niv = 2 To 5 ' adapter le nombre de niveaux colBD = colBD + 1 colListe = colListe + 2 ligne = 1 For Each c In Range(f.Cells(2, colListe - 2), f.Cells(65000, colListe - 2).End(xlUp)) If c <> "" And c.Font.Bold <> True Then Set mondico = CreateObject("Scripting.Dictionary") For Each d In Range(f.Cells(2, colBD), f.Cells(65000, colBD).End(xlUp)) If d.Offset(, -1) = c Then mondico(d.Value) = d.Value Next d f.Cells(ligne, colListe) = c f.Cells(ligne, colListe).Font.Bold = True f.Cells(ligne + 1, colListe).Resize(mondico.Count) = Application.Transpose(mondico.items) Dim sNom As String sNom = Replace(c, " ", "_") If IsNumeric(Left(sNom, 2)) Then sNom = "_" & sNom ActiveWorkbook.Names.Add Name:=sNom, RefersTo:=f.Cells(ligne + 1, colListe).Resize(mondico.Count) ligne = ligne + mondico.Count + 1 End If Next c Next niv End SubLe problème était que tu voulais donner un nom commençant par un chiffre "2000x1500" par exemple
Et ça, Excel n'aime pas
J'ai donc mis un underscore en premier si ça commence par un chiffre, mais tu peux mettre autre chose
@+
C'est vraiment génial de ta part j'ai passé une journée, mes je n'ai rien compris en fait c'étais tout bête ^^ Vraiment merci a toi tu me sauve la vie , mais je comprend pas pourquoi mon Choix 5 ne marche pas alors qu'il est bien relier a ma liste étrange non ?
Arf,
Vu le code que j'ai mis, la donnée de validation à mettre est
=INDIRECT("_" & V5)Bonjour à tous,
Une proposition sans VBA.
Réalisé avec Récupérer et transformer (Power Query).
Prévoir le café et le doliprane.
Cdlt.
holà
C'est presque ça Bruno
Merci à toi Jean-Eric pour ton aide mais ce n'est pas une liste dynamique
j'ai mis des détails dans le Excel ci-dessous :
Bonjour,
Que veux-tu dire par non dynamique ?
Ta solution n'est pas dynamique : tu dois cliquer sur un bouton.
Toutes les données sont sous forme de tableaux structurés (dynamiques).
Pour la solution Power Query, c'est : Ruban, Données, Actualiser tout...
Et si tu veux actualiser avec un bouton :
Public Sub RefreshQueries()
ThisWorkbook.RefreshAll
End SubCdlt.
Bonjour,
Un petit retour ?
Cdlt.
Bonjour,
Que veux-tu dire par non dynamique ?
Ta solution n'est pas dynamique : tu dois cliquer sur un bouton.
Toutes les données sont sous forme de tableaux structurés (dynamiques).
Pour la solution Power Query, c'est : Ruban, Données, Actualiser tout...
Et si tu veux actualiser avec un bouton :
Public Sub RefreshQueries() ThisWorkbook.RefreshAll End SubCdlt.
Test List 1 (1).xlsm
Hey Jean-Eric , pour commencer excuse-moi de ne pas avoir répondu plutôt, j'avais des problèmes des famille.
Ce que je veux dire par dynamique, c'est que mon filtre doit marcher à partir de ma liste, je te montre un exemple :
Je tiens à te remercier car c'est super gentil à toi de vouloir m'aider.