Macro excel

Résolu
freshyback Messages postés 34 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 16 mars 2008 - 28 févr. 2008 à 16:41
freshyback Messages postés 34 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 16 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"

Exemple : "Février2008", "janvier2008"

mon code est le suivant :

sub suppression ()

Sheets("" & Format(Date, yyyy)).Delete

end sub

Apparemment c'est pas suffisant

Quelqu'un à une idée

Merci d'avance

13 réponses

bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
29 févr. 2008 à 16:33
...

la formule version francaise nous donne :

Range("b1").Formula = "=ESTERREUR(DATEVAL(A1))"

noublie pas non plus le le Faux dans la ligne suivante et uniquement dans cette ligne :

If Sheets(NewSheetName).Range("B1").Value = Faux Then

A+
3
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
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
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
28 févr. 2008 à 16:47
Salut,
1- SECTION INCORRECTE
2- Utilises des mSgbox pour tester un peu ton code.

Essaie
Sub suppression()
   Sheets(Format(Date, "mmmm") & Year(Date)).Delete
End Sub<hr />, ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i?n
Pensez: Réponse acceptée
0
freshyback Messages postés 34 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 16 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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
28 févr. 2008 à 17:51
Salut,
Quelle est la condition pour supprimer la feuille ??? année = 2008? seulement? ou bien le mois doit il rentrer en ligne de compte?

@+: Ju£i?n
Pensez: Réponse acceptée
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
28 févr. 2008 à 18:50
Je déplace... encore... toujours...












<hr />
-My Blog-
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
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.

Vala

A+
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
28 févr. 2008 à 19:36
...

a propos de la compatibilité il faudra peut etre remplacer le  false a la ligne suivante par Faux

If Sheets(NewSheetName).Range("B1").Value = False Then

A+
0
freshyback Messages postés 34 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 16 mars 2008
29 févr. 2008 à 09:49
Bonjour merci Bigfish pour ta réponse

J'ai éssayer ton code mais il me supprime toute les feuilles y compris celle qui n'ont pas le format 'juin2008'

Il n'ya pas de contrainte sur l'année on peut avoir du 2007 comme du 2008
mais le nom est au format 'moisAnnée'

La formule Isser ne semble pas prise en compte
Je cherche ....je cherche!!!
0
freshyback Messages postés 34 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 16 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

End If
ActiveSheet.Next.Select
j = j + 1

Wend

End Sub
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
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.


 


Molenn
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
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

A+
0
freshyback Messages postés 34 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 16 mars 2008
6 mars 2008 à 10:39
Merci c'est résolu  
0
Rejoignez-nous