Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1160 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°2306314
PreDaToR16​75
Posté le 04-10-2017 à 13:27:54  profilanswer
 

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
 
________________________________________________________________________________________________________________
 

mood
Publicité
Posté le 04-10-2017 à 13:27:54  profilanswer
 

n°2306315
PreDaToR16​75
Posté le 04-10-2017 à 15:08:02  profilanswer
 

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
n°2306353
milfeuille​s
BF1: superbanane
Posté le 06-10-2017 à 09:00:00  profilanswer
 

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
n°2306472
Marc L
Posté le 09-10-2017 à 17:53:59  profilanswer
 

 
            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) !
 

n°2306488
PreDaToR16​75
Posté le 10-10-2017 à 09:52:31  profilanswer
 

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.

n°2306489
Marc L
Posté le 10-10-2017 à 10:14:34  profilanswer
 

 
            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  …
 

n°2306492
PreDaToR16​75
Posté le 10-10-2017 à 11:38:48  profilanswer
 

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

n°2306588
Marc L
Posté le 12-10-2017 à 09:21:28  profilanswer
 

 
          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
n°2306589
PreDaToR16​75
Posté le 12-10-2017 à 09:33:07  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

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

 

Sujets relatifs
Remplacer le contenu d'une colonne dans ma base de donnée SQLmodifier code pour chercher classeur sur c:
INDEX est obligatoire pour afficher contenu de la table ?Recherche + Copie de ligne
Copie et suppression dossier FTP tout les joursEmpêcher copie de CD
Ecrire un tableau dans une feuille de calculConstructeur de copie Liste chainée C++
Ouvrir une feuille excel depuis une autre et fermer celle d'origine.Macro sur toutes les feuilles d'un classeur
Plus de sujets relatifs à : Copie contenu d'une feuille sur une feuille d'un autre classeur


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR