Erreur 1004 dans appel procédure
Bonjour,
quand je lance la macro suivante (Excel 2010), tout se passe bien :
Sub Selec()
Dim i0 As Long
Dim i1 As Long
Dim j As Long
i0 = 1
j = 20
With Feuille
While Cells(i0, 1) = ""
i0 = i0 + 1
Wend
While Cells(i0, j) = ""
j = j - 1
Wend
With ActiveSheet
i1 = .Cells(.Rows.Count, "A").End(xlUp).Row
Set Plage = Range(.Cells(i0, 1), .Cells(i1, j))
Plage.Copy
End With
End With
Cependant, lorsque je l'appelle avec celle-ci, j'obtient l'erreur 1004 à la ligne :
i0 = i0 + 1
Sub Compilation()
Dim Feuille As Worksheet
Dim Plage As Range
Dim k As Long
Dim n As Long
For Each Feuille In ThisWorkbook.Worksheets
If Feuille.Name = "Compilation" Then
Application.DisplayAlerts = False
Feuille.Delete
End If
Next Feuille
Sheets.Add After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = "Compilation"
For Each Feuille In ThisWorkbook.Worksheets
If Feuille.Name <> "Compilation" Then
With Feuille
Call Selec
Plage.Copy _
Worksheets("Compilation").Range("A65536").End(xlUp).Offset(1, 0)
End With
End If
Next Feuille
Quelq'un saurait-il m'expliquer ce qui ne va pas??
MERCI!!
salut
tu appelles la macro selec sans préciser la feuille.
with feuille (dans macro select) renvoi vide.
donc ton code compte les lignes de la feuille active soit la feuille compilation, comme il n'y a rien sur cette feuille la boucle while bug à la derniere ligne de la feuille.
donc il te faut passer l'argument de la feuille à la macro selec et corriger les blocs d'instruction with en faisant précéder les arguments d'un point, exemple :
with sheets("feuil2")
msgbox .range("a1") 'renvoi la cellule A1 de la feuil2
msgbox range("a1")'renvoi la cellule A1 de la feuille active.
end with
j'ai corrigé ton code sans trop savoir ce qu'il faisait, ca ne bug pas chez moi :
Sub Selec(feuille)
Dim i0 As Long
Dim i1 As Long
Dim j As Long
i0 = 1
j = 20
With feuille
While .Cells(i0, 1) = ""
i0 = i0 + 1
Wend
While .Cells(i0, j) = ""
j = j - 1
Wend
'With ActiveSheet
i1 = .Cells(.Rows.Count, "A").End(xlUp).Row
Set Plage = .Range(.Cells(i0, 1), .Cells(i1, j))
Plage.Copy _
Worksheets("Compilation").Range("A65536").End(xlUp).Offset(1, 0)
'End With
End With
End Sub
Sub Compilation()
Dim feuille As Worksheet
Dim Plage As Range
Dim k As Long
Dim n As Long
For Each feuille In ThisWorkbook.Worksheets
If feuille.Name = "Compilation" Then
Application.DisplayAlerts = False
feuille.Delete
End If
Next feuille
Sheets.Add After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = "Compilation"
For Each feuille In ThisWorkbook.Worksheets
If feuille.Name <> "Compilation" Then
With feuille
Call Selec(feuille)
End With
End If
Next feuille
End Sub
a plus
Nickel, merci beaucoup, ça marche!
L’intérêt du code serait de rassembler des tableaux de plusieurs feuilles dans la feuille compilation pour ensuite créer lancer un tableau dynamique.
Si t vex bien jeter un coup d’œil au fichier joint, tu verras qu'il y a des lignes de zéros sur une feuille, qui sont copiées quand même alors que sur toutes les autres feuilles, elles sont exclues (ce que je souhaite).
Sonnaitrais-tu une manière de faire directement apparaître en lançant la macro, un Tableau Dynamique Croisé qui prendrait pour données l'ensemble du tableau de la fiche compilation (ce tableau n'ayant pas de nombre de ligne déterminé puisqu'il sera amené à grandir)?
Merci!!
Tim