Copier et Renommer un onglet

etoc

XLDnaute Nouveau
Bonjour,

Je n'arrive pas à copier ET renommer un onglet, mon code bloque systématiquement au moment de renommer, et j'ai essayé de plusieurs facon, rien a y faire, je ne comprend pas...

Est-ce que quelqu'un voudrait bien m'indiquer ce que je fais de mal ?

Code:
    Dim numDef As Variant
    Dim WS As Worksheet

    For Each WS In Worksheets
    If WS.Name = "AFFICHAGE " + numDef Then
        WS.Select
        Found = True
    Exit For
    Else
    Sheets("AFFICHAGE VIDE").Copy After:=Sheets(5)
    Sheets("AFFICHAGE VIDE (2)").Name = "AFFICHAGE " + numDef
    WS.Select
    End If
    Next


merci d'avance,

Cordialement,
tom
 

JNP

XLDnaute Barbatruc
Re : Copier et Renommer un onglet

Bonjour Etoc, Yunchi :),
Soit tu n'as pas mis tout ton code, soit il manque pas mal de choses...
Tu déclares numDef, mais il n'a pas de valeur.
Que vient faire Found = True ?
Pourquoi After:=Sheets(5) ?
Mais de toute façon, quand tu copie la feuille, c'est la copie qui est active donc
Code:
ActiveSheet.Name = "AFFICHAGE " + numDef
devrait faire l'affaire.
Bonne journée :cool:
 

etoc

XLDnaute Nouveau
Re : Copier et Renommer un onglet

Bonjour,

merci pour vos réponses, mais cela ne fonctionne pas... la copie se fait, mais la feuille ne se renommer pas, cela bug à ce moment la...

Voici le code complet, qui me permet de créer une feuille, si elle n'existe pas encore, et la mettre à jour:

Code:
Sub macroEdition()

    Dim Rw As Range
    Dim ligne As Long
    Dim numDefaut As Variant
    Dim WS As Worksheet

    numDefaut = "A"
   
'boucle de 10 défauts possible
For i = 1 To 10
    If i = 1 Then numDefaut = "A"
    If i = 2 Then numDefaut = "B"
    If i = 3 Then numDefaut = "C"
    If i = 4 Then numDefaut = "D"
    If i = 5 Then numDefaut = "E"
    If i = 6 Then numDefaut = "F"
    If i = 7 Then numDefaut = "G"
    If i = 8 Then numDefaut = "H"
    If i = 9 Then numDefaut = "I"
    If i = 10 Then numDefaut = "J"
 
 'test si la feuille existe : on continu, sinon on la crée
    For Each WS In Worksheets
    If WS.Name = "AFFICHAGE DEFAUT " + numDefaut Then
        WS.Select
    Exit For
    Else
        Sheets("AFFICHAGE DEFAUT VIDE").Copy After:=Sheets(Sheets.Count + "-1")
        A ctiveSheet.Name = "AFFICHAGE DEFAUT " + numDefaut
        WS.Select
    End If
    Next
    
    'dans chaque feuilles, on remplace le numero de defaut et la couleur de la feuille
    For Each WS In Worksheets
    If WS.Name = "AFFICHAGE DEFAUT " + numDefaut Then
    WS.Select
    
    'mettre le numero dans la case B3
    Cells(3, 2) = numDefaut
    
    'mettre la couleur I12 = 1
    NumLigne = "11 " + i
    Couleur = Sheets("Données").Cells(NumLigne, 9).Value
    If Couleur = "INTERNE" Then
    Worksheets("AFFICHAGE DEFAUT " + numDefaut).Tab.ColorIndex = 8
    End If
    If Couleur = "SILS" Then
    Worksheets("AFFICHAGE DEFAUT " + numDefaut).Tab.ColorIndex = 6
    End If
    If Couleur = "CLIENT" Then
    Worksheets("AFFICHAGE DEFAUT " + numDefaut).Tab.ColorIndex = 9
    End If
           
    'on copie le plan d'action sur la feuille d'affichage du defaut
    With Sheets("Plan d'action").UsedRange
        ligne = 20
        
        For Each Rw In .Rows ' Boucle Test
          
            If Rw.Cells(1, 1).Value = numDefaut Then
            Sheets("AFFICHAGE DEFAUT " + numDefaut).Cells(ligne, 10).Resize(, 10).Value = Rw.Offset(, 3).Resize(, 10).Value
            ligne = ligne + 1
            End If
            
      
        Next Rw
        
    End With
    
    
    Exit For
    End If
    
    Next

Next


End Sub


Je ne suis pas un pro de la programmation vb, donc j'imagine que y'a mieux et mieux fait surtout, mais bon... on fait avec ce qu'on a ;)

merci d'avance, à ceux qui s'aventureront a comprendre le code...

cordialement,
tom
 

JNP

XLDnaute Barbatruc
Re : Copier et Renommer un onglet

Re :),
Le problème vient de ton test. Tu fais une boucle sur toutes les feuilles et si la feuille n'existe pas, tu la crée... En réalité, ta boucle regarde si la feuille de la boucle est celle que tu cherches, d'où l'erreur... Car tu crées une feuille qui existe déjà.
Une solution pour cela, déclarer une variable booléenne Existe. Avant la boucle, tu dit que Existe = False. Dans la boucle, si tu trouves la feuille qui t'intéresse, tu dit que Existe = True. Puis tu fait un test si Existe = False, alors tu crées ta feuille.
Code:
'test si la feuille existe : on continu, sinon on la crée
Dim Existe As Boolean
Existe = False
For Each WS In Worksheets
If WS.Name = "AFFICHAGE DEFAUT " & numDefaut Then Existe = True
Next
If Existe = False Then
        Sheets("AFFICHAGE DEFAUT VIDE").Copy After:=Sheets(Sheets.Count + "-1")
        ActiveSheet.Name = "AFFICHAGE DEFAUT " + numDefaut
End If
Un petit conseil, plutôt que le + (réservé aux valeurs numériques), utilise le & pour les String.
Bon courage :cool:
 

JNP

XLDnaute Barbatruc
Re : Copier et Renommer un onglet

Re :),
Après quelques tests, le code fonctionne bien, mais crée directement les feuilles de A à J... je penses qu'un petit test à la fin de ta sub sur Existe = False te permetrait de vérifier que c'est une nouvelle feuille et de sortir de la sub avant la boucle sur i.
Bon courage :cool:
 

etoc

XLDnaute Nouveau
Re : Copier et Renommer un onglet

Salut!

merci beaucoup pour l'explication, j'ai juste rajouté un test, si le défaut existe dans ma liste, en plus de ton test si la feuille existe, et ca marche nikel!

et merci pour le coup de main,

cordialement,
tom
 

Discussions similaires

Réponses
7
Affichages
1 K