A voir également:
- MACRO Excel: Suppr feuille / Name list
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si et excel - Guide
6 réponses
Bien sûre les données du tableau évoluent...
En fait, le tableau ressort les noms des onglets à supprimer. Les onglets sont issus d'une mise à jour qui crée une nouvelle feuille et nomme la feuille à la date de jour. Pour éviter de me retrouver avec 500 feuilles, je veux supprimer les feuilles de la semaine suivante (sauf le vendredi). j'ai donc créé un tableau dans exel, qui me donne les dates (et donc les nom des feuilles) que je ne dois pas garder.
En fait, le tableau ressort les noms des onglets à supprimer. Les onglets sont issus d'une mise à jour qui crée une nouvelle feuille et nomme la feuille à la date de jour. Pour éviter de me retrouver avec 500 feuilles, je veux supprimer les feuilles de la semaine suivante (sauf le vendredi). j'ai donc créé un tableau dans exel, qui me donne les dates (et donc les nom des feuilles) que je ne dois pas garder.
salut !
je te réponds rapidement avant de sortir (pas le temps de tester la solution) mais sur le principe il faut que tu changes l'ordre des boucles ou que simplement tu n'en fasses qu'une seule. Je m'explique : si j'ai bien compris ton problème, tu possèdes le nom des onglets à supprimer sur une feuille excel. il faut donc regarder tous ces noms l'un à la suite de l'autre et en conséquence supprimer l'onglet correspondant.
de tête ça donne du code comme ça :
Dim plageNoms as Range
set plageNoms = Range("ta plage qui contient les noms des onglets à supprimer")
Dim Name as String
For Each cell In plageNoms
' là on affecte le contenu de la cellule à ta variable Name
Name = cell.Value
' et on supprime l'onglet correspondant
Sheets("Name").Delete
Application.DisplayAlerts = True
Next cell
bon courage (et bonne soirée !)
ed
je te réponds rapidement avant de sortir (pas le temps de tester la solution) mais sur le principe il faut que tu changes l'ordre des boucles ou que simplement tu n'en fasses qu'une seule. Je m'explique : si j'ai bien compris ton problème, tu possèdes le nom des onglets à supprimer sur une feuille excel. il faut donc regarder tous ces noms l'un à la suite de l'autre et en conséquence supprimer l'onglet correspondant.
de tête ça donne du code comme ça :
Dim plageNoms as Range
set plageNoms = Range("ta plage qui contient les noms des onglets à supprimer")
Dim Name as String
For Each cell In plageNoms
' là on affecte le contenu de la cellule à ta variable Name
Name = cell.Value
' et on supprime l'onglet correspondant
Sheets("Name").Delete
Application.DisplayAlerts = True
Next cell
bon courage (et bonne soirée !)
ed
Merci Ed
C'est presque ça. La solution n'est pas loin, j'avais fait plus compliqué lol !
Le soucis est qu'en effet l'onglet est à la date du jour, mais c'est fait par macro, et la macro nomme le jour de cette manière "2392009" pour une date du 23/09/2009. Forcément le nom de la feuille ne correspond par textuellement à la date. C'est pourkoi j'avais créé un tableau à part sur une autre feuille pour faire les recherches. J'ai indiqué sur chaque page dans la cellule G3 la date de mise à jour.
Le soucis que j'ai c'est de dire "Supprimer la feuilles dont la cellule G3 est dans PlageNoms"
Dim plageNoms As Range
Set plageNoms = Range("c13:c16")
Dim Sac As Range
Set Sac = Range("G3")
Dim Name As String
For Each Sac In plageNoms
Sheet.Delete ====>>>> Ne marche pas, il faut nommer la feuille mais comment faire car cela dépend si la cell G3 contient la date...
Application.DisplayAlerts = True
Je ne sais pas comment dire cela...
C'est presque ça. La solution n'est pas loin, j'avais fait plus compliqué lol !
Le soucis est qu'en effet l'onglet est à la date du jour, mais c'est fait par macro, et la macro nomme le jour de cette manière "2392009" pour une date du 23/09/2009. Forcément le nom de la feuille ne correspond par textuellement à la date. C'est pourkoi j'avais créé un tableau à part sur une autre feuille pour faire les recherches. J'ai indiqué sur chaque page dans la cellule G3 la date de mise à jour.
Le soucis que j'ai c'est de dire "Supprimer la feuilles dont la cellule G3 est dans PlageNoms"
Dim plageNoms As Range
Set plageNoms = Range("c13:c16")
Dim Sac As Range
Set Sac = Range("G3")
Dim Name As String
For Each Sac In plageNoms
Sheet.Delete ====>>>> Ne marche pas, il faut nommer la feuille mais comment faire car cela dépend si la cell G3 contient la date...
Application.DisplayAlerts = True
Je ne sais pas comment dire cela...
j'ai essayé ça
Sub dernierjmois()
Application.DisplayAlerts = False
For Each Sheet In ThisWorkbook.Worksheets
If Not Sheet.Range("G3") = DateSerial(2009, 1 + 1, 0) Then If Not Sheet.Range("G3") = DateSerial(2009, 2 + 1, 0) Then If Not Sheet.Range("G3") = DateSerial(2009, 3 + 1, 0) Then If Not Sheet.Range("G3") = DateSerial(2009, 4 + 1, 0) Then If Not Sheet.Range("G3") = DateSerial(2009, 5 + 1, 0) Then If Not Sheet.Range("G3") = DateSerial(2009, 6 + 1, 0) Then If Not Sheet.Range("G3") = DateSerial(2009, 7 + 1, 0) Then If Not Sheet.Range("G3") = DateSerial(2009, 8 + 1, 0) Then If Not Sheet.Range("G3") = DateSerial(2009, 9 + 1, 0) Then If Not Sheet.Range("G3") = DateSerial(2009, 10 + 1, 0) Then If Not Sheet.Range("G3") = DateSerial(2009, 11 + 1, 0) Then If Not Sheet.Range("G3") = DateSerial(2009, 12 + 1, 0) Then If Not Weekday(Sheet.Range("G3")) = 6 Then If Sheet.Range("G3") < Date - 8 Then Sheet.Delete
Next Sheet
Application.DisplayAlerts = True
End Sub
La première partie me permet de dire que si la date, n'est pas l'un des dernier jours de chaque mois, si ce n'est pas un vendredi, et enfin si elle n'est pas inférieure à 8 jours, alors la feuille sdoit être supprimée. Mais je conserve le même problème, il me supprime la feuille active, et pas la feuille contenant la date concernée...
Sub dernierjmois()
Application.DisplayAlerts = False
For Each Sheet In ThisWorkbook.Worksheets
If Not Sheet.Range("G3") = DateSerial(2009, 1 + 1, 0) Then If Not Sheet.Range("G3") = DateSerial(2009, 2 + 1, 0) Then If Not Sheet.Range("G3") = DateSerial(2009, 3 + 1, 0) Then If Not Sheet.Range("G3") = DateSerial(2009, 4 + 1, 0) Then If Not Sheet.Range("G3") = DateSerial(2009, 5 + 1, 0) Then If Not Sheet.Range("G3") = DateSerial(2009, 6 + 1, 0) Then If Not Sheet.Range("G3") = DateSerial(2009, 7 + 1, 0) Then If Not Sheet.Range("G3") = DateSerial(2009, 8 + 1, 0) Then If Not Sheet.Range("G3") = DateSerial(2009, 9 + 1, 0) Then If Not Sheet.Range("G3") = DateSerial(2009, 10 + 1, 0) Then If Not Sheet.Range("G3") = DateSerial(2009, 11 + 1, 0) Then If Not Sheet.Range("G3") = DateSerial(2009, 12 + 1, 0) Then If Not Weekday(Sheet.Range("G3")) = 6 Then If Sheet.Range("G3") < Date - 8 Then Sheet.Delete
Next Sheet
Application.DisplayAlerts = True
End Sub
La première partie me permet de dire que si la date, n'est pas l'un des dernier jours de chaque mois, si ce n'est pas un vendredi, et enfin si elle n'est pas inférieure à 8 jours, alors la feuille sdoit être supprimée. Mais je conserve le même problème, il me supprime la feuille active, et pas la feuille contenant la date concernée...
bthenault
Messages postés
55
Date d'inscription
mercredi 22 juillet 2009
Statut
Membre
Dernière intervention
8 juin 2011
1
5 mai 2011 à 13:43
5 mai 2011 à 13:43
Je cherche à simplifier ce que j'avais créé :
Application.DisplayAlerts = False
For Each Sheet In Workbooks("1er Trimestre 2011.xls").Worksheets
If Sheet.Range("G3") < Date - 8 Then
If Not Weekday(Sheet.Range("G3")) = 2 Then
If Not Sheet.Range("G3") = DateSerial(2011, 1 + 1, 0) Then
If Not Sheet.Range("G3") = DateSerial(2011, 2 + 1, 0) Then
If Not Sheet.Range("G3") = DateSerial(2011, 3 + 1, 0) Then
If Not Sheet.Range("G3") = DateSerial(2011, 4 + 1, 0) Then
If Not Sheet.Range("G3") = DateSerial(2011, 5 + 1, 0) Then
If Not Sheet.Range("G3") = DateSerial(2011, 6 + 1, 0) Then
If Not Sheet.Range("G3") = DateSerial(2011, 7 + 1, 0) Then
If Not Sheet.Range("G3") = DateSerial(2011, 8 + 1, 0) Then
If Not Sheet.Range("G3") = DateSerial(2011, 9 + 1, 0) Then
If Not Sheet.Range("G3") = DateSerial(2011, 10 + 1, 0) Then
If Not Sheet.Range("G3") = DateSerial(2011, 11 + 1, 0) Then
If Not Sheet.Range("G3") = DateSerial(2011, 12 + 1, 0) Then Sheet.Delete
Else
End If
Else
End If
Else
End If
Else
End If
Else
End If
Else
End If
Else
End If
Else
End If
Else
End If
Else
End If
Else
End If
Else
End If
Else
End If
Next Sheet
Application.DisplayAlerts = True
je ne sais pas comment imbriquer cela. je réexplique, j'ai une date dans une cellule que chaque feuille. Je dois supprimer les onglets dont la date est supérieure à 8 jours, sauf si c'est le dernier jour du mois ou un lundi...
Application.DisplayAlerts = False
For Each Sheet In Workbooks("1er Trimestre 2011.xls").Worksheets
If Sheet.Range("G3") < Date - 8 Then
If Not Weekday(Sheet.Range("G3")) = 2 Then
If Not Sheet.Range("G3") = DateSerial(2011, 1 + 1, 0) Then
If Not Sheet.Range("G3") = DateSerial(2011, 2 + 1, 0) Then
If Not Sheet.Range("G3") = DateSerial(2011, 3 + 1, 0) Then
If Not Sheet.Range("G3") = DateSerial(2011, 4 + 1, 0) Then
If Not Sheet.Range("G3") = DateSerial(2011, 5 + 1, 0) Then
If Not Sheet.Range("G3") = DateSerial(2011, 6 + 1, 0) Then
If Not Sheet.Range("G3") = DateSerial(2011, 7 + 1, 0) Then
If Not Sheet.Range("G3") = DateSerial(2011, 8 + 1, 0) Then
If Not Sheet.Range("G3") = DateSerial(2011, 9 + 1, 0) Then
If Not Sheet.Range("G3") = DateSerial(2011, 10 + 1, 0) Then
If Not Sheet.Range("G3") = DateSerial(2011, 11 + 1, 0) Then
If Not Sheet.Range("G3") = DateSerial(2011, 12 + 1, 0) Then Sheet.Delete
Else
End If
Else
End If
Else
End If
Else
End If
Else
End If
Else
End If
Else
End If
Else
End If
Else
End If
Else
End If
Else
End If
Else
End If
Else
End If
Next Sheet
Application.DisplayAlerts = True
je ne sais pas comment imbriquer cela. je réexplique, j'ai une date dans une cellule que chaque feuille. Je dois supprimer les onglets dont la date est supérieure à 8 jours, sauf si c'est le dernier jour du mois ou un lundi...
salut bthenault !
si je récapitule, tes onglets sont toujours nommés avec "23092009" ou similaire ?
et dans chaque onglet tu as une case qui contient la date de l'onglet ?
je suis en train d'essayer quelque chose, je te tiens au jus !
à bientôt,
ed
si je récapitule, tes onglets sont toujours nommés avec "23092009" ou similaire ?
et dans chaque onglet tu as une case qui contient la date de l'onglet ?
je suis en train d'essayer quelque chose, je te tiens au jus !
à bientôt,
ed
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
essaie ça :
(regarde bien le code : à un moment j'insère
Sub suppr_feuilles()
Application.DisplayAlerts = False
Dim fin_janv As Date
Dim fin_fév As Date
Dim fin_mar As Date
Dim fin_avr As Date
Dim fin_mai As Date
Dim fin_juin As Date
Dim fin_juil As Date
Dim fin_aou As Date
Dim fin_sep As Date
Dim fin_oct As Date
Dim fin_nov As Date
Dim fin_déc As Date
aujourdhui = Date
année = "2011" 'à changer l'année prochaine !
fin_janv = "31/01/" & année
fin_fév = "28/02/" & année
fin_mar = "31/03/" & année
fin_avr = "30/04/" & année
fin_mai = "31/05/" & année
fin_juin = "30/06/" & année
fin_juil = "31/07/" & année
fin_aou = "31/08/" & année
fin_sep = "30/09/" & année
fin_oct = "31/10/" & année
fin_nov = "30/11/" & année
fin_déc = "31/12/" & année
'Détermination du jour (donne 1 à 7 sachant que dimanche = 1 et samedi = 7)
For i = 1 To Sheets.Count
Sheets(i).Range("G4").FormulaR1C1 = "=WEEKDAY(R[-1]C)"
Next 'j'ai supposé que ta case G4 est libre (direct en dessous de G3)
'Boucle décroissante (pour éviter les erreurs lorsqu'on supprime les feuilles)
For i = Sheets.Count To 1 Step -1
jour = Sheets(i).Range("G4").Value
'Contrôle si plus de 8 jours
If Sheets(i).Range("G3").Value > aujourdhui + 8 Then
Sheets(i).Delete
'Contrôle si fin de mois
ElseIf Sheets(i).Range("G4").Value = fin_janv Then
Sheets(i).Delete
ElseIf Sheets(i).Range("G4").Value = fin_fév Then
Sheets(i).Delete
ElseIf Sheets(i).Range("G4").Value = fin_mar Then
Sheets(i).Delete
ElseIf Sheets(i).Range("G4").Value = fin_avr Then
Sheets(i).Delete
ElseIf Sheets(i).Range("G4").Value = fin_mai Then
Sheets(i).Delete
ElseIf Sheets(i).Range("G4").Value = fin_juin Then
Sheets(i).Delete
ElseIf Sheets(i).Range("G4").Value = fin_juil Then
Sheets(i).Delete
ElseIf Sheets(i).Range("G4").Value = fin_aou Then
Sheets(i).Delete
ElseIf Sheets(i).Range("G4").Value = fin_sep Then
Sheets(i).Delete
ElseIf Sheets(i).Range("G4").Value = fin_oct Then
Sheets(i).Delete
ElseIf Sheets(i).Range("G4").Value = fin_nov Then
Sheets(i).Delete
ElseIf Sheets(i).Range("G4").Value = fin_déc Then
Sheets(i).Delete
'Contrôle si c'est un lundi - si pas on supprime
ElseIf jour <> 2 Then
Sheets(i).Delete
End If
Next
Application.DisplayAlerts = True
End Sub
est ce que c'est ce qu'il te fallait ?
ed
(regarde bien le code : à un moment j'insère
Sub suppr_feuilles()
Application.DisplayAlerts = False
Dim fin_janv As Date
Dim fin_fév As Date
Dim fin_mar As Date
Dim fin_avr As Date
Dim fin_mai As Date
Dim fin_juin As Date
Dim fin_juil As Date
Dim fin_aou As Date
Dim fin_sep As Date
Dim fin_oct As Date
Dim fin_nov As Date
Dim fin_déc As Date
aujourdhui = Date
année = "2011" 'à changer l'année prochaine !
fin_janv = "31/01/" & année
fin_fév = "28/02/" & année
fin_mar = "31/03/" & année
fin_avr = "30/04/" & année
fin_mai = "31/05/" & année
fin_juin = "30/06/" & année
fin_juil = "31/07/" & année
fin_aou = "31/08/" & année
fin_sep = "30/09/" & année
fin_oct = "31/10/" & année
fin_nov = "30/11/" & année
fin_déc = "31/12/" & année
'Détermination du jour (donne 1 à 7 sachant que dimanche = 1 et samedi = 7)
For i = 1 To Sheets.Count
Sheets(i).Range("G4").FormulaR1C1 = "=WEEKDAY(R[-1]C)"
Next 'j'ai supposé que ta case G4 est libre (direct en dessous de G3)
'Boucle décroissante (pour éviter les erreurs lorsqu'on supprime les feuilles)
For i = Sheets.Count To 1 Step -1
jour = Sheets(i).Range("G4").Value
'Contrôle si plus de 8 jours
If Sheets(i).Range("G3").Value > aujourdhui + 8 Then
Sheets(i).Delete
'Contrôle si fin de mois
ElseIf Sheets(i).Range("G4").Value = fin_janv Then
Sheets(i).Delete
ElseIf Sheets(i).Range("G4").Value = fin_fév Then
Sheets(i).Delete
ElseIf Sheets(i).Range("G4").Value = fin_mar Then
Sheets(i).Delete
ElseIf Sheets(i).Range("G4").Value = fin_avr Then
Sheets(i).Delete
ElseIf Sheets(i).Range("G4").Value = fin_mai Then
Sheets(i).Delete
ElseIf Sheets(i).Range("G4").Value = fin_juin Then
Sheets(i).Delete
ElseIf Sheets(i).Range("G4").Value = fin_juil Then
Sheets(i).Delete
ElseIf Sheets(i).Range("G4").Value = fin_aou Then
Sheets(i).Delete
ElseIf Sheets(i).Range("G4").Value = fin_sep Then
Sheets(i).Delete
ElseIf Sheets(i).Range("G4").Value = fin_oct Then
Sheets(i).Delete
ElseIf Sheets(i).Range("G4").Value = fin_nov Then
Sheets(i).Delete
ElseIf Sheets(i).Range("G4").Value = fin_déc Then
Sheets(i).Delete
'Contrôle si c'est un lundi - si pas on supprime
ElseIf jour <> 2 Then
Sheets(i).Delete
End If
Next
Application.DisplayAlerts = True
End Sub
est ce que c'est ce qu'il te fallait ?
ed
ah, le début a été coupé.
je disais : j'insère une fonction qui détermine le jour de la date en question dans la case G4 de chaque feuille.
ensuite on compare la date qui est dans G3 aux fins de mois (déclarées en variable type date) dans une boucle for décroissante (afin de ne pas faire d'erreur : si tu supprime on onglet et qu'on compte en croissant, il finit par y avoir une erreur).
enfin on compare la valeur de "jour" à 2 (dimanche=1, lundi=2) et on supprime si nécessaire.
voilà !
je disais : j'insère une fonction qui détermine le jour de la date en question dans la case G4 de chaque feuille.
ensuite on compare la date qui est dans G3 aux fins de mois (déclarées en variable type date) dans une boucle for décroissante (afin de ne pas faire d'erreur : si tu supprime on onglet et qu'on compte en croissant, il finit par y avoir une erreur).
enfin on compare la valeur de "jour" à 2 (dimanche=1, lundi=2) et on supprime si nécessaire.
voilà !
25 sept. 2009 à 14:54