Création onglet (erreur 1004)

Résolu
arthrax Messages postés 35 Date d'inscription mardi 20 septembre 2005 Statut Membre Dernière intervention 31 décembre 2023 - 14 déc. 2006 à 10:39
arthrax Messages postés 35 Date d'inscription mardi 20 septembre 2005 Statut Membre Dernière intervention 31 décembre 2023 - 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

11 réponses

jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
14 déc. 2006 à 15:19
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
3
lilo44 Messages postés 174 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 15 février 2007 2
14 déc. 2006 à 10:45
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 :)
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
14 déc. 2006 à 10:46
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
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
14 déc. 2006 à 10:47
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:
0

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

Posez votre question
lilo44 Messages postés 174 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 15 février 2007 2
14 déc. 2006 à 10:49
ah oui exact :s

> []
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
14 déc. 2006 à 10:53
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:
0
arthrax Messages postés 35 Date d'inscription mardi 20 septembre 2005 Statut Membre Dernière intervention 31 décembre 2023
14 déc. 2006 à 13:00
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
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
14 déc. 2006 à 13:30
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
0
arthrax Messages postés 35 Date d'inscription mardi 20 septembre 2005 Statut Membre Dernière intervention 31 décembre 2023
14 déc. 2006 à 15:00
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
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
14 déc. 2006 à 15:16
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:
0
arthrax Messages postés 35 Date d'inscription mardi 20 septembre 2005 Statut Membre Dernière intervention 31 décembre 2023
14 déc. 2006 à 16:10
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
0
Rejoignez-nous