freshyback
Messages postés34Date d'inscriptionjeudi 19 juillet 2007StatutMembreDernière intervention16 mars 2008
-
28 févr. 2008 à 16:41
freshyback
Messages postés34Date d'inscriptionjeudi 19 juillet 2007StatutMembreDernière intervention16 mars 2008
-
6 mars 2008 à 10:39
Bonjour,
Je suis en train de faire un macro pour la supression automatique de certaines feuilles du classeur
j'aime supprimer toutes les feuilles au format "moisAnnée"
NHenry
Messages postés15113Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention22 avril 2024159 28 févr. 2008 à 16:47
Bonjour
Si c'est du VBA xcel, pourquoi ne pas avoir posté sur VBFrance ? Pourtant tu n'es pas tout nouveau (12 msg).
Format(Date, yyyy) te retourne uniquement l'année, pour le mois, il faut ajouter "mmm" il me semble, sinon va voir dans l'aide de VBA (F1 sur le mot clé Format).
Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
freshyback
Messages postés34Date d'inscriptionjeudi 19 juillet 2007StatutMembreDernière intervention16 mars 2008 28 févr. 2008 à 17:03
Je sais pas comen accéder à VB france
Dans les thème je le voi pas
Dslé mais chui un peu débutant sur le site donc comment je fais?
Concernant ma macro,
quand je fais
Sheets(Format(Date, "mmmm") & Year(Date)).Delete
j'ai une erreur d'exécution 9
Je pense que systèmatiquement il recherche la date et le mois actuel
Alors qu'il peut y avoir "août2007", "juin2007"...... et il ne supprime pas
J'ai utilisé la methode du message box mais bon j'ai pas grand choz com info....
Merci de votre aide
Vous n’avez pas trouvé la réponse que vous recherchez ?
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 28 févr. 2008 à 19:32
Salut,
l'idée du code suivant est d'utiliser la fonction DateValue d'excel a la place de de la fonction DateValue de VBA. Pourquoi ? ... bonne question !
En VBA cette fonction est sensible au format de la date et aux espaces alors que la fonction d'excel ne l'ai pas. Cette methode simplifi le traitement sur le nom
de la feuille. dans les noms des feuilles est parfait.
Sub SuppressionFeuille()
'on prepare la suite par la desactivation du rafraichissement d'excel et des messages excel
Application.ScreenUpdating = False
Application.DisplayAlerts = False
'declaration des variables
Dim MaFeuille As Worksheet, NewSheetName As String, Msg As String, TableFeuille() As String
Dim reponse As Long
'tous ce passera dans une nouvelle feuillecree a la ligne suivante
ActiveWorkbook.Sheets.Add after:=Worksheets(Worksheets.Count)
'on met de coté son nom cela pourait servir
NewSheetName = ActiveSheet.Name
'on prepare le message
Msg = "Les feuilles suivante seront supprimées. Voulez vous continuer ? " & vbCrLf
'on ecrit une formule dans la cellule b1 de la nouvelle feuille, qui nous servira a verifier si les noms des feuilles sont des dates
Range("b1").FormulaLocal = "=ISERR(DATEVALUE(A1))" 'ici la fonction ISERR() renvoie vrai si la fonction DateValue() provoque une erreure si le chaine n'est pas une date
'c'est ce qui permet de savoir si le nom de la feuille est une date. Donc si Faux c'est une date car pas d'erreure
Range("A1").NumberFormat = "@" 'on met la cellule A1 au format text. C'est !obligatoir! pour que cela marche
ReDim TableFeuille(0)
For Each MaFeuille In ThisWorkbook.Worksheets
Sheets(NewSheetName).Range("a1").Value = MaFeuille.Name
If Sheets(NewSheetName).Range("B1").Value = False Then
TableFeuille(UBound(TableFeuille)) = MaFeuille.Name
ReDim Preserve TableFeuille(UBound(TableFeuille) + 1)
Msg = Msg & vbCrLf & " -" & MaFeuille.Name 'ici on met a jour le message avec le nom des feuilles a supprimer
End If
Next if TableFeuille(0) <> "" then reponse MsgBox(Msg, vbExclamation + vbOKCancel) ' si TableFeuille(0) "" c'est qu'on a rien trouvé donc pas de message
If reponse = 1 Then 'si reponse yes alors
For i = 1 To UBound(TableFeuille)
Worksheets(TableFeuille(i - 1)).Delete 'on efface les feuilles
Next
End If
Worksheets(NewSheetName).Delete 'on efface la feuille cree au debut
'on remet tous en ordre
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Ma version d'excel est anglais, j'ai fais attention d'etre compatible avec une autre version mais il peu quand meme y avoir encore quelque probleme.
freshyback
Messages postés34Date d'inscriptionjeudi 19 juillet 2007StatutMembreDernière intervention16 mars 2008 29 févr. 2008 à 10:18
j'en arrive à çà !!!
La jen supprime quelque une mais j'ai encore quelque erreurs car sil a parcouru toutes les feuilles à partir de menu il repars pas dans l'autre sens et ne supprime pas la dernière non plus ....je cherche...je cherche!!
Merci de vos suggestion
Dim j As Integer
j = 1
Sheets("Menu").Select
While j <= Sheets.Count
If ActiveSheet.Name Like ("*" & Format(Date, "yyyy")) Then
ActiveSheet.Delete
Molenn
Messages postés797Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention23 février 20117 29 févr. 2008 à 14:22
Mais tes autres feuilles sont comment, celles que tu ne veux pas supprimer ?
Elles peuvent contenir des dates aussi ? Ou alors il n'y a que le format qui change ?
Dans tous les cas, pas forcément besoin de contrôler le format avec les fonctions de date, tu peux juste raisonner en String.
Tu vérifies si le nom de la feuille contient le mois (une petite boucle par exemple avec un Array qui contient la liste de tous les mois) avec la fonction InStr
Si la valeur est = 1, c'est que le nom commence par le mois.
Tu vérifies ensuite les 4 derniers caractères du nom, si c'est numérique et que ça commence par 19 ou 20, c'est une année.
Si les deux critères sont vérifiés, tu supprimes la feuille.
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 29 févr. 2008 à 15:45
Salut,
je reviens sur ton message :
J'ai éssayer ton code mais il me supprime toute les feuilles y compris celle qui n'ont pas le format 'juin2008'
La formule Isser ne semble pas prise en compte
Je cherche ....je cherche!!!
j'insiste sur le fait que mon code marche tres bien avec excel en anglais donc pour moi c'est un pb de compatibilité
Reessaye le en suivant les instructions ci-dessous
Si tu veux savoir si cette formule marche ajoute temporairement la ligne en bleu :
Sheets(NewSheetName).Range("a1").Value = MaFeuille.Name
MsgBox "Valeur en B1 : " & Sheets(NewSheetName).Range("B1").Value
If Sheets(NewSheetName).Range("B1").Value = False Then
tu veras apparaitre un message pour chaque feuille. Dit moi ce qu'il te dit.
de plus ajout une apostrophe devant la ligne suivante (la premiere en fait) pour mettre la ligne en commentaire
'Application.ScreenUpdating = False
cela te permetra de voir ce qu'il ce passe dans la feuille que l'on cree temporairement