Propriété ou méthode non géré boucle For Each sheet In classeur

Bonjour,

j'ai fait un programme sur un fichier excel mais je ne parviens pas à le faire marcher. Ca bloque à la ligne

For Each sh In cl 

avec une erreur 438 "propriété ou méthode non géré par cet objet".

Que je vous explique;

Mon programme , dans le fichier "prévisionnel"

  • propose à l'utilisateur d'importer des fichiers excel (en l'occurence l'utilisateur importera des rapports d'activités; qui sont des fichiers excel composées de plusieurs feuilles toutes formalisés identiquement). je fais ça grace à un formulaire qui marche bien (bouton importer)
  • le chemin des fichiers s'inscrit dans une petite liste dans le formulaire à gauche des boutons
  • En appuyant sur le bouton "traiter" , le programme est censé copier dans une unique feuille(feuil1 du fichier "prévisionnel") les données -de la ligne 3 -jusqu'à ce qu'une ligne soit vide en A- et ce pour chaque feuille de chaque rapport d'activité importé.

Voici le code que j'ai réalisé (en partie car j'ai eu de l'aide). Je souligne la procédure qui pose problème et met en gras la ligne qui est pointé lors de la compilation

 Option Explicit
Dim ligne_debut As Integer, colonne_debut As Integer
Dim ligne_fin As Integer, colonne_fin As Integer
Dim ligne_encours As Long, colonne_encours As Integer

Private Sub importer_Click()
Dim fichier_choisi As String
fichier_choisi = Application.GetOpenFilename("Fichier Excel (*.xlsx), *.xlsx")
  If (LCase(fichier_choisi) <> "faux" And fichier_choisi <> "0") Then
    liste_fichiers.AddItem (fichier_choisi)
  End If

End Sub

Private Sub traiter_Click()

Dim nom_fichier As String, i As Integer

ligne_debut = 2: colonne_debut = 1
ligne_encours = ligne_debut: ligne_encours = ligne_fin
Cells.Clear
colle_entetes
For i = 0 To liste_fichiers.ListCount
copiecolle (liste_fichiers.List(i))
Next i

End Sub
Private Sub colle_entetes()
  Dim Plage As Range
  Dim Cellule As Range

  'Copier de la ligne 2 de la feuille entetes vers la ligne 3 de la feuil1
 Worksheets("Feuil1").Range("A1:AAA1").Value = Worksheets("entetes").Range("A1:AAA1").Value
End Sub

[u]Private Sub copiecolle(fichier As String)
Dim y As Long
Dim sh As Worksheet
Dim cl As Workbook
Dim ligne_encours As Long

'ouvrir le premier fichier pour pouvoir copier coller ses données'
Set cl = Workbooks.Open(fichier)

'Pour chaque feuille du fichier à copier, trouver le nombre de lignes et jusqu'à ce que la colonne 1 contienne un vide'
[b]For Each sh In cl[/b]

'Pour chaque fichier de la liste, pour chaque feuilles de ce fichier, _
    pour chaque ligne à partir de la ligne 3, _
    je viens copier la ligne et la coller dans la feuil1 du fichier prévisionnel '
    y = 3
    Do While sh.Cells(y, 1) <> ""
        ThisWorkbook.Worksheets("Feuil1").Rows(ligne_encours).Value = sh.Rows(y).Value
        ligne_encours = ligne_encours + 1 'j'incrémente ligne_encours afin que dans mon fichier prévisionnel, _
            la copie continue à ce faire dans la ligne d'en dessous '
        y = y + 1
    Loop
Next
End Sub[/u]

De plus je joint mon fichier "prévisionnel" ainsi que deux exemples de rapport d'activité

Merci beaucoup de votre aide

ok en rajoutant .worksheet ça cl ça marche pour cette ligne

Mais maintenant c'est

Do While sh.Cells(y, 1) <> ""

qui bloque avec une erreur 91 Objet ou bloc de With non défini

bonjour,

For Each sh In cl.WorkSheets
    ...............................
Next sh

Bonjour et merci de ta réponse,

En effet comme dit mon deuxieme message j'avais rectifié le .worksheets mais pas next sh

en revanche j'avais une nouvelle erreur à la ligne

ThisWorkbook.Worksheets("Feuil1").Rows(ligne_encours).Value = sh.Rows(y).Value

Erreur définie par l'application ou par l'objet

Bonjour,

Tu nous fait une salade de déclarations...

C'est y ou ligne_encours que tu incrémentes ?

...Suis pas encore sur d'avoir tout compris c'est pourquoi je ne joins pas le fichier corrigé !

A+

Le "ligne_encours" est utile pour remplir le futur tableau unique (dans "prévisionnel") tandis que y est incrémenté pour descendre dans chaque feuille de chaque rapport d'activités

Pas de problème et je ne suis d'ailleurs peut etre pas très clair dans mes explications

Ton fichier corrigé.

Sorry j'ai corrigé même les noms de variable parce que pour moi tes noms à rallonge c'est illisible...

A+

Bonjour et merci, il y a une avancé majeur par rapport au mien ^^

Mais à ceci prit que toutes les données ne sont pas renvoyé visiblement par ton fichier car il ne renvoie "que 43 lignes"

Je ne me suis occupé que du "gros-oeuvre" pas des finitions !

Déplace le iR = 2 tout au début de la macro (juste après le dernier Dim...)

A+

Super merci beaucoup !!

j'ai été étonné que tu ai meme changer le formulaire hahaha

j'ai été étonné que tu ai même changer le formulaire

Le ListBox était trop petit : Je n'arrivais pas lire le nom (et chemin...) du ficher.

J'ai aussi mis le ListBox en Multiselect = True

A+

Rechercher des sujets similaires à "propriete methode gere boucle each sheet classeur"