Aide macro vérifier onglet existant

Bonjour à tous,

voila j'ai réalisé une macro fonctionnant très bien qui me permet de copier le 1er onglet (nommé Fiche 1) autant de fois que l'on veut. Par contre si la fiche 2 par exemple existe deja alors sa bug !

comment pourrais-je faire pour vérifier l'existence de la page avant de copier. (voici mon code j'ai supprimer tout se qui ne vous intéresse pas)

Dim i, z, u, v, y

z = InputBox("Combien voulez vous de fiche ? ", "Copie")

' Boucle qui crée une copie de la Fiche 1 et remplis les cellules N°, Auteur, Date

For i = 2 To z

Sheets("Fiche 1").Copy After:=Sheets(i)

Next i

j'ai pensé à deux solutions, soit

For i = 2 To z

si Fiche(i) existe alors i++ sinon

Sheets("Fiche 1").Copy After:=Sheets(i)

Next i

Sinon (la meilleur je pense) :

récupérer le nombre d'onglet existant =variable

For (variable+1) To (z+variable)

Sheets("Fiche 1").Copy After:=Sheets(i)

Next i

pouvez vous m'aider a traduire en VB ?

Bonjour,

Vu comme tu présentes ta demande, pas besoin de controler le doublons puisque tu dupliques la Fiche 1 sans plus. Donc je ferais simplement comme ceci :

Dim i As Integer, z As Integer
z = InputBox("Combien voulez vous de fiche ? ", "Copie")
' Boucle qui crée une copie de la Fiche 1 et remplis les cellules N°, Auteur, Date
For i = 2 To z
Sheets("Fiche 1").Copy after:=Sheets(Sheets.Count)
Next i

Amicalement

Marche nickel avec excel 2007 mais avec les versions inférieur, j'ai des erreurs si je demande trop de copie (56 dans mon cas)

au bout de la 56 eme copie j'ai le message :

erreur d'exécution 1004

la methode copy de la classe worksheet a échoué

comment puis-je remédier a cela?

Bonsoir,

Vérifie que la feuille "Fiche 1" est bien placée en 1er dans les onglets

Claude

Re,

Il faudrait savoir ce que contient ta fiche 1. Peut-être as-tu un conflit avec une formule ou autre.

Fais le test sur un classeur vierge. Cela fonctionne parfaitement.

Amicalement

Ok mais pourquoi je n'ai AUCUN probleme sous office 2007 ???

je vous rappelle que tout marche nickel sous 2007, par contre dès que je passe en version inférieur, marche plus.

voici mon code :

' Boucle qui crée une copie de la Fiche 1 et remplis les cellules N°, Auteur, Date

For i = 1 To 200

Sheets("Fiche 1").Copy After:=Sheets(Sheets.Count)

ActiveSheet.Name = "Fiche " & i

Sheets("Fiche " & i).Unprotect Password:="..."

Range("AM2").Select

ActiveCell.FormulaR1C1 = "N° " & i

Sheets("Fiche " & i).Protect Password:="..."

Next i

Bonjour,

1) fait démarrer la boucle i à 2 au lieu de 1

2) déprotège avant de renommer

et précise à quelle ligne de code çà coince

Claude

Re,

par contre dès que je passe en version inférieur, marche plus.

Qu'est ce qui ne marche pas ??

Ton code :

For i = 1 To 200
Sheets("Fiche 1").Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = "Fiche " & i
Sheets("Fiche " & i).Unprotect Password:="..."
Range("AM2") = "N° " & i
'Range..... = date
'Range.... =auteur
Sheets("Fiche " & i).Protect Password:="..."
Next i

A te relire

Bonjour Dan,

quelque chose m'échappe

For i = 1 To 200
Sheets("Fiche 1").Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = "Fiche " & i

à la 1ère boucle,

ActiveSheet.Name = "Fiche " & i

va nommer la feuille "Fiche 1", déjà existante donc erreur

peut-être faudrait mieux nommer le modèle "Fiche" sans N° ou "Fiche modèle"

non ?

Amicalement

Claude

re,

Juste Claude , comme tu le disais avant il faut démarrer à 2.

Donc for i =2 to 200

Par contre une chose m'échappe alors lorsqu'il dit que sous excel 2007 cela fonctionne...

Attendons voir ...

Vous avez tout a fait raison pour i=2 au commencement (c'est une erreur de ma part lorsque j'ai recopier mon code sur le forum)

Alors quand j'ai encore allégé pour la compréhension, j'ai oter toutes les protections et j'ai mis le code suivant :

Sub Copie()

Dim i

For i = 2 To 150

Sheets("Fiche 1").Copy After:=Sheets(Sheets.Count)

ActiveSheet.Name = "Fiche " & i

Next i

End Sub

Quand je le lance la macro sous excel 2007 je me retrouve avec 150 fiches allant de fiche 1 à fiche 150. jusque la logique.

Maintenant meme fichier que j'ouvre sous excel 2003 SP3, je lance ma macro et au bout de la 56 eme copie j'ai :

je ne peut pas faire plus simple pour votre compréhension...

re,

Je ne me souviens plus !

la limite sous 2003 est peu-être de 56 feuilles ?

sinon il n'y a pas de raison que çà ne marche pas !

essaye d'ajouter une 57ème feuille manuellement

édit: comment est la déclaration de la variable i ?

mets Dim i As integer

Claude

alors quand je met i as integer => meme soucis

Quand je rajoute un onglet à la main => pas de soucis

peut etre cela viens t'il de la mémoire vive utilisé par excel (pas assez grande ???)

Bonjour,

Comme demandé depuis le début,

envoie la feuille à copier avec la macro complète

sinon on perd notre temps !

édit: il n'y aurait pas une feuille masquée nommée "Fiche 56" des fois ?

Amicalement

Claude

alors déja pour commencer je ne peux pas vous fournir l'onglet a copier car confidentiel ...

je ne pense pas que c'est moi qui vous fait perdre du temps puisque le problème viendrait bien d'excel en lui-même ...

http://support.microsoft.com/kb/210684

Cordialement

thuglife

Bonjour

Y-a-t-il un rapport ou pas ? ... dans les limites excel 2003 :

Nombre maximal de couleurs par classeur 56

donc, si tu as des couleurs dans les feuilles ....

Amicalement

Nad

Bonjour,

alors déja pour commencer je ne peux pas vous fournir l'onglet a copier car confidentiel ...

je ne pense pas que c'est moi qui vous fait perdre du temps puisque le problème viendrait bien d'excel en lui-même ...

1) C'est pas sorcier de changer quelques données pour rendre la feuille anonyme !

2) quand je pose une question, j'aime bien qu'on y réponde

Je te laisse à ton problème

Salut Nad

Amicalement

Claude

Bonjour,

Comme tu as du le lire dans le lien que tu as fourni, avec les versions antérieures à 2007, la recopie d'onglets est limitée par la mémoire...

Et comme ils l'expliquent un peu plus bas, tu peux contourner ce souci en créant un fichier annexe, qui ne contiendra que ta feuille "Fiche 1", et que tu insèreras comme modèle dans ton fichier final.

Pour ce faire, tu peux agir ainsi :

Sub copie_plus_que_56()
Dim LeNom As String
Dim I As Byte
Application.ScreenUpdating = False
LeNom = ThisWorkbook.Path & "\" & "Modele12345.xls" 'j'ai mis un nom "drôle", pour ne pas avoir de doublon
    Sheets("Fiche 1").Copy  'on copie la feuille "Fiche 1"
    ActiveWorkbook.SaveAs LeNom 'on enregistre ce nouveau fichier
    ActiveWorkbook.Close False 'on le ferme
For I = 2 To 150
    Sheets.Add Type:=LeNom, After:=Sheets(Sheets.Count) 'puis on insère autant de nouvelles feuilles que
                                                        'voulues
    ActiveSheet.Name = "Fiche " & I                     'qu'on renomme
Next I
Kill LeNom          'et enfin, on supprime le fichier qu'on avait créé
End Sub

Bon courage

Re,

Prends un classeur vierge de données et place uniquement le code que je t'ai donné dans un module puis exécute le pour voir si tu as toujours l'erreur.

A te relire

le code de cousinhub marche nickel

enfin j'en vois le bout, autant fallait savoir que cela venait d'excel en lui même

merci beaucoup

Rechercher des sujets similaires à "aide macro verifier onglet existant"