Fichier destination et nom de feuille variables pour une macro
Bonjour,
Novice avec excel je maitrise l'import/export avec un nom de fichier ou/et nom de feuille fixe.
Mais lorsqu'il s'agit de m'aventurer vers les variables je suis complètement perdu.
Je vous expose mon soucis.
Je veux que dans ma macro le nom du fichier de destination puisse changer. (dans mon fichier exemple il s'agit de la cellule I3)
Admettons que là le fichier choisi soit "Resultats.xlsx", mais je voudrais que ma macro se réfère au contenu de cette cellule pour récupérer le nom du fichier de destination. Comme ça si le nom change la macro récupère le nouveau nom.
Il en serait de même pour le nom de la feuille (par exemple le nom change automatiquement avec la date insérée dans la case jaune.
Je ne suis pas si je suis très clair. Excusez-moi si ce n'est pas le cas.
Concrètement :
Je cherche à faire une macro qui ouvre le fichier dont le nom est contenu dans I3, importe B7:B12 dans la feuille de I3 dont le nom est contenu dans I5. Pour finalement fermer le fichier de destination.
Avez vous une idée de la manière de procéder?
Merci d'avance pour votre aide !
Je suis parti du principe que les fichiers étaient dans un même dossier et que le classeur de destination existait avec l'onglet qui va bien.
Au passage, sans les variables, VBA n'existerait pas. Passez un peu de temps sur le cours VBA, vous ne le regretterez pas.
Essayez ceci :
Sub Macro1()
Dim wB1 As Workbook, wB2 As Workbook, wS2 As Worksheet
Dim wB2Name As String, wS2Name As String ' Les variables
Application.ScreenUpdating = False
wB2Name = ThisWorkbook.Path & "\" & Range("I3")
wS2Name = Range("I5")
Set wB1 = ThisWorkbook
Set wB2 = Workbooks.Open(Filename:=wB2Name)
Set wS2 = wB2.Sheets(wS2Name)
' On donne le focus à la page souhaitée
wS2.Select
ThisWorkbook.Worksheets("Feuil1").Range("B7:B12").Copy _
wS2.Cells(7, 2)
ActiveWorkbook.Close SaveChanges:=True
Application.ScreenUpdating = True
End Sub
Bonjour à tous,
Une autre solution :
Il faudrait préciser le répertoire du fichier Resultats dans la zone nommée dans Feuil1. Préciser également la cellule de destination dans le code.
Option Explicit
Sub CopierDansFichierResultats()
Dim OnlgetTrouve As Boolean
Dim I As Integer
Dim CheminCible As String, Onglet As String
Dim CellulesACopier As Range
Dim WbResultats As Workbook
Application.ScreenUpdating = False
With ThisWorkbook
CheminCible = .Path & "\" & Range("FichierDestination") ' A défaut
'CheminCible = .Range("RepertoireDestination") & "\" ' A noter dans l'onglet Feuil1
Onglet = .Sheets("Feuil1").Range("OngletDestination")
Set CellulesACopier = .Sheets("Feuil1").Range("AireACopier") ' B7:B12
End With
If FichierOuvert(CheminCible) Then
Set WbResultats = Workbooks(CheminCible)
Else
Set WbResultats = Workbooks.Open(Filename:=CheminCible)
End If
With WbResultats
OnlgetTrouve = False
For I = 1 To .Sheets.Count
If .Sheets(I).Name = Onglet Then
CellulesACopier.Copy Destination:=.Sheets(I).Range("A1") ' Première cellule à préciser
OnlgetTrouve = True
End If
Next I
.Close savechanges:=True
End With
Application.ScreenUpdating = True
If OnlgetTrouve = True Then
MsgBox "Copie terminée !", vbInformation
Else
MsgBox "Onglet : " & Onglet & " non trouvé !", vbCritical
End If
End Sub
Function FichierOuvert(ByVal NomDuFichier As String) As Boolean
Dim WbEnCours As Workbook
FichierOuvert = False
For Each WbEnCours In Workbooks
If WbEnCours.Name = NomDuFichier Then FichierOuvert = True
Next WbEnCours
End Function
Merci à tous les deux, c'est exactement ce que je recherchais !
Clairement si j'avais dû trouver une solution pour le chemin de destination je me serais arraché les cheveux !
@Eric ta solution pour vérifier l'existence de l'onglet est parfaite :)