Copie contenu d'une feuille sur une feuille d'un autre classeur - VB/VBA/VBS - Programmation
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é
Marsh Posté le 06-10-2017 à 09:00:00
PreDaToR1675 a écrit : Bon, j'ai modifié un peu Open fichier For Input As #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 :
|
Bonne journée.
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) !
Marsh Posté le 10-10-2017 à 09:52:31
Marc L a écrit : |
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.
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 …
Marsh Posté le 10-10-2017 à 11:38:48
Marc L a écrit : |
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
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 ?
Marsh Posté le 12-10-2017 à 09:33:07
Marc L a écrit : |
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
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
________________________________________________________________________________________________________________