Création onglet (erreur 1004) [Résolu]

Messages postés
30
Date d'inscription
mardi 20 septembre 2005
Dernière intervention
3 décembre 2018
- - Dernière réponse : arthrax
Messages postés
30
Date d'inscription
mardi 20 septembre 2005
Dernière intervention
3 décembre 2018
- 14 déc. 2006 à 16:10
Bonjour,

J'ai une liste de 30 noms de seurveur dans une feuille excel et je veux créé 30 onglets correspondant aux noms de serveur.
Par exemple si dans la liste de serveur j'ai serveur1, serveur2, serveur3, 3 nouveaux onglet sont créés les uns apres les autres avec comme nom serveur1, serveur2, serveur3.

Mon problème c'est que mon code se lance mais à la 3e itération j'ai une erreur :
Erreur d'execution '1004':

Impossible de renommer une feuille comme une autre feuille, une
bibliotheque d'objets référencée ou un classeur référencée par Visual
Basic
J'ai mis en rouge la partie du code en erreur et lors des 2 premières itérations le code fonctionne bien

Comment corriger cette erreur ?
Et faire en sorte que le nouveau onglet soit placé apres les onglets existants ?
(je n'arrive pas à utilisé .Move after:= Worksheets(Worksheets.Count)
)

Dim NomAS400 As Range
Dim Valeur As Range
Dim Feuille As Worksheet

Set NomAS400 = Range("H8:H39") 'Liste des noms
For Each Valeur In NomAS400
    For Each Feuille In Worksheets
        If Feuille.Name = Valeur Then 'Cas où la feuille existe
            MsgBox "feuille existe"
        Else         'Cas où la feuille n'existe pas
            Sheets.Add.Name = Valeur   'Création de la feuille
            MsgBox "feuille crée"
        End If
    Next
Next

Merci d'avance
Arthrax
Afficher la suite 

Votre réponse

11 réponses

Meilleure réponse
Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Dernière intervention
6 avril 2012
47
3
Merci
Re,
Dans ce cas essaie ceci :
Dim NomAS400 As Range 
Dim Valeur As Range 
Dim Feuille As Worksheet 

Dim FeuilleTrouve As Boolean 

Set NomAS400 = Range("H8:H39")   'Liste des noms
For Each Valeur In NomAS400 
    For Each Feuille In Worksheets 
        If Feuille.Name = Valeur Then   'Cas où la feuille existe
            FeuilleTrouve = True 
            Exit For 
        End If 
    Next 
    If Not FeuilleTrouve Then Worksheets.Add(, Sheets(1)).Name = Valeur 
Next 

@+: Ju£i?n
Pensez: Réponse acceptée

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 89 internautes nous ont dit merci ce mois-ci

Commenter la réponse de jrivet
Messages postés
174
Date d'inscription
vendredi 25 janvier 2002
Dernière intervention
15 février 2007
2
0
Merci
Bonjour,

Il fadrait regarder (peut etre) la valeur de "Valeur" .
Peut etre que au moment du plantage, c'est un nom déposé.

Vu l'erreur, c'est ptet bien ca :)
Commenter la réponse de lilo44
Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Dernière intervention
6 avril 2012
47
0
Merci
Salut,

En fait ton erreur vient du fait que tu continu à parcourir toutes les feuilles du classeur meme si tu à créer la feuille..

Ceci devrait corriger ton problème

Dim NomAS400 As Range 
Dim Valeur As Range 
Dim Feuille As Worksheet 

Set NomAS400 =  Range("H8:H39")  'Liste des noms
For Each Valeur In NomAS400 
    For Each Feuille In Worksheets 
        If Feuille.Name = Valeur Then  'Cas où la feuille existe
            MsgBox "feuille existe" 
        Else          'Cas où la feuille n'existe pas
            Sheets.Add.Name = Valeur    'Création de la feuille
            MsgBox "feuille crée" 
             Exit For 

        End If 
    Next 
Next 

@+: =89254 Ju£i?n
Pensez: Réponse acceptée
Commenter la réponse de jrivet
Messages postés
2247
Date d'inscription
lundi 29 mai 2006
Dernière intervention
29 mai 2008
6
0
Merci
Salut, c'est nromal tel que ta boucle est faite ça plantera toujours!

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
Commenter la réponse de drikce06
Messages postés
174
Date d'inscription
vendredi 25 janvier 2002
Dernière intervention
15 février 2007
2
0
Merci
ah oui exact :s

> []
Commenter la réponse de lilo44
Messages postés
2247
Date d'inscription
lundi 29 mai 2006
Dernière intervention
29 mai 2008
6
0
Merci
Quelques liens pour te donner idées pour éviter les plantages de ce type:http://www.codyx.org/snippet_renommer-feuille-classeur-excel_243.aspx
http://www.codyx.org/snippet_copier-feuille-excel_272.aspx

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
Commenter la réponse de drikce06
Messages postés
30
Date d'inscription
mardi 20 septembre 2005
Dernière intervention
3 décembre 2018
0
Merci
Merci à tous ceux qui m'on répondu

Je viens de comprendre le problème et j'ai lu les liens de Drikce 06 et je me sens un peu perdu .

J'ai testé les liens de Drikce, ça fonctionne à condition de rentrer les infos voulues comme le nom de la feuille à changer or moi ici je ne le connait pas. J'ai testé plusieurs chose sans succès.

Donc si quelqu'un pourrait me donner un début de piste car là je galère pas mal et mon code est à recommencer entièrement .

Merci
Arthrax
Commenter la réponse de arthrax
Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Dernière intervention
6 avril 2012
47
0
Merci
Re,

Est ce que ce que je te propose avec le EXIT FOR ne règle pas ton problème?

Je l'ai teste avec des noms de serveur entre H9 et H39 et cela ne me donne aucune erreur et creer bien les feuilles et je n'ai eu aucune erreur...

@+: Ju£i?n
Pensez: Réponse acceptée
Commenter la réponse de jrivet
Messages postés
30
Date d'inscription
mardi 20 septembre 2005
Dernière intervention
3 décembre 2018
0
Merci
Effectivement mais si tu le relance, il t'affiche l'erreur.  Pour la création il n'y a pas de problème mais si un onglet porte le même nom, là ça bug. C'est dû aux 2 boucles for imbriquées.

Arthrax
Commenter la réponse de arthrax
Messages postés
2247
Date d'inscription
lundi 29 mai 2006
Dernière intervention
29 mai 2008
6
0
Merci
C'est pour ça que je t'ai donné ces liens, avec les codes de mortalino, tu évitera ce bug! Et sinon si tu connais le nom de la feuille, c'est valeur, pour l'appel de la fonction tu met valeur dans l'appel au lieu d'un nom en dure! En tout cas en prenant des bouts de code et les idées de ces snippets tu devrai arrivé à tes fins!

Sinon jrivet, effectivement exit for marche uniquement pour le premier traitement, car la feuille ajouter existe déjà, mais la façon dont la boucle est faite, ça plante!

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
Commenter la réponse de drikce06
Messages postés
30
Date d'inscription
mardi 20 septembre 2005
Dernière intervention
3 décembre 2018
0
Merci
Bien joué Ju£i?n  , ça marche du tonnerre. Tu viens de me faire gagner énormément de temps !!!!

Un grand merci à Ju£i?n et Drikce 06 . Grâce à vous j'apprend énormement en VBA.

Arthrax
Commenter la réponse de arthrax

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.