Je cherche à activer une feuille dans un classeur différent de ThisWorkbook, qui est ouvert et visible, mais en la sélectionnant avec son nom qui est contenu dans une cellule de ThisWorkbook. Le nom existe donc bien, car récupéré 2sec avant.
Pour résumer ce que je compte faire, j'ai une listbox qui me recense les feuilles sélectionnées (de l'autre classeur ouvert) par l'utilisateur, et les saisies dans ma ThisWorbook.Sheets(1), dans une plage bien définie, et j'exécute un code avec un for..to sur chacune des feuilles sélectionnées.
Auparavant j'avais un BookToCopy.ActiveSheet qui marchait très bien, mais maintenant je veux pouvoir sélectionner la feuille avec son nom contenu dans la cellule A1 de la feuille 1 de ThisWorkbook.
Je ne sais pourquoi la dernière ligne ci-après ne fonctionne pas.. (err. 438)
Petit bout de code pour que vous voyez un peu le contexte :
BookToCopy is a workbook / SheetToCopy is a worksheet / NameSheetToCopy is a string
VB:
For i = 1 To .SelectedItems.Count 'Début de boucle pour chaque fichier sélectionné
Set BookToCopy = Workbooks.Open(FD.SelectedItems(i)) 'BookToCopy = Fichier ouvert
UserForm.Show
'Application.ScreenUpdating = False
LastSheetInMain = Sheets(1).Cells(Rows.Count, 48).End(xlUp).Row
For fCell = 4 To LastSheetInMain Step 1 'Début de boucle pour chaque feuille sélectionnée
BookToCopy.Visible = True
'Set SheetToCopy = BookToCopy.ActiveSheet
NameSheetToCopy = ThisWorkbook.Sheets(1).Range("A1").Value
If NameSheetToCopy <> 0 Then MsgBox ("OK pas vide")
'Set SheetToCopy = BookToCopy.Sheets(NameSheetToCopy) 'On copie la feuille sélectionnée
En vous remerciant si vous avez une idée du pourquoi du comment, ou une alternative.
Je précise que j'ai passé une heure et demi à chercher en FR/EN sur internet avant de venir poser ma question et ai testé 15 solutions possibles mais rien n'y fait..
Sans savoir quelle ligne provoque ton problème
ni aucun fichier pour se rendre compte ..
essaie ceci
Set SheetToCopy = BookToCopy.Sheets(cstr(NameSheetToCopy)) 'On copie la feuille sélectionnée
Bonjour,
Ta réponse m'a aidé, partiellement, ce que je souhaitais faire fonctionne.
Mon plus gros problème était de récupérer la valeur de la cellule dans ma variable, que j'utilise pour nommer définir le nom de la feuille sur laquelle le reste du code va tourner.
VB:
NameSheetToCopy = ThisBook.Sheets(1).Cells(fCell, 48)
Set SheetToCopy = BookToCopy.Sheets(CStr(NameSheetToCopy))
SheetToCopy.Copy After:=ThisBook.Sheets(Sheets.Count)
Vinaigrette57
Suggestion en passant
Inutile d'anonymiser
Excel le fait pour toi !
Si tu suffit de créer ex nihilo un fichier Excel (ou deux dans le cas présent) exemple qui ne sert qu'à illustrer la problématique rencontrée.
On a pas besoin du fichier original.