Excel - Problème de suppression d'onglets

Résolu
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 - 13 sept. 2007 à 21:59
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 - 14 sept. 2007 à 21:27
 Bonsoir à tous,

Problème de suppression d'onglets dans un classeur Excel,  par script vbs.

A partir d'un nouveau classeur Excel, je crée un onglet par jour ouvré d'une année.
J'arrive à supprimer les onglets "Feuil1" et "Feuil3" en début de script, puis
à supprimer le dernier onglet ("Feuil2").

Question:
Peut-on procéder différemment ???

Option Explicit

Dim objExcel, Annee, DateDeb, DateFin, NbreJours, i, j
Annee = InputBox("Année à créer:","Création du Classeur",Year(Date))

DateDeb = DateSerial(Annee, 1, 1) 
DateFin = DateSerial(Annee+1, 1, 1 - 1) 
NbreJours = DateDiff("d",DateDeb, DateFin)

Set objExcel = CreateObject("Excel.Application")
objExcel.ScreenUpDating = False
objExcel.DisplayAlerts = False 
objExcel.Application.Visible = False
objExcel.Workbooks.Add

'ici suppression de Feuil1 et Feuil3
For j=1 To objExcel.Sheets.Count-1
    objExcel.Sheets(j).Delete
Next

For i=0 To NbreJours
'    If IsFerie(DateSerial(Annee, 1, 1+i)) = False Then
       objExcel.ActiveWorkbook.Sheets(objExcel.Sheets.Count).Select
       objExcel.ActiveWorkbook.Sheets.Add
       objExcel.ActiveSheet.Name = Replace(DateSerial(Annee, 1, 1+i),"/","-")
'    End If
Next
'ici suppression de Feuil2
objExcel.ActiveWorkbook.Sheets(objExcel.Sheets.Count).Delete

objExcel.ActiveWorkbook.Sheets(1).Select
objExcel.ScreenUpDating= True
objExcel.ActiveWorkbook.SaveAs "Test create sheets.xls"
objExcel.Application.Visible = True
MsgBox "script terminé"

objExcel.Quit
objExcel.DisplayAlerts = True
Set objExcel = Nothing

Merci d'avance pour vos suggestions.

jean-marc

11 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
13 sept. 2007 à 22:53
salut,

tu supprimes donc le count change

çà marche pas çà : ?

For j=objExcel.Sheets.Count to 1 step -1
    objExcel.Sheets(j).Delete
Next

peut-être pas bien pigé la question....
++
Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
3
JM247L Messages postés 443 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 1 mars 2011 2
14 sept. 2007 à 12:19
Bonjour,
Ce ne serait pas parce que tu tentes de supprimer la dernière feuille existante dans ton classeur ?

JML. Partageons notre savoir et nos acquis
3
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
13 sept. 2007 à 23:54
 Bonsoir PCPT,

For j=objExcel.Sheets.Count to 1 step -1
    objExcel.Sheets(j).Delete
Next
erreur: pour supprimer, déplacer les feuilles sélectionnées, insérez d'abord une nouvelle feuille.

J'ai aussi essayé:
if objExcel.Sheets.count > 1 then
   cpt = objExcel.Sheets.count
   for i =cpt to 2 step -1
        objExcel.Sheets(i).delete
   next
end if
+ rename de la feuille restante, je me retrouve donc avec ma première feuille datée (02-01-2007),
mais je n'arrive pas à trouver, en vbs,  l'équivalent du before/after de vb6.

jean-marc
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
14 sept. 2007 à 00:01
Re,

Faute de doigts !

suite,
Dans mon dernier essai, mes onglets sont classés visuellement:
03-01-2007, 04-....., 28-12,31-12, 02-01-2007

Ah ses indexs !

jean-marc
0

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

Posez votre question
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
14 sept. 2007 à 07:17
idem avec remove?
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
14 sept. 2007 à 12:28
 Bonjour à tous,

PCPT: une recherche sur "vbs excel remove" ne m'a rien apporté d'intéressant;
JM247L: je n'arrive pas à trouver une méthode fiable (et sa synthaxe) pour supprimer, lors de la création de
               mon classur, les feuilles existantes, puis de créer de nouvelles feuilles (dans l'ordre 02-01-2007
               à 31-12-2007).
Merci de votre attention.

jean-marc
0
JM247L Messages postés 443 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 1 mars 2011 2
14 sept. 2007 à 13:34
Pourquoi les supprimer ? Renome les
Pour le problème de les créer dans l'ordre : commence par la fin

JML. Partageons notre savoir et nos acquis
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
14 sept. 2007 à 16:45
Re,

Merci PCPT pour :
For j= objExcel.Sheets.Count to 1 step -1
    MsgBox "j=" & j &vbcrlf& objExcel.Sheets(j).Name
    'objExcel.Sheets(j).Delete
Next
Et oui, je ne savais pas que l'on peut lire un tableau à partir de la fin.

Merci  [auteurdetail.aspx?ID=1017721 JM247L]
pour la suggestion du rename des feuilles.
J'avais essayé, mais il y a rajout de plusieurs.

Je reste finalement sur :
'suppression de Feuil2 et Feuil3
if objExcel.Sheets.count > 1 then
   cpt = objExcel.Sheets.count
   for i=cpt to 2 step -1
        objExcel.Sheets(i).delete
   next
end if

For j=0 To NbreJours
    If IsFerie(DateSerial(Annee, 1, 1+j)) = False Then
       objExcel.ActiveWorkbook.Sheets(objExcel.Sheets.Count).Select
       objExcel.ActiveWorkbook.Sheets.Add
       objExcel.ActiveSheet.Name = Replace(DateSerial(Annee, 1, 1+j),"/","-")
    End If
Next

'suppression de Feuil1
objExcel.ActiveWorkbook.Sheets(objExcel.Sheets.Count).Delete

@+.
jean-marc
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
14 sept. 2007 à 19:10
comme dirais mon copain le trombone....

ceci explique celà

Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
14 sept. 2007 à 21:05
 Bonsoir à tous,

Bonsoir PCPT,
Je viens de découvrir "objExcel.SheetsInNewWorkbook = 1".
Quoique, j'aime pas trop ce "if sheet = 1 Then" effectué x fois.

objExcel.SheetsInNewWorkbook = 1
objExcel.Workbooks.Add

For j=0 To NbreJours
    If IsFerie(DateSerial(Annee, 1, 1+j)) = False Then
       if sheet = 1 Then
            Set objSheet = objExcel.ActiveWorkbook.Worksheets(sheet)
           objSheet.Name = Replace(DateSerial(Annee, 1, 1+j),"/","-")
       Else
          intCount = objExcel.Sheets.Count
          objExcel.ActiveWorkbook.Sheets.Add,objExcel.sheets(intCount)
          Set objSheet = objExcel.ActiveWorkbook.Worksheets(sheet)
          objSheet.Name = Replace(DateSerial(Annee, 1, 1+j),"/","-")
          End If
        Sheet = Sheet + 1
    End If
Next
objExcel.ActiveWorkbook.Sheets(1).Select

jean-marc
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
14 sept. 2007 à 21:27
Re,

Avant de quitter Excel, ne pas oublier  le reset de SheetsInNewWorkbook.objExcel.ActiveWorkbook.Close
objExcel.SheetsInNewWorkbook = 3 'Paramètre par defaut
objExcel.Application.Quit

jean-marc
0
Rejoignez-nous