Aide excel VBA - Copier un onglet

Résolu/Fermé
patate_560 Messages postés 47 Date d'inscription samedi 16 décembre 2006 Statut Membre Dernière intervention 15 mai 2017 - 6 juil. 2010 à 10:43
patate_560 Messages postés 47 Date d'inscription samedi 16 décembre 2006 Statut Membre Dernière intervention 15 mai 2017 - 19 juil. 2010 à 14:23
Bonjour,
Je débute en VBA et je dois faire une macro qui copie un onglet modèle et le renomme .

J'ai écrit le code suivant :

Sub Copie_Modele()

Sheets("Modele").Copy , Sheets("Modele")

Sheets.Copy.Name = "Nouveau"

End Sub

Et évidemment ça ne marche pas, il y a une erreur dans la ligne où je veux renommer l'objet.

Quelqu'un peut me dire mon erreur?

Merci d'avance!


A voir également:

24 réponses

patate_560 Messages postés 47 Date d'inscription samedi 16 décembre 2006 Statut Membre Dernière intervention 15 mai 2017
14 juil. 2010 à 11:28
Re!
J'ai pensé simplifier ma macro.
Je pourrais tout faire en une seule procédure, si au cours de la première, j'ajoute que dans mon tableau de synthèse, certaine cellules seront égales au contenu d'autres cellules dans mes nouveaux onglets.

Pour l'instant, quand je voulais attribuer le contenu d'une cellule, je faisais ceci :

'Nom du client
Cells(lin_FA_Client, col_FA_Client) = Worksheets(1).Cells(lin_tab_Client, col_tab_Client)

Comment faire, pour écrire dans la macro ce qui équivaut à excel "=B2" par exemple. Ce qui permettrait d'actualiser le contenu de la cellule si je modifie mon onglet...

Est-ce que je dois faire ça avec Formula ou FormulaR1C1?

En fait, je voudrais l'ajouter dans cette boucle :

For I = 0 To UBound(tabloNomOnglet)
Sheets(tabloNomOnglet(I)).Select

With ActiveSheet

'Nom du client
Cells(lin_FA_Client, col_FA_Client) = Worksheets(1).Cells(lin_tab_Client, col_tab_Client)

Là je remplis le nouvel onglet, maintenant je veux dire que dans mon premier tableau, la celulle A2 sera égale au contenu de la cellule G7 de l'onglet créé par exemple....


End With

J'espère que j'ai été compréhensible!

Merci
0
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 295
15 juil. 2010 à 06:37
utilise .FormulaLocal de cette manière tu verras ta formule comme si tu l'avais utilisé sous excel .
ex:
Range("a2").FormulaLocal = "=b2"

pour ta boucle ....

En fait, je voudrais l'ajouter dans cette boucle :

For I = 0 To UBound(tabloNomOnglet)
Sheets(tabloNomOnglet(I)).Select

With ActiveSheet

'Nom du client
Cells(lin_FA_Client, col_FA_Client) = Worksheets(1).Cells(lin_tab_Client, col_tab_Client)

'Là je remplis le nouvel onglet, maintenant je veux dire que dans mon premier tableau, la celulle A2 sera égale au contenu de la cellule G7 de l'onglet 'créé par exemple....
range("A2").FormulaLocal = "=G7"


End With
0
patate_560 Messages postés 47 Date d'inscription samedi 16 décembre 2006 Statut Membre Dernière intervention 15 mai 2017
19 juil. 2010 à 13:16
Salut!
c'est encore moi!
j'ai rajouté une ligne de code pour éviter les bug quand il y'a une croix qui va créer un onglet qui existe déjà :

For lin = 31 To 500

' on vérifie que l'onglet n'existe pas déjà...

For b = 1 To Sheets.Count
If Cells(lin, 3).Value = Sheets(b).Name Then
MsgBox "La feuille existe déjà !!!"
Exit Sub
End If
Next b

ThisWorkbook.Sheets(1).Activate

If Cells(lin, 1) = "X" Then

NomOnglet = Cells(lin, 3).Value

Le problème c'est que maintenant il me met quasiment tout le temps "la feuille existe déjà" même quand elle n'existe pas et il ne créé plus les nouveaux onglets...

Je sais qu'il est possible de créer des fonctions et utiliser on Error Goto mais ça m'avait l'air vachement plus compliqué!!

Merci d'avance!
0
patate_560 Messages postés 47 Date d'inscription samedi 16 décembre 2006 Statut Membre Dernière intervention 15 mai 2017
19 juil. 2010 à 14:23
c'est bon je me suis corrigée toute seule!

Il fallait juste que je rajoute mon bout de programme après :

If Cells(lin, 1) = "X" Then sinon ça le faisait pour toute les lignes!
0