Selection d'un fichier avec un macro

Bonjour,

Dans le classeur sur lequel je travail je dois rentrer des données présentes dans un autre classeur. Pour cela j'aimerai pouvoir réaliser un code qui demande à l'utilisateur de sélectionner le fichier voulu. Cela évitera d'aller modifier le code à chaque fois qu'on veut changer de fichier

Voici le début de mon code:

Sub Population()
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim OS As Worksheet 'déclare la variable OS (Onglet source)

Set CD = ThisWorkbook 'définit le classeur destination CD
Set OD = CD.Worksheets("Données Pop+activité+logements") 

CS = Application.GetOpenFilename("*.xls,*.xlsx") 'définit le classeur source CS
If CS = False Then 
    MsgBox "Operation annulée", vbExclamation
    Exit Sub
End If
Workbooks.Open CS

.
.
.'Code inutile pour la question posée
.

End Sub

La fenêtre permettant de selectionner s'ouvre. Je clique dessus et l'ouvre sans problème, mais ensuite le code s'arrête et l'erreur 91 apparait Variable objet ou variable de bloc Whith non définie.

Le problème est mentionné à la ligne CS = Application.GetOpenFilename("*.xls,*.xlsx").

Des idées par rapport à ce qui cloche ?

Merci

Bonjour,

GetOpenFilename renvoie soit le nom d'un fichier, soit un tableau contenant les nom des fichiers sélectionnés, soit False (si aucune sélection). La variable recevant le résultat de GetOpenFilename ne doit donc pas être déclarée as Workbook , mais as Variant:

Dim CS as Variant 
'ou 
'Dim CS

A+

D'accord, mais le soucis c'est que lorsque je déclare Dim CS As Variant, la suite de mon code ne fonctionne plus au niveau du Set OS = .. .

Voici le code complet :

Sub Population()
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim CS As Variant 'déclare la variable CS (Classeur Source)
Dim OS As Worksheet 'déclare la variable OS (Onglet source)

Set CD = ThisWorkbook 'définit le classeur destination CD
Set OD = CD.Worksheets("Données Pop+activité+logements") 
CS = Application.GetOpenFilename("*.xls,*.xlsx")
If CS = False Then 'définit le classeur source CS
    MsgBox "Operation annulée", vbExclamation
    Exit Sub
End If

Set OS = CS.Worksheets("Données Pop+activité+logements")

OS.Range("A2").Copy
OD.Cells(4, "A").PasteSpecial Paste:=xlPasteValues

OS.Range("B3:N4").Copy
OD.Cells(5, "B").PasteSpecial Paste:=xlPasteValues

OS.Range("T3:U7").Copy
OD.Cells(5, "T").PasteSpecial Paste:=xlPasteValues

OS.Range("T18:U20").Copy
OD.Cells(20, "T").PasteSpecial Paste:=xlPasteValues

CS.Close False
End Sub

Quelle est la syntaxe à utiliser dans ce cas ?

Une solution en passant par une variable supplémentaire:

Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim MonFic As Variant 'déclare la variable MonFic (chemin+nom du classeur Classeur Source) <=nouvelle variable
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim OS As Worksheet 'déclare la variable OS (Onglet source)

Set CD = ThisWorkbook 'définit le classeur destination CD
Set OD = CD.Worksheets("Données Pop+activité+logements") 
MonFic = Application.GetOpenFilename("*.xls,*.xlsx")
If MonFic = False Then 'définit le classeur source MonFic
    MsgBox "Operation annulée", vbExclamation
    Exit Sub
End If

Set CS = Workbooks.Open(MonFic)     ' <= initialisation de CS et ouverture classeur
Set OS = CS.Worksheets("Données Pop+activité+logements")
...
Rechercher des sujets similaires à "selection fichier macro"