Copier coller des données d'autres fichiers

mickmac Messages postés 447 Statut Membre -  
mickmac Messages postés 447 Statut Membre -
Bonjour à tous,

Je souhaite faire un fichier qui me permette de regrouper sur une unique feuille les données(enfin que le "corps" ; sans les entetes et la toute derniere ligne somme) d'autres fichiers (contenant plusieurs feuilles mais toutes sont formalisées de la même manière).

J'ai donc commencé un programme avec un formulaire qui marche bien.
Cependant je bloque pour le copiage et collage des données et je ne trouve pas comment avancer.

j'envoie ci joint le fichier qui accueillera les données des rapports d'activités et 2 exemples de rapport d'activité

Et je colle içi ma procédure copiecolle dont le déboggeur me renvoie une erreur des la premiere ligne (sub ou function non définie)

Private Sub copiecolle(fichier As String)
Dim debut As Integer: Dim position As Integer: Dim text As Variant: Dim nomfichier As Variant: Dim lign As Integer: Dim colon As Integer: Dim x As Integer: Dim y As Integer
Dim sh As Worksheet


'ouvrir le premier fichier pour pouvoir copier coller ses données'

Worbook.Open fichier
nomfichier = Dir(fichier)

'Pour chaque feuille du fichier à copier, trouver le nombre de lignes et jusqu'à ce que la colonne 1 contienne un vide'
Dim count As Long: Dim cel As Range
For Each sh In nomfichier
count = 0
For Each cel In Columns(1)
If cel.Value <> "" Then
count = count + 1
End If
Next cel
MsgBox count
'comme la 2eme ligne de chaque feuille est une ligne d'entete en 2eme ligne qui ne m'interesse pas, je dois enlever 1 au compteur'
count = count - 1
MsgBox count
'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 '
For y = 3 To count
Workbook(prévisionnel).Worksheet("Feuil1").Row.Value=Workbook(nomfichier).Worksheet("sh").Row(ligne_encours).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 colonne d'en dessous '
Next

Next



End Sub


EDIT : Ajout du LANGAGE dans les balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.


https://www.cjoint.com/c/HDwhOSG6Z8W

https://www.cjoint.com/c/HDwhRV6hMeW

https://www.cjoint.com/c/HDwhSwf7CIW

Merci beaucoup de votre aide ^^

PS: je viens de voir la présentation du code ; ça rend pas très bien sur le forum c'est normal ?

1 réponse

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour,
    quand tu écris "erreur des la premiere ligne", de quelle ligne s'agit-il?
    corrections de quelques erreurs évidentes:
    Option Explicit
    
    Private Sub copiecolle(fichier As String)
    Dim debut As Integer, position As Integer, text As Variant
    Dim lign As Integer, colon As Integer, x As Integer, y As Integer
    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'
    Dim count As Long, cel As Range
    For Each sh In cl
    count = 0
    For Each cel In Columns(1) ' pas prudent de ne pas spécifier l'onglet pour Columns(1)
    If cel.Value <> "" Then
    count = count + 1
    End If
    Next cel
    MsgBox count
    'comme la 2eme ligne de chaque feuille est une ligne d'entete en 2eme ligne qui ne m'interesse pas, _
        je dois enlever 1 au compteur'
    count = count - 1
    MsgBox count
    '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 '
    For y = 3 To count
    Workbooks("prévisionnel").Worksheet("Feuil1").Row.Value = sh.Rows(ligne_encours).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 colonne d'en dessous '
    Next
    
    Next
    
    
    
    End Sub
    
    0
    1. mickmac Messages postés 447 Statut Membre 6
       
      Bonjour et merci de ta réponse
      L'erreur renvoyé est simplement
      erreur de compilation sub ou function non définie


      en surlignant en jaune

      Private Sub copiecolle(fichier As String)


      j'ai vu une erreur aussi j'ai écrit
      Workbooks("prévisionnel").Worksheet("Feuil1").Row.Value = 


      or je pense que j'aurais du écrire évidemment

      Workbooks("prévisionnel").Worksheet("Feuil1").Row(y).Value 
      0
    2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > mickmac Messages postés 447 Statut Membre
       
      peut-être:
      Workbooks("prévisionnel").Worksheet("Feuil1").Rows(ligne_encours).Value = sh.Rows(y).Value
      0
    3. mickmac Messages postés 447 Statut Membre 6
       
      c'est pas faux d'ailleurs ^^ merci

      ça me renvoie le message
      Seuls des commentaires peuvent apparaître après End Sub, End Function, ou End Property
      maintenant en surlignant en bleu "option explicit"
      Du coup je l'ai enlevé et on progresse !!

      Le déboggeur indique
      erreur 438 "propriété ou méthode non géré par cet objet" sur la ligne
      For Each sh In cl

      rien n'a été collé mais par contre le premier rapport d'activité c'est ouvert !!

      Donc c'est hyper positif alors je te remercie même si l'aventure est pas fini ^^
      0
    4. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > mickmac Messages postés 447 Statut Membre
       
      c'est assez confus, car tu aurais trois fichiers:
      - celui dans lequel se trouve le code
      - celui dont le nom est passé en paramètre à la fonction
      - Workbooks("prévisionnel")
      et les commentaires ajoutent à la confusion:
      le premier fichier
      du fichier à copier
      chaque fichier de la liste
      mon fichier prévisionnel
      0
    5. mickmac Messages postés 447 Statut Membre 6
       
      en fait j'ai le fichier "prévisionnel" qui est celui qui regroupera en 1 tableaux les feuilles des 2 autres fichiers (rapports d'activités).
      Quand tu ouvres le fichier "prévisionnel" (que j'ai mis en lien cjoint plus haut) tu arrives sur un formulaire . L'utilisateur n'a qu'a cliquer sur "importer" et aller chercher les rapports d'activités (j'en ai mis 2 ; ce sont les 2 autres liens cjoint).
      Le chemin des fichiers sélectionner par l'utilisateurs (donc des rapports d'activité) s'inscrit dans une petite liste à gauche des boutons.

      Et en cliquant sur traiter, le programme doit renvoyer dans la feuil1 du fichier "prévisionnel" l'ensemble des données des différentes feuilles des rapports d'activités(sauf la 1ere ligne qui contient une image normalement , la 2ieme ligne qui contient toujours les même entetes et une autre ligne bien en dessous -pour laquel la colonne A est vide- et qui ne m'intéresse pas).

      J'espère que je suis clair et je m'excuse de mon manque de clarté passé en effet

      Dans les commentaire du code plus haut

      "fichier à copier" c'est donc un rapport d'activité (d'abord le premier de la liste dans le formulaire puis le 2ième...)

      je reposte le fichier"prévisionnel" modifié grace à tes bons soins

      https://www.cjoint.com/c/HDwn1hqcirW
      0