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

Rechercher des sujets similaires à "erreur 1004 appel procedure"