Supprimer feuille si son nom comporte la valeur de la listbox + "_"

ketinu

XLDnaute Nouveau
Bonjour,

J'ai créé un programme qui lorsque je rentre une valeur via un userform, celui-ci me l'inscrit dans une colonne et me créé un onglet portant le nom de la valeur.
Ici pas de soucis : création + suppression OK

Maintenant j'ai créé un nouvel userform afin d'ajouter un sous-groupe à ce groupe. Il me l'inscrit correctement dans la colonne à côté du groupe et me créé un onglet portant le nom : "nom du groupe_nom du sous-groupe".
La création = OK
La suppression = BLOQUE !!!:mad:

Je voudrais lors de la suppression du groupe que cela supprime les sous-groupes associés. Je passe par une listbox.
Le code pour la suppression de l'onglet groupe :
Code:
Worksheets(ListBox1.Text).Select
Worksheets(ListBox1.Text).Delete

Comment faire de même pour la suppression des onglets sous-groupe du style : nom du groupe_nom du sous-groupe ??

J'ai pensé à un LIKE ou un * mais le problème c'est que le nom de l'onglet est une variable et n'est pas fixe.

En gros il faudrait traduire cette instruction :

Code:
Si le nom de l'onglet est égal à la valeur de la listbox sélectionnée + "_" alors SUPPRIMER.

Merci de votre aide !

Ketinu !
 

tbft

XLDnaute Accro
Re : Supprimer feuille si son nom comporte la valeur de la listbox + "_"

bonjour

je pense à une boucle de parcourt du style
for each folio in qorksheets

next folio

avec un test:
if left(folio.name,len(nom_groupe))=nom_groupe then suppression de la folio folio.delete

tiens moi au courant....
 

ketinu

XLDnaute Nouveau
Re : Supprimer feuille si son nom comporte la valeur de la listbox + "_"

Bonjour TBFT, Bonjour le Forum,

Code:
For Each folio In Worksheets
If Left(folio.Name, Len(nom_groupe)) = nom_groupe Then folio.Delete
Next folio
Le code ne fonctionne pas puisque "nom_groupe" est composé du nom du groupe (listbox1), d'un tirait bas et du nom du sous-groupe.

Or dans le code, jamais on appelle la listbox1.value ...

il faudrait écrire un truc du genre :
Code:
nom_feuille= listbox1.value & "_"
Mais je ne sais pas comment faire.

D'autres idées ?
Merci
 

tbft

XLDnaute Accro
Re : Supprimer feuille si son nom comporte la valeur de la listbox + "_"

Bonjour

peut être comme ça
Nom_Feuille= listbox1.value
For Each folio In Worksheets
If Left(folio.Name, Len(Nom_Feuille)) = Nom_Feuille Then folio.Delete
Next folio

serait il possible d'avoir un bout de fichier avec au moins la macro...
 

ketinu

XLDnaute Nouveau
Re : Supprimer feuille si son nom comporte la valeur de la listbox + "_"

Re TBFT, et merci pour ta patience !

Le code ne fonctionne toujours pas ...

Je met ci-joint une partie du programme.
Soyons bref mais précis :
Dans la feuille, il y a une colonne groupe, une colonne sous-groupe, (et d'autres, mais on s'en fichtre)
J'ai une commande dans mon programme (pas présent dans celui-ci) qui me créée un onglet avec le nom du GROUPE, et une autre commande qui me créée un onglet GROUPE_SOUSGROUPE.

Je veux qu'à la suppression du groupe cela me supprime tous les onglets comportant le nom du groupe.

Merci
 

Pièces jointes

  • Application exemple.xlsm
    32.7 KB · Affichages: 44
  • Application exemple.xlsm
    32.7 KB · Affichages: 44
  • Application exemple.xlsm
    32.7 KB · Affichages: 45

pierrejean

XLDnaute Barbatruc
Re : Supprimer feuille si son nom comporte la valeur de la listbox + "_"

Bonjour ketinu

Voir debut de macro CommandButton1_Click()
qui contient l'essentiel pour la suppression
 

Pièces jointes

  • Application exemple.xlsm
    34.6 KB · Affichages: 38
  • Application exemple.xlsm
    34.6 KB · Affichages: 45
  • Application exemple.xlsm
    34.6 KB · Affichages: 37

ketinu

XLDnaute Nouveau
Re : Supprimer feuille si son nom comporte la valeur de la listbox + "_"

Bonjour Pierre Jean, le forum

Ton programme marche impeccablement ! Mais je rencontre quelques soucis que j'essaie de régler :
Lorsque je veux supprimer le groupe A, ile me supprime correctement l'onglet "a" et l'onglet "a_a", néanmoins il me supprime également l'onglet "base_de_donnees" . J'ai d'abord cru que c'était parce que "a" était présent dans "base_de_donnees" mais il n'en n'ai rien puisque cela ne me supprime pas l'onglet "accueil"...
Si je teste la suppression d'un autre onglet, tout va pourtant très bien ...
une idée avant que je m'arrache les cheveux ?
Merci
 

pierrejean

XLDnaute Barbatruc
Re : Supprimer feuille si son nom comporte la valeur de la listbox + "_"

Re

OK Le code souffre d'une imprecision
Remplace le par:

Code:
Private Sub CommandButton1_Click()
For n = 0 To ListBox1.ListCount - 1
  If ListBox1.Selected(n) Then
    For Each sh In Sheets
      If sh.Name = ListBox1.List(n) Or Left(sh.Name, Len(ListBox1.List(n)) + 1) = ListBox1.List(n) & "_" Then sh.Delete
    Next
  End If
Next
Exit Sub
 

ketinu

XLDnaute Nouveau
Re : Supprimer feuille si son nom comporte la valeur de la listbox + "_"

Bonjour à tous !

Je rencontre une petit soucis.
Je souhaite rassembler le code de la suppression du sous-groupe de la base de données et le code de suppression de l'onglet du sous-groupe.

Mais le premier code que m'a fait pierrejean ne fonctionne plus :'( ! En mode debug, il me dit que sh est "vide" ...

Que faire ?

Code:
'---------------- Suppression des onglets --------------
Sheets("Base_de_Donnees").Select
MsgBox "1"
For n = 0 To ListBox1.ListCount - 1
  MsgBox "2"
  If ListBox1.Selected(n) Then
    For Each sh In Sheets
      If sh.Name = ListBox1.List(n) Or Left(sh.Name, Len(ListBox1.List(n)) + 1) = ListBox1.List(n) & "_" Then sh.Delete
    Next
  End If
Next
Exit Sub
'---------------- Suppression BDD ----------------------
'
'
'Cells.Select
'   Range("A1").Activate
'   Selection.AutoFilter
'   ''Je voudrais lui dire de filtrer jusque la dernière cellule pleine ....
'    For n = 0 To ListBox1.ListCount - 1
'    ActiveSheet.Range("$A$1:$A$65530").AutoFilter Field:=1, Criteria1:=ComboBox1.Value
'    ActiveSheet.Range("$A$1:$A$65530").AutoFilter Field:=2, Criteria1:=ListBox1.List(n)
'    Next
'
'With Worksheets("Base_de_donnees").Range("a1:a65530") 'prend en compte l'onglet
'
'        pa = "" 'réinitialise la variable pa
'        Set r = .Find(ComboBox1.Value, , xlValues, xlWhole) 'définit la recherche
'        If Not r Is Nothing Then 'condition : si il existe au moins une occurrence trouvée
'
'           pa = r.Address 'définit la variable pa
'            Do 'exécute
'
'                r.Select
'                Selection.EntireRow.Delete
'
'               Set r = .FindNext 'reféfinit la recherche r (Prochaine occurrence)
'            Loop While Not r Is Nothing 'And c.Address <> firstAddress
'    Selection.AutoFilter
'    'ComboBox1_Change
'    Dim f
'  Set f = Sheets("Base_de_donnees")
'  Set mondico = CreateObject("Scripting.Dictionary")
'  For Each c In Range(f.[A2], f.[a65000].End(xlUp))
'     mondico(c.Value) = c.Value
'  Next c
'  temp = mondico.items
'  'Call Tri3(temp, LBound(temp), UBound(temp))
'  Me.ComboBox1.List = temp
'            End If
'            End With


End Sub

Merci
 

ketinu

XLDnaute Nouveau
Re : Supprimer feuille si son nom comporte la valeur de la listbox + "_"

Hop !
Merci de m'accorder de votre temps !
 

Pièces jointes

  • exemple suppression sousgroupe.xlsm
    46.7 KB · Affichages: 34
  • exemple suppression sousgroupe.xlsm
    46.7 KB · Affichages: 34
  • exemple suppression sousgroupe.xlsm
    46.7 KB · Affichages: 35

pierrejean

XLDnaute Barbatruc
Re : Supprimer feuille si son nom comporte la valeur de la listbox + "_"

Re

Voila
La question etant differente de l'originale la réponse est differente
oiginale : supprimer un groupe et les sous groupes
actuelle: supprimer un sous groupe d'un groupe
 

Pièces jointes

  • exemple suppression sousgroupe.xlsm
    47.3 KB · Affichages: 34
  • exemple suppression sousgroupe.xlsm
    47.3 KB · Affichages: 34
  • exemple suppression sousgroupe.xlsm
    47.3 KB · Affichages: 32

ketinu

XLDnaute Nouveau
Re : Supprimer feuille si son nom comporte la valeur de la listbox + "_"

AAAH ! parfait !

Néanmoins, quelques petits bugs que je n'arrive pas à résoudre :
Lorsqu'il n'y a qu'un sous-groupe dans la listbox1 :

> lors de la suppression de ce dernier dans la listbox1, cette dernière ne se met pas à jour ! comment faire ?

> j'ai rajouté une condition si aucun sous-groupe n'était sélectionné, de ne rien faire et d'afficher un msgbox. Mais lorsqu'il n'y a qu'1 sous-groupe, le programme plante ...
Pourquoi ?

Merci
 

Pièces jointes

  • Copie de exemple suppression sousgroupe.xlsm
    44 KB · Affichages: 21
  • Copie de exemple suppression sousgroupe.xlsm
    44 KB · Affichages: 23
  • Copie de exemple suppression sousgroupe.xlsm
    44 KB · Affichages: 23

pierrejean

XLDnaute Barbatruc
Re : Supprimer feuille si son nom comporte la valeur de la listbox + "_"

Re

Rien compris a ce que tu veux faire apres la suppression de la feuille ?

Voici une solution pour eviter de planter apres suppression de la seule feuille existante
 

Pièces jointes

  • Copie de exemple suppression sousgroupe.xlsm
    44.3 KB · Affichages: 32
  • Copie de exemple suppression sousgroupe.xlsm
    44.3 KB · Affichages: 37
  • Copie de exemple suppression sousgroupe.xlsm
    44.3 KB · Affichages: 35

Discussions similaires

Statistiques des forums

Discussions
312 505
Messages
2 089 070
Membres
104 020
dernier inscrit
Mzghal