[RESOLU] Enregistrement d'un onglet dont le nom se trouve dans une cellule

Sybille

XLDnaute Junior
Bonjour (ou re-bonjour) :oops:,

Dans une de mes macros que je suis en train de préparer, j'ai besoin d'enregistrer un onglet.

j'utilise donc : Set copie = ActiveSheet (ça enregistre bien l'onglet actif)

Sauf que ça n'est pas l'onglet actif que je souhaite enregistrer mais un onglet dont le nom est dans l'onglet liste en A5.

J'ai donc écrit : Set copie = Worksheets([Liste!A5].Value)... ça ne fonctionne pas! o_O

Pourtant depuis ce matin je mets en application la solution que Dranreb m'a donné ce matin et ça fonctionne bien!!! sauf là!

Qu'est ce que j'ai encore écrit de travers??? :confused:

A l'avance merci,

Sybille
 

vgendron

XLDnaute Barbatruc
Bonjour
Sans voir ton code ni ton fichier..impossible à dire..
le nom de la feuille est il écrit correctement dans la cellule A5 de ta feuille Liste?
 

Dranreb

XLDnaute Barbatruc
Worksheet sans préciser d'expression Workbook devant en assume une représentant le classeur actif. Est-ce bien ce que vous voulez ?
 

Sybille

XLDnaute Junior
Bonjour,

Dans ma cellule A5 de ma feuille liste j'ai fait un copier coller du nom de nom onglet pour être sure.

Voici en pièce jointe mon fichier allégé.

Merci
 

Fichiers joints

Dranreb

XLDnaute Barbatruc
Je ré-expose mon message édité de l'autre fil :
Si la macro tourne pour le classeur actif, et même si elle est dans un autre classeur :
myDir = Dir(ActiveWorkbook.Worksheets("Liste").Range("A31").Value, vbDirectory)
myDir = Dir([Liste!A31].Value, vbDirectory)
Si la macro tourne dans un module du classeur, même si ce n'est pas le classeur actif :
myDir = Dir(Thisworkbook.Worksheets("Liste").Range("A31").Value, vbDirectory)
myDir = Dir(ValeurDeCodeName.[A31].Value, vbDirectory)
(ValeurDeCodeName : Nom de l'objet Worksheet, de la rubrique "Microsoft Excel Objets" dans l'explorateur de projets, représentant la feuille nommée "Liste" du coté d'Excel.
Pour information ce nom est restitué par sa propriété CodeName, de type String en lecture seule.)
 

Sybille

XLDnaute Junior
Worksheet sans préciser d'expression Workbook devant en assume une représentant le classeur actif. Est-ce bien ce que vous voulez ?
Worksheet sans préciser d'expression Workbook devant en assume une représentant le classeur actif. Est-ce bien ce que vous voulez ?

J'ai pas tout compris...
mais je suppose au vu de ce que ça fait que ca n'est pas ce que je veux.

Je souhaite lui dire de n'enregistrer que l'onglet "Ailly" dont le nom est écrit dans l'onglet Liste en A5.

c'est censé créer un nouveau fichier qu'avec l'onglet ailly et l'enregistrer ou je souhaite.

Tout le code fonctionne quand je met Set copie = ActiveSheet sauf que ca n'enregistre pas le bon onglet.

et quand je met Set copie = Worksheets([Liste!A5].Value)... ça ne fonctionne pas!
 

Dranreb

XLDnaute Barbatruc
Vous oubliez toujours de dire pour qu'on vous comprenne : … de tel classeur … de tel classeur … de tel classeur …
 

Sybille

XLDnaute Junior
Je ré-expose mon message édité de l'autre fil :
Si la macro tourne pour le classeur actif, et même si elle est dans un autre classeur :
myDir = Dir(ActiveWorkbook.Worksheets("Liste").Range("A31").Value, vbDirectory)
myDir = Dir([Liste!A31].Value, vbDirectory)
Si la macro tourne dans un module du classeur, même si ce n'est pas le classeur actif :
myDir = Dir(Thisworkbook.Worksheets("Liste").Range("A31").Value, vbDirectory)
myDir = Dir(ValeurDeCodeName.[A31].Value, vbDirectory)
(ValeurDeCodeName : Nom de l'objet Worksheet, de la rubrique "Microsoft Excel Objets" dans l'explorateur de projets, représentant la feuille nommée "Liste" du coté d'Excel.
Pour information ce nom est restitué par sa propriété CodeName, de type String en lecture seule.)
ok,

j'ai donc tenté Set copie = Thisworkbook.Worksheets("Liste").Range("A5").Value... et je coince aussi :oops:
 

Dranreb

XLDnaute Barbatruc
Set copie = ThisWorkbook.Worksheets(Thisworkbook.Worksheets("Liste").Range("A5").Value) peut être. Ou bien :
Set copie = ThisWorkbook.Worksheets([Liste!A5].Value) ou bien, si WshList est son nom officiel pour VBA :
Set copie = ThisWorkbook.Worksheets(WshList.[A5].Value)
 
Dernière édition:

Sybille

XLDnaute Junior
Résultat :

Les 2 premières lignes ne font pas d'erreur VBA.
Par contre ça m'a effacé une partie de mon onglet Ailly et ca m'a quand même copier mon onglet Liste!!!

ça devient bizarre! :confused:
 

Dranreb

XLDnaute Barbatruc
J'ai toujours qu'un seul classeur ouvert pour des macros,
c'est censé créer un nouveau fichier
Ces deux déclaration peuvent vite devenir contradictoires.

Par exemple après :
With ActiveSheet
fichierOpus = [Liste!C5].Value
.Copy
le classeur actif n'est plus celui exécutant la macro et l'évaluation [Liste!A5] ne peut plus marcher. Mais Feuil2.[A5] marcherait toujours puisque la macro connait toujours l'objet Worksheet Feuil2.
 
Dernière édition:

Sybille

XLDnaute Junior
J'ai un fichier d'ouvert (pour vous celui nommé exemple).

Dans ce fichier, j'ai plein d'onglet comme celui d'Ailly et je souhaites que chacun de ces onglet s'enregistre dans un classeur bien précis.
D’où la création de mon onglet liste qui retrace la liste de tous les onglets a enregistrer, les lieu ou ils doivent l’être, le nom du fichier qu'il doivent avoir... etc.

Je sais qu'il va me falloir créer une boucle... mais pour le moment, je cherche juste à la faire avec mon premier onglet : Ailly!

A la base j'ai 1 fichier d'ouvert (ici nommé exemple) qui contient un onglet nommé Ailly.
Seul l'onglet ailly doit être enregistré selon les nom et endroit que j'ai écrit dans liste.
Donc surement qu'a un moment il créé un autre fichier pour enregistrer mon onglet Ailly...
sinon, nom... endroit... ça fonctionne!!

mais ça n'enregistre pas le bon onglet!

là est mon problème:(

je relis tout mon code histoire de trouver ou ça bloque!
 

vgendron

XLDnaute Barbatruc
Et si tu utilisais l'enregistreur de macro pour t'aiguiller...

VB:
 Sheets("Ailly").Select
    Sheets("Ailly").Copy
    ChDir "C:\Users\vgendron\Downloads"
    ActiveWorkbook.SaveAs Filename:="C:\Users\vgendron\Downloads\NomAilly.xlsx", _
        FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
 

Sybille

XLDnaute Junior
En tout cas merci :),

je suis certaine que ThisWorkbook.Worksheets([Liste!A5].Value) fait partie de la solution.
Je vais trouver pour le reste! :mad:

elle ne m'aura pas cette macro!!!

(enfin, pour aujourd'hui elle a gagné : j'ai mal à la tête!)

Merci

Sybille
 

Dranreb

XLDnaute Barbatruc
Vous auriez peut être intérêt à charger au début votre liste dans un tableau VBA 2D
VB:
Dim T() As Variant, L As Long
T = [Liste!A4].CurrentRegion.Value
For L = 2 To UBound(T, 1)
   ThisWorkBook.Worksheets(T(L, 1)).Copy
   With ActiveSheet.UsedRange: .Value = .Value: End With
   ActiveWorkBook.SaveAs T(L, 5)
   ActiveWorkBook.Close
   Next L
 
Dernière édition:

Discussions similaires


Haut Bas