Demande d'aide pour renommer une feuille créer par une macro

Polus Cacahus

XLDnaute Nouveau
Bonjour,

Je viens vous demander de l'aide pour un fichier excel (2013) que je dois créer pour mon travail étant donné que je suis archi-débutant.
J'ai une première feuille "Avancement total" dans laquelle les valeurs de chaque ligne doivent correspondre à une ligne de chaque autre feuille (qui correspondent chacune à une entreprise).
J'ai fait une macro (à partir de l'enregistreur) qui permet de créer une feuille pour une nouvelle entreprise, à partir d'une feuille "Entreprise 1", et qui renvoie les valeurs de la ligne voulue dans le tableau de "Avancement total". Mon problème est que à chaque fois que j'utilise la macro, les valeurs renvoyées (dans "Avancement total") sont toujours celles de la feuille copiée en premier étant donné que le nom de la feuille qui contient les valeurs à copier est toujours le même dans le code. J'aimerais donc que ce nom change, si c'est possible ?
Dans le code vba j'ai ça :
Code:
Sub NouvelleEntreprise()
'
' NouvelleEntreprise Macro
'

'
  Sheets("Entreprise 1").Select
  Selection.Copy
  Sheets.Add After:=ActiveSheet
  ActiveSheet.Paste
  Range("C19").Select
  Sheets("Avancement total").Select
  Rows("11:11").Select
  Application.CutCopyMode = False
  Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
  Range("C26").Select
  Sheets("Feuil16").Select
  Range("B7:AL7").Select
  Selection.Copy
  Sheets("Avancement total").Select
  Range("B11").Select
  ActiveSheet.Paste Link:=True
  Range("B23").Select
End Sub
J'imagine que le problème viens de la partie
Code:
 Sheets("Feuil16").Select
mais je ne vois pas comment le résoudre.

J'espère que c'est assez clair et que quelqu'un pourra m'aider, j'ai déjà fait le tour de pas mal de forum mais je comprends pas grand chose...
 

vgendron

XLDnaute Barbatruc
Hello

peux tu stp poster ton fichier exemple (sans donnée confidentielle)
ca permettra de travailler directement sur le bon fichier.
 

vgendron

XLDnaute Barbatruc
Hello

Essaie avec ce code..
N'ayant pas tout compris
ici.. la feuille "Modèle" est l'entreprise 1

VB:
Sub NouvelleEntreprise()
'
' NouvelleEntreprise Macro
'
    'on cherche le numéro de la dernière entreprise (pour éviter un bug au cas où l'on veut créer une entreprise qui existe déjà
    For Each ws In Worksheets
        If ws.Name Like "*Entreprise*" Then ' "Avancement total" Then
            LastEntreprise = WorksheetFunction.Max(LastEntrprise, CInt(Right(ws.Name, 1)))
        End If
    Next ws

    'on copie la dernière entreprise et on lui donne un nom
    Sheets("Entreprise " & LastEntreprise).Copy after:=ActiveSheet
    Sheets("Entreprise " & LastEntreprise & " (2)").Name = "Entreprise " & LastEntreprise + 1
    'on copie la zone B7:AL7
    Range("B7:AL7").Copy

    'dans la feuille avancement
    Sheets("Avancement total").Select
    'on recopie la ligne 11
    Rows("11:11").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    'et on fait le copier coller
    Range("B11").Select
    ActiveSheet.Paste Link:=True

End Sub
 

vgendron

XLDnaute Barbatruc
ou alors..Peut etre ceci
pourquoi toujours inserer en ligne 11 ?
VB:
Sub NouvelleEntreprise()
'
' NouvelleEntreprise Macro
'
    'on cherche le numéro de la dernière entreprise (pour éviter un bug au cas où l'on veut créer une entreprise qui existe déjà
    For Each ws In Worksheets
        If ws.Name Like "*Entreprise*" Then ' "Avancement total" Then
            Num = WorksheetFunction.Substitute(ws.Name, "Entreprise ", "")
            LastEntreprise = WorksheetFunction.Max(LastEntreprise, Num)
        End If
    Next ws

    'on copie la dernière entreprise et on lui donne un nom
    Sheets("Entreprise " & LastEntreprise).Copy after:=ActiveSheet
    Sheets("Entreprise " & LastEntreprise & " (2)").Name = "Entreprise " & LastEntreprise + 1
    Sheets("Entreprise " & LastEntreprise + 1).Range("B2") = "Entreprise " & LastEntreprise + 1
    'on copie la zone B7:AL7
    Range("B7:AL7").Copy

    'dans la feuille avancement
    Sheets("Avancement total").Select
    'on recopie la ligne 11
    Rows("11:11").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    'et on fait le copier coller
    Range("B11").Select
    ActiveSheet.Paste Link:=True
    Range("A11").Formula = "='Entreprise " & LastEntreprise + 1 & "'!B2"

End Sub
 

vgendron

XLDnaute Barbatruc
et ceci sans doute encore mieux. puisqu'on fait une copie de la feuille "Modèle" (=Feuill6 que j'ai renommée en "Modèle")

VB:
Sub NouvelleEntreprise()
'
' NouvelleEntreprise Macro
'
    'on cherche le numéro de la dernière entreprise (pour éviter un bug au cas où l'on veut créer une entreprise qui existe déjà
    For Each ws In Worksheets
        If ws.Name Like "*Entreprise*" Then ' "Avancement total" Then
            Num = WorksheetFunction.Substitute(ws.Name, "Entreprise ", "")
            LastEntreprise = WorksheetFunction.Max(LastEntreprise, Num)
        End If
    Next ws
   

    'on copie la dernière entreprise et on lui donne un nom
    Sheets("Modèle").Copy after:=ActiveSheet
    Sheets("Modèle (2)").Name = "Entreprise " & LastEntreprise + 1
    Sheets("Entreprise " & LastEntreprise + 1).Range("B2") = "Entreprise " & LastEntreprise + 1
    'on copie la zone B7:AL7
    Range("B7:AL7").Copy

    'dans la feuille avancement
    Sheets("Avancement total").Select
    LastRow = Range("C" & Rows.Count).End(xlUp).Row + 1
    'on recopie la ligne 11
    'Rows(lastRow).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    'et on fait le copier coller
    Range("B" & LastRow).Select
    ActiveSheet.Paste Link:=True
    Range("A" & LastRow).Formula = "='Entreprise " & LastEntreprise + 1 & "'!B2"

End Sub
 

Polus Cacahus

XLDnaute Nouveau
Hey,

Alors, la macro copie bien la bonne plage de donnée (y'a juste la couleur des cases qui est copiée aussi mais ça à la limite c'est juste de l'affichage), le problème c'est que la macro ne fonctionne qu'une seule fois. Si je la relance j'ai un message d'erreur : "Erreur d'exécution '1004': Désolé... Ce nom est déjà attribué. Veuillez utiliser un autre nom." Et le débogueur met en surbrillance la ligne :
Code:
 Sheets("Entreprise " & LastEntreprise & " (2)").Name = "Entreprise " & LastEntreprise + 1 [/code ]

J'avoue que je comprends pas du tout ce qu'il se passe en fait...
 

Polus Cacahus

XLDnaute Nouveau
Re
Effectivement, c'est encore mieux avec le nom "Modèle" pour éviter que quelqu'un le supprime sans le vouloir !
Encore merci, vraiment. :)
 

Discussions similaires


Haut Bas