Supprimer à fond des onglets.

mawua

XLDnaute Occasionnel
Bonjour, tous le monde, toi qui lis ce message tout particulièrement.

Dans mon classeur (1), je copie des onglets d'autres classeurs (2,3,4,...) toujours les même.
J'extrait des infos de ces onglets nouvellement créés par macro puis les supprime.
Voila le principe.
Le probleme c'est que dans mon classeur (1), j'ai toujours trois onglets identifié ainsi
Feuil1=Saisie
Feuil2=BDD
Feuil3=Rapport

Si j'insère les onglets des autres classeurs ils se retrouvent ainsi nommés

Feuil4=onglet1 du classeur(2)
Feuil5=onglet2 du classeur(2)
Feuil6= onglet3 du classeur (2)

Vu que le modele de document est très bien fait les gens qui remplissent ces classeurs (2,3,4,...), renomment ces onglets. Donc dans mon code je les identifie en tant que Feuil4 et non par "onglet1"

Lorsque je les delete j'utilise ce code:
Private Sub BtnSuppr_Click()
Application.DisplayAlerts = False 'évite le message excel
Feuil4.Delete
Feuil5.Delete
Feuil6.Delete
Application.DisplayAlerts = True 'remet les message excel
End Sub

Je peux recommencer l'opération quelques fois sans problème. Je peux ainsi saisir plusieurs classeurs.
Mais au bout d'un moment (sauvegarde automatique oblige, il me semble), mon code de saisie ne fonctionne plus.
Feuil4,5 et 6 n'existe plus. Les nouveaux onglets lors de leurs copie sont nommé Feuil7,8 et 9.

Ma question est comment fait -on pour effacer un onglet définitivement? Dans le dur? à fond?
Bref, comment envoyer l'onglet au fond du Porc ???

J'aimerais que systématiquement lorsque de nouveaux onglets sont copiés/déplacés quel que soit leur nom d'apparat ils soient identifiés en tant que Feuil4,5 et 6

J'espère m'être fait comprendre de vous.
 

pierrejean

XLDnaute Barbatruc
Re : Supprimer à fond des onglets.

bonjour mawua

pour une fois , je ne vais pas repondre à ta question
mais peut-etre à ton probleme

teste

Application.DisplayAlerts = False
For n = Sheets.Count To 1 Step -1
If Sheets(n).Name <> "Feuil1" And Sheets(n).Name <> "Feuil2" And Sheets(n).Name <> "Feuil3" Then
Sheets(n).Delete
End If
Next n
Application.DisplayAlerts = True
 

mawua

XLDnaute Occasionnel
Re : Supprimer à fond des onglets.

Bonjour PierreJean et merci de me répondre aussi vite

Quelle est la différence entre les deux codes? J'utilise aussi la commande delete.
une ch'tite explication.
Est-ce que le fait de passer par le Sheet.Name remet le le Sheet.Count à 3?

Bon, assez de questions je teste et je la ferme.
 

pierrejean

XLDnaute Barbatruc
Re : Supprimer à fond des onglets.

re mawua

mon code en gaulois

a partir du numero de la derniere feuille jusqu'a 1
si la feuille ne s'appelle ni Feuil1 ni Feuil2 ni Feuil3
hop au panier

on ne se soucie ni de l'ordre ni du nom des feuilles par contre bien conserver les appellations des feuilles que tu veux conserver !!

oups !!
a la relecture je m'aperçois que le nom de tes feuilles c'est plutot Saisie BDD et Rapport
donc la macro :

Sub test()
Application.DisplayAlerts = False
For n = Sheets.Count To 1 Step -1
If Sheets(n).Name <> "Saisie" And Sheets(n).Name <> "BDD" And Sheets(n).Name <> "Rapport" Then
Sheets(n).Delete
End If
Next n
Application.DisplayAlerts = True
End Sub
 
Dernière édition:

mawua

XLDnaute Occasionnel
Re : Supprimer à fond des onglets.

Oui, je me suis fait avoir aussi ;)

Mais ma préoccupation est de savoir si lorsque j'insererais les prochains onglets ils seront bien identifiés comme feuil4, feuil5 et feuil6 en VBA alors que leurs noms sont (titi, tata et toto, zzz, xyz, ou "va savoir ce qu'ils vont m'inventer") sans avoir à les renommer.
Ce qui n'est pas systématiquement le cas.
Parfois, alors que je viens juste d'effacer Feuil4,5 et 6 les nouveau onglets sont nommés "en dur" Feuil7, 8 et 9. Le Sheet.Count ne s'est pas reinitialisé sur 3. Il reste à 6.
 

pierrejean

XLDnaute Barbatruc
Re : Supprimer à fond des onglets.

comme je te l'ais dit la macro fonctionne quels que soient les noms(styles Feuil25 Feuil26) ou Appellation ( style test essai )
seules seront conservées les feuilles Feuilx(Saisie) Feuily(BDD) Feuilz(Rapport)

si tu teste en inserant de nouvelles feuilles tu seras vite à Feuil30
 

mawua

XLDnaute Occasionnel
Re : Supprimer à fond des onglets.

Bon je reprends ce fil car mon probleme a resurgit.

J'ai donc à nouveau obtenu des onglets nommés Feuil 10,11 et 12
Je vais tenter d'expliquer comment cela s'est produit.

Alors que je continue à tester ma base de donnée, j'ai un code d'erreur sur une macro. J'entreprends de regler le probleme par l'editeur VBA, je trifouille, je sauvegarde, je retente, merde j'ai oublié un accent.Quand je relance la procédure globale j'ai une erreur "objet requis" et des onglets nommés Feuil10,11 et 12 alors que je n'ai que 6 onglets en tout et pour tout et, le pire, mon code est à l'eau.

Je reexplique la procédure:
Je copie par deplacement les onglets tata titi toto d'un classeur source dans le classeur base de donnée. Là j'ai une macro qui scanne les trois onglets inserés puis un bouton me permet de les effacer. Je copie, alors par déplacement 3 autres onglet d'un autre classeur et les insère pour etre scanné à leur tour. et ainsi de suite.

Comme les styles des onglets sont différents selon les classeurs, je fait référence à leur nom dans mon code. Or ce qui me pose problème c'est que dans mon code je ne fait référence qu'à Feuil4, 5 et6.
Donc quand j'ai des Feuil6,11 ou 32 qui se ballade, mon code me fait une erreur "Objet requis" lorsqu'il passe sur un :

.Cells(Ligne, 2) = Feuil4.Range("D" & i).Value

Est-il possible de forcer le Sheet.Count a revenir à 3 au terme de ma procédure de scanne?
Ou faut-il que je passe par une étape renommage des onglets au moment de leur insertion?

Il s'agit d'une erreur que les techniciens avec qui je bosse ne pourront pas prendre en charge.
Je dois donc trouver une solution.
Merci.
 

pierrejean

XLDnaute Barbatruc
Re : Supprimer à fond des onglets.

bonjour mawua

une possibilité:

aux 'endroits strategiques de tes macros

if sheets.count>3 then call test

rappel : la macro test que je t'ais donnée ne conserve que les feuilles BDD
Saisie et Rapport

Sub test()
Application.DisplayAlerts = False
For n = Sheets.Count To 1 Step -1
If Sheets(n).Name <> "Saisie" And Sheets(n).Name <> "BDD" And Sheets(n).Name <> "Rapport" Then
Sheets(n).Delete
End If
Next n
Application.DisplayAlerts = True
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 707
Messages
2 091 165
Membres
104 794
dernier inscrit
rom1234qwertZ?