erreur "object variable not set", probablement facile à résoudre

A

Antoine

Guest
Bonjour,

je suis actuellement en train de réaliser une procédure en VBA pour Excel, dont le but est de récupérer des données d'un autre classeur dont le nom et le chemin sont définis dans des cellules du classeur courant.
Apprenant le VBA pour l'occasion, j'ai étudié un exemple de code pour copier/coller des données d'un classeur à un autre. Voila le code proposé :

ThisWorkbook.Activate
Sheets("Sheet1").Select
Range("A1").Select
Selection.CurrentRegion.ClearContents
Workbooks.Open "workbook2.xls"
Sheets("Sheets1").Select
Range("A1").CurrentRegion.Select
Selection.Copy
ThisWorkbook.Activate
Sheets("Sheet1").Select
Range("A1").Select
ActiveSheet.Paste
Application.CutCopyMode=False

Je mets Sub Testcopy avant la première ligne, et je termine bien la procédure par End Sub. Mon problème c'est que j'ai un message d'erreur "basic runtime error : variable object not set" qui semble concerner la ligne "ThisWorkbook.Activate" (juste après la déclaration de la procédure).
Si vous pouvez m'aider, je vous en serait vraiment enormément reconnaissant.
Merci d'avance pour votre réponse.

--
Antoine
 
@

@+Thierry

Guest
Bonjour Antoine, le Forum

Ton problème ne vient pas de "ThisWorkbook.Activate" en début de code, c'est une instruction Standard qui doit être acceptée normalement.

De toute manière, si tu souhaites progresser en VBA, qui est le language des "Objects", il faut apprendre à les utiliser et les déclarer comme il faut. L'enregistreur de Macro, hélas arrête là son assistance, puisqu'il ne se base pas sur des déclarations de Set d'Objets, ou de Variables.

Voici un code où je me suis efforcé d'utiliser des noms faciles à comprendre pour les Objects :

Sub Testcopy()
Dim WorkBookCible As Workbook
Dim WorkSheetCible As Worksheet
Dim WorkBookSource As Workbook
Dim WorkSheetSource As Worksheet
Dim PlageSource As Range
Dim CheminWorkBookSource As String

CheminWorkBookSource = "C:\Mes Documents\MonClasseurSource.xls"

Set WorkBookCible = ThisWorkbook
Set WorkSheetCible = WorkBookCible.Sheets("Sheet1")

WorkSheetCible.UsedRange.ClearContents

Workbooks.Open CheminWorkBookSource
Set WorkBookSource = ActiveWorkbook
Set WorkSheetSource = WorkBookSource.Sheets("Sheet1")
Set PlageSource = WorkSheetSource.UsedRange

PlageSource.Copy WorkSheetCible.Range("A1")

WorkBookSource.Close False
End Sub

Voilà si celà peut t'aider, il faut lire l'aide VBA (Touche F1 en sélectionnant des mots dans l'éditeur (VBE)) et il y a aussi ce Forum XLD, une vraie mine d'or pour apprendre et comprendre.

Bon Dimanche
@+Thierry
 
R

Robert

Guest
Salut Antoine, salut le forum.

Ta macro à l'air correcte j'ai dû l'adapter pour qu'elle fonctionne chez moi en changeant le nom des feuilles Feuil1 pour Sheet1.
J'ai renommé puis supprimé le fichier workbook2.xls ce qui a bien sûr provoqué un bug mais pas du tout le message que tu cites. Si cela peut t'aider je te commente ta macro adaptée.

Public Sub Testcopy()
'active ce classeur
'(en principe non nécessaire sauf si tu lances la macro
'à partir d'un autre classeur)
ThisWorkbook.Activate
'Sélectionne l'onglet "Feuil1" (vérifie le nom de l'onglet et adapte-le)
Sheets("Feuil1").Select
'sélectionne la cellule A1
Range("A1").Select
'efface le contenu des cellules adjacentes à A1
Selection.CurrentRegion.ClearContents
'ouvre le classeur "workbook2.xls"(vérifie le nom et adapte-le)
Workbooks.Open "workbook2.xls"
'sélectionne l'onglet "Feuil1" (vérifie le nom de cet onglet)
Sheets("Feuil1").Select
'sélectionne toutes les cellules adjacentes à A1
Range("A1").CurrentRegion.Select
'copie la sélection
Selection.Copy
'active le classeur de départ
ThisWorkbook.Activate
'sélectionne l'onglet "Feuil1"
'(pas nécessaire puisque tu l'à déjà fait en debut de macro)
Sheets("Feuil1").Select
'sélectionne la cellule A1
'(pas nécessaire car c'est toujours la cellule active)
Range("A1").Select
'colle le contenu du presse-papiers
ActiveSheet.Paste
'desactive le mode collage
Application.CutCopyMode = False
End Sub

À plus,

Robert
 

Discussions similaires

Statistiques des forums

Discussions
312 497
Messages
2 088 984
Membres
103 998
dernier inscrit
Gotteland