Copie contenu d'une feuille sur une feuille d'un autre classeur

Copie contenu d'une feuille sur une feuille d'un autre classeur - VB/VBA/VBS - Programmation

Marsh Posté le 04-10-2017 à 13:27:54    

Bonjour,
 
Quelqu'un pourrait-il m'aider à résoudre mon problème de copie ?
J'ai testé différentes manières de faire et je n'arrive pas a trouver une méthode qui fonctionne pour moi.
Je sais qu'il existe des erreurs et j'ai besoin de jolis yeux extérieurs pour m’éclairer.
 
Je souhaite copier le contenu d'une feuille nommée "Historique des saisies" d'un classeur en xlsm sur une feuille nommée "Import" du classeur d'ou je lance la macro.
 
Voici le code :
_________________________________________________________________________________________
 
Private Sub lecture(fichier As String)
Dim depart As Integer, position As Integer
Dim texte As String, tampon As String, extension As String, nomfichier As String
 
extension = Mid(fichier, InStrRev(fichier, "." ) + 1)
 
 
If extension = "csv" Then
 
    Open fichier For Input As #1
     
    Do While Not EOF(1)
 
        Line Input #1, texte
        depart = 1: position = 1
     
        Do While (position <> 0)
     
            position = InStr(depart, texte, ";", 1)
             
            If position = 0 Then
                tampon = Mid(texte, depart)
                Sheets("Import" ).Cells(ligne_enCours, colonne_enCours).Value = tampon
                Exit Do
            Else
                tampon = Mid(texte, depart, position - depart)
            End If
         
            Sheets("Import" ).Cells(ligne_enCours, colonne_enCours).Value = tampon
            depart = position + 1
            colonne_enCours = colonne_enCours + 1
        Loop
     
        colonne_enCours = colonne_debut
        ligne_enCours = ligne_enCours + 1
     
    Loop
     
    Close #1
 
Else
 
    Open fichier For Input As #1
     
    Dim plageTableau As Range, origine As Range, destination As Range
    nomfichier = Mid(fichier, InStrRev(fichier, "\" ) + 1)
 
    Set plageTableau = Range("A2:A" & Range("A2" ).End(xlDown).End(xlToRight).Row)
    Set origine = Workbooks(nomfichier).Sheets("Historique des saisies" ).Range(plageTableau) erreur 1004 erreur definie par l'application ou par l'objet
     
    Set destination = ThisWorkbook.Sheets("Import" ).Range("A" & Range("A1" ).End(xlDown).Row)
     
    origine.Copy destination
     
     
    Close #1
 
End If
 
End Sub
 
________________________________________________________________________________________________________________
 

Reply

Marsh Posté le 04-10-2017 à 13:27:54   

Reply

Marsh Posté le 04-10-2017 à 15:08:02    

Bon, j'ai modifié un peu
 
Open fichier For Input As #1
       
    nomfichier = Mid(fichier, InStrRev(fichier, "\" ) + 1)
     
    Workbooks(nomfichier).Sheets("Historique des saisies" ).Range("A2:R" & Range("A2" ).End(xlDown).Row).Copy destination:=ThisWorkbook.Sheets("Import" ).Range("A" & Range("A1" ).End(xlDown).Row)
     
    Close #1
 
Cette fois-ci j'ai une erreur de taille de zone de collage quand le fichier d'importation est ouvert et une erreur 9 l'indice n'appartient pas à la sélection quand le fichier est fermé

Message cité 1 fois
Message édité par PreDaToR1675 le 04-10-2017 à 15:12:29
Reply

Marsh Posté le 06-10-2017 à 09:00:00    

PreDaToR1675 a écrit :

Bon, j'ai modifié un peu

 

Open fichier For Input As #1
     
    nomfichier = Mid(fichier, InStrRev(fichier, "\" ) + 1)
   
    Workbooks(nomfichier).Sheets("Historique des saisies" ).Range("A2:R" & Range("A2" ).End(xlDown).Row).Copy destination:=ThisWorkbook.Sheets("Import" ).Range("A" & Range("A1" ).End(xlDown).Row)
   
    Close #1

 

Cette fois-ci j'ai une erreur de taille de zone de collage quand le fichier d'importation est ouvert et une erreur 9 l'indice n'appartient pas à la sélection quand le fichier est fermé


Salut !

 

En plus simple:

Code :
  1. Sub ImportDonnees()
  2. Dim NomClasseur As String
  3. Dim FichierAOuvrir As String
  4. 'Note le nom de ce classeur afin d'y revenir
  5. NomClasseur = ActiveWorkbook.Name
  6. 'Ouvre le fichier cible
  7. FichierAOuvrir = Application.GetOpenFilename()
  8. Workbooks.Open Filename:=FichierAOuvrir
  9. 'Copie les données de l'onglet désiré
  10. Sheets("Historique des saisies" ).Select
  11. Cells.Select
  12. Selection.Copy
  13. 'Colle les données dans le classeur et l'onglet kivonbien
  14. Windows(NomClasseur).Activate
  15. Sheets("Import" ).Cells(1, 1).Select
  16. ActiveSheet.Paste
  17. 'Box de la victoire
  18. MsgBox ("Données copiées !" )
  19. End Sub
 

Bonne journée.


Message édité par milfeuilles le 06-10-2017 à 09:00:21
Reply

Marsh Posté le 09-10-2017 à 17:53:59    

 
            Bonjour,
 
            un bon code n'a pas besoin ni d'activer ni de sélectionner, juste en lisant l'aide VBA interne de  Range.Copy  par exemple …
 
            Une seule ligne de code est nécessaire pour remplacer les six lignes du code précédent (14 à 16 & 19 à 21) !
 

Reply

Marsh Posté le 10-10-2017 à 09:52:31    

Marc L a écrit :

 
            Bonjour,
 
            un bon code n'a pas besoin ni d'activer ni de sélectionner, juste en lisant l'aide VBA interne de  Range.Copy  par exemple …
 
            Une seule ligne de code est nécessaire pour remplacer les six lignes du code précédent (14 à 16 & 19 à 21) !
 


 
 
Du coup que dois-je faire ?
 
j'ai essayé un mix  
 
__________________________________________________________________________________________________________________________
 
Private Sub lecture(fichier As String)
 
'Ouvre le fichier cible
 
Workbooks.Open Filename:=fichier
 
'Copie les données de l'onglet désiré
   
    Workbooks(fichier).Sheets("Historique des saisies" ).Range("A2:R" & Range("A1" ).End(xlDown).Row).Copy destination:=ThisWorkbook.Sheets("Import" ).Range("A1:A" & Range("A1" ).End(xlDown).Row)
     
    MsgBox ("Données copiées !" )
 
End Sub
 
__________________________________________________________________________________________________________________________
 
Mais ce n'est pas très concluant avec "un indice qui ne se trouve pas dans la sélection"
 
J'aimerais qu'avec une liste de fichiers cela me copie les données de chaque fichier a la suite les uns les autres.

Reply

Marsh Posté le 10-10-2017 à 10:14:34    

 
            Copier / Coller n'est pas Coder ‼
 
            Comme indiqué dans l'aide de la méthode Range.Copy, son argument Destination tout comme la source sont des objets Range :
            que renvoie donc la propriété Row ?!
 
 
            Et comme visible dans l'exemple de cette aide, la destination peut aussi être uniquement le coin supérieur gauche :
 
                                                               Source.Copy DestinationCoinSupérieurGauche …
 
            Reste juste à bien définir source et destination.
 
            Voir aussi les propriétés  CurrentRegion  et  UsedRange  …
 

Reply

Marsh Posté le 10-10-2017 à 11:38:48    

Marc L a écrit :

 
            Copier / Coller n'est pas Coder ‼
 
            Comme indiqué dans l'aide de la méthode Range.Copy, son argument Destination tout comme la source sont des objets Range :
            que renvoie donc la propriété Row ?!
 
 
            Et comme visible dans l'exemple de cette aide, la destination peut aussi être uniquement le coin supérieur gauche :
 
                                                               Source.Copy DestinationCoinSupérieurGauche …
 
            Reste juste à bien définir source et destination.
 
            Voir aussi les propriétés  CurrentRegion  et  UsedRange  …
 


 
 
With Workbooks(fichier)
    .Worksheets("Historique des saisies" ).Range("B7:E10" ).Copy ThisWorkbook.Worksheets("Import" ).Range("A1" )
   
        With ThisWorkbook.Worksheets("Import" ).Range("A1" ).CurrentRegion
        .Value = .Value
         
        End With
    End With
 
Je ne sais pas comment lui faire comprendre d'aller chercher dans le fichier dont le nom est passé en paramètre de la méthode

Reply

Marsh Posté le 12-10-2017 à 09:21:28    

 
          Merci de ne pas citer l'intégralité du message juste précédent, aucun intérêt à part nuire à la lisibilité !
 
          Et conformément aux règles de ce forum, merci d'utiliser l'icône dédiée au balisage du code …
 
          Apparemment pour le nom c'est déjà réglé vu la variable associée au fichier, non ?

Message cité 1 fois
Message édité par Marc L le 12-10-2017 à 09:21:43
Reply

Marsh Posté le 12-10-2017 à 09:33:07    

Marc L a écrit :

 
 
          Apparemment pour le nom c'est déjà réglé vu la variable associée au fichier, non ?


 
Oui le nom est déjà récupéré en paramètre de la méthode.
 
c'est un formulaire ou je peux aller chercher plusieurs fichiers de différents types (csv et xlsm pour l'instant) qui forment une liste
 
et sur un autre bouton j'importe les données dans la 2 ème feuille du classeur qui lance la macro.
 
Le csv fonctionne mais quand je passe en xlsm je ne sais pas comment faire de façon simple.
 
Je ne suis pas pro en VBA.
 
PS: si ça t'embête d'aider les gens ne viens pas faire ta moral merci

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed