Bonjour à tous,
N'étant pas un pro de VBA, j'ai besoin d'un coup de main pour déboguer ma macro.
Mon problème est le suivant:
J'ai 2 classeurs Excel, un que l'on peut qualifier de classeur source qui contient une seule feuille avec des données à extraire et un autre que l'on peut qualifier de classeur destination contenant plusieurs feuilles dans lesquelles il faut copier certaines cellules (non contiguës) de la feuille du classeur source sous certaines conditions (portant sur les valeurs de cellules).
...j'espère n'avoir perdu personne pour le moment
J'ai donc écrit la macro suivante dans le classeur destination qui ouvre le classeur source et va chercher les données à copier:
A la compilation je me prends un "Erreur d'exécution '1004': Erreur définie par l'application ou l'objet" et je ne sais pas d'où ça vient.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 Option Explicit Public Sub importData() Dim dataCollector As Integer, iteration As Integer, i As Long dataCollector = 1 Dim dataWorkbook As Workbook Set dataWorkbook = Application.Workbooks.Open("fichier_source.xls") 'En vrai ce n'est pas le "fichier_source.xls" mais le nom de mon fichier avec son chemin absolu... Dim inputSheet As Worksheet, outputSheet As Worksheet Set inputSheet = dataWorkbook.Worksheets(1) Dim sourceRange As Range inputSheet.Cells(2, 6).Activate Set sourceRange = Range(ActiveCell, ActiveCell.End(xlDown)) For dataCollector = 1 To 6 Step 1 Dim myRange As Range Set outputSheet = Workbooks("Analyse temps de parcours.xls").Worksheets(dataCollector + 1) For iteration = 1 To 6 Step 1 For i = sourceRange.End(xlUp).Row To sourceRange.End(xlDown).Row Step 1 If Cells(i, 1).Value = iteration Then Set myRange = Application.Union(myRange, Range(Cells(i, 6))) End If Next i myRange.Copy (outputSheet.Cells(6, iteration + 1)) Next iteration Next dataCollector End Sub
J'ai l'intuition que je fais de la m**** en manipulant des objets (au hasard du type range) mais je ne comprends pas pourquoi.
Peut être le fait de re-déclarer à chaque passage dans ma boucle "dataCollector" mon range "myRange", ce qui m'amène donc à la question suivante:
Comment fait-on pour supprimer le contenu de l'objet range ou l'objet lui-même (du genre Set myRange = NULL ou DeleteRange(myRange))?
PS:
Etant que la liste de cellules à balayer est plutôt longue (2812 dans mon cas précis), il serait plus judicieux de créer un tableau de 6 objets de type range et de ne balayer qu'une fois la liste plutôt en remplissant tous les ranges avec les bonnes cellules plutôt que de balayer 6 fois la liste comme je fais ici...mais ça dépasse mes compétence de "codeur" VBA débutant. Si quelqu'un se sent de m'expliquer comment faire, je suis preneur!
Merci d'avance pour le coup de main.
Partager