Bonjour le forum.
J'ai un tableau dans lequel je souhaite récupérer les données pour les mettre en liste déroulantes.
Grace à d'autre personne du forum qui m'ont donné un lien pour le traitement en cascade des menu déroulant, j'ai copier la macro suivant qui fonctionne très bien mais pas dans mon cas à cause d'un point particulier.
Dans mon tableau, (voir fichier joint), les données ont un tiret (- celui du 6) en deuxième position ou en 4ème position selon les colonnes.
Si j'enlève ce tiret, la macro fonctionne très bien et crée les regroupements.
Avec ce tiret, elle plante.
Le souci est qu'il ne faut pas que je supprime ces tirets car sinon c'est l'importation automatique de fichier excel dans le logiciel de compta qui planterai.
Je ne connais que très peu VBA et donc toute aide serai la bienvenue.
Par avance merci
Cordialement
Dominique
Voici la macro en l'etat :
Sub CreeListeLedger()
colBD = 1
colListe = 8
Set f = Sheets("ledger1")
ligne = 1
f.Cells(ligne + 1, colListe).Resize(65000, 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) = "ledger"
f.Cells(ligne, colListe).Font.Bold = True
f.Cells(ligne + 1, colListe).Resize(mondico.Count) = Application.Transpose(mondico.items)
ActiveWorkbook.Names.Add Name:="ledger", RefersTo:=f.Cells(ligne + 1, colListe).Resize(mondico.Count)
'---- niv 2,3,..
For niv = 1 To 2 ' 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)
ActiveWorkbook.Names.Add Name:=Replace(c, " ", "_"), RefersTo:=f.Cells(ligne + 1, colListe).Resize(mondico.Count)
ligne = ligne + mondico.Count + 1
End If
Next c
Next niv
End Sub
J'ai un tableau dans lequel je souhaite récupérer les données pour les mettre en liste déroulantes.
Grace à d'autre personne du forum qui m'ont donné un lien pour le traitement en cascade des menu déroulant, j'ai copier la macro suivant qui fonctionne très bien mais pas dans mon cas à cause d'un point particulier.
Dans mon tableau, (voir fichier joint), les données ont un tiret (- celui du 6) en deuxième position ou en 4ème position selon les colonnes.
Si j'enlève ce tiret, la macro fonctionne très bien et crée les regroupements.
Avec ce tiret, elle plante.
Le souci est qu'il ne faut pas que je supprime ces tirets car sinon c'est l'importation automatique de fichier excel dans le logiciel de compta qui planterai.
Je ne connais que très peu VBA et donc toute aide serai la bienvenue.
Par avance merci
Cordialement
Dominique
Voici la macro en l'etat :
Sub CreeListeLedger()
colBD = 1
colListe = 8
Set f = Sheets("ledger1")
ligne = 1
f.Cells(ligne + 1, colListe).Resize(65000, 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) = "ledger"
f.Cells(ligne, colListe).Font.Bold = True
f.Cells(ligne + 1, colListe).Resize(mondico.Count) = Application.Transpose(mondico.items)
ActiveWorkbook.Names.Add Name:="ledger", RefersTo:=f.Cells(ligne + 1, colListe).Resize(mondico.Count)
'---- niv 2,3,..
For niv = 1 To 2 ' 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)
ActiveWorkbook.Names.Add Name:=Replace(c, " ", "_"), RefersTo:=f.Cells(ligne + 1, colListe).Resize(mondico.Count)
ligne = ligne + mondico.Count + 1
End If
Next c
Next niv
End Sub