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 SubLa 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 CSA+
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 SubQuelle 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")
...