OVH Cloud OVH Cloud

probleme sur mon import

13 réponses
Avatar
rick
Bonjour,

pour import de mes differents fichier source je connait bien la methode
getopen.

mais le probleme est que sur mes fichiers source j'ai des données de A15 à A25
sur les differents fichiers source.

Dans mon fichier destination, je souhaite les importer les uns à la suite de
l'autre sans écraser par dessus.

Mais je n'y arrive pas?

Je suis desolé, mais j'ai pas bien compris la macro que vous me donner:

Range("A65536").End(xlUp)(2).Select

quand je fait un import d'un de mes fichier source il faut qu'il se mette à
la prochaine ligne vide.

Pourriez vous m'en dire plus.

merci beaucoup

3 réponses

1 2
Avatar
rick
ok je te tiens au courant


Essaie ceci :


Sub CopierDesData()

'Section déclaration des variables
Dim Wk As Workbook, Rg As Range
Dim Repertoire As String
Dim Fichier As String, Ligne As Long

'Répertoire où sont tes fichiers Excel
Repertoire = "c:Atravail"

'Fichier contient le premier fichier qui sera traité.
Fichier = Dir(Repertoire & "*.xls")

'Déterminer où les données seront copiées
'Dans la feuille "Feuil1" du classeur où
'tu copieras cette procédure, En colonne A:A
With ThisWorkbook.Worksheets("Feuil1")
If .Range("A1") = "" Then
Set Rg = .Range("A1")
Else
Set Rg = .Range("A" & .Range("A65536").End(xlUp).Row)
End If
End With

Application.ScreenUpdating = False
'Ceci est une boucle qui traitera à tour de rôle TOUS les
'fichiers Excel du répertoire. Elle copiera la plage A15:A25
'de la feuil1 de chaque classeur ouvert vers la feuil1 de
'ce classeur, les données à la suite des autres ...
Do While Fichier <> ""
'Test pour s'assurer que le fichier est
'différent de celui-ci (récipient du résultat)
If Fichier <> ThisWorkbook.Name Then
'Attribue à la variable Wk, le classeur qui
's'ouvre
Set Wk = Workbooks.Open(Repertoire & Fichier)
'Copie vers Rg, la plage A15:A25 de la feuil1

With Wk.Worksheets("Feuil1")
Ligne = .Range("A65536").End(xlUp).Row
If Ligne < 15 Then Ligne = 15
.Range("A15:Z" & Ligne).Copy Rg
End With

'Détermine la nouvelle Plage où seront copiées
'les données du prochain classeur à ouvrir
Set Rg = Rg(65536 - Rg.Row).End(xlUp).Offset(1)

'Ferme le classeur que tu viens d'ouvrir sans
'rien sauvegarder
Wk.Close False
'attribue à la variable fichier, le nom du prochain
'fichier à ouvrir
Fichier = Dir
End If
Loop

'Libère l'espace mémoire occupé par ces variables.
Set Wk = Nothing: Set Rg = Nothing
End Sub


Salutations!




"rick" a écrit dans le message de news:
michdenis , mes données sont à copié de A15 à Z 400,
sur la macro c'est seulement dans A????

mercid'avance

Bonjour Rick,

Remplace cette ligne de code :

Set Rg = Rg.Offset(10)


PAR :

Set Rg = Rg(65536 - Rg.Row).End(xlUp).Offset(1)


Salutations!



"rick" a écrit dans le message de news:
tu met la ligne:
Set Rg = Rg.Offset(10)

desolé, chose que j'ai oublié de preciser certains fichiers source peuvent
avoir des données de A15 à Z45 ou bien de A15 à Z18, cela varie pour chaque
fichier source.

donc la ligne offset(10) n'est pas bonne.

Comment résoudre ce problème?

merci d'avance


Bonjour Rick,

Voici une procédure qui copiera TOUTES les plages A15:A25 de la "Feuil1" de tous les classeurs contenus dans le répertoire
mentionné
dans la procédure.

Évidemment Toutes tes feuilles sources doivent avoir le même nom "Feuil1"

Ce répertoire doit contenir seulement des fichiers dont tu veux copier leur plage A15:A25 vers ton fichier compilant tes
résultats.

Évidemment, tu dois adapter le nom des objets selon ceux en vigueur dans ton application.

'---------------------------------------------
Sub CopierDesData()

'Section déclaration des variables
Dim Wk As Workbook, Rg As Range
Dim Repertoire As String
Dim Fichier As String

'Répertoire où sont tes fichiers Excel
Repertoire = "c:Atravail" 'à déterminer

'Fichier contient le premier fichier qui sera traité.
Fichier = Dir(Repertoire & "*.xls")

'Déterminer où les données seront copiées
'Dans la feuille "Feuil1" du classeur où
'tu copieras cette procédure, En colonne A:A
With ThisWorkbook.Worksheets("Feuil1")
If .Range("A1") = "" Then
Set Rg = .Range("A1")
Else
Set Rg = .Range("A" & .Range("A65536").End(xlUp).Row)
End If
End With

'Ceci est une boucle qui traitera à tour de rôle TOUS les
'fichiers Excel du répertoire. Elle copiera la plage A15:A25
'de la feuil1 de chaque classeur ouvert vers la feuil1 de
'ce classeur, les données à la suite des autres ...
Do While Fichier <> ""
'Test pour s'assurer que le fichier est
'différent de celui-ci (récipient du résultat)
If Fichier <> ThisWorkbook.Name Then
'Attribue à la variable Wk, le classeur qui
's'ouvre
Set Wk = Workbooks.Open(Repertoire & Fichier)
'Copie vers Rg, la plage A15:A25 de la feuil1
Wk.Worksheets("Feuil1").Range("A15:A25").Copy Rg
'Détermine la nouvelle Plage où seront copiées
'les données du prochain classeur à ouvrir
Set Rg = Rg.Offset(10)
'Ferme le classeur que tu viens d'ouvrir sans
'rien sauvegarder
Wk.Close False
'attribue à la variable fichier, le nom du prochain
'fichier à ouvrir
Fichier = Dir
End If
Loop

'Libère l'espace mémoire occupé par ces variables.
Set Wk = Nothing: Set Rg = Nothing
End Sub
'------------------------------------


Salutations!








"rick" a écrit dans le message de news:
Bonjour,

pour import de mes differents fichier source je connait bien la methode
getopen.

mais le probleme est que sur mes fichiers source j'ai des données de A15 à A25
sur les differents fichiers source.

Dans mon fichier destination, je souhaite les importer les uns à la suite de
l'autre sans écraser par dessus.

Mais je n'y arrive pas?

Je suis desolé, mais j'ai pas bien compris la macro que vous me donner:

Range("A65536").End(xlUp)(2).Select

quand je fait un import d'un de mes fichier source il faut qu'il se mette à
la prochaine ligne vide.

Pourriez vous m'en dire plus.

merci beaucoup















Avatar
rick
c'est ok
merci michdenis


Essaie ceci :


Sub CopierDesData()

'Section déclaration des variables
Dim Wk As Workbook, Rg As Range
Dim Repertoire As String
Dim Fichier As String, Ligne As Long

'Répertoire où sont tes fichiers Excel
Repertoire = "c:Atravail"

'Fichier contient le premier fichier qui sera traité.
Fichier = Dir(Repertoire & "*.xls")

'Déterminer où les données seront copiées
'Dans la feuille "Feuil1" du classeur où
'tu copieras cette procédure, En colonne A:A
With ThisWorkbook.Worksheets("Feuil1")
If .Range("A1") = "" Then
Set Rg = .Range("A1")
Else
Set Rg = .Range("A" & .Range("A65536").End(xlUp).Row)
End If
End With

Application.ScreenUpdating = False
'Ceci est une boucle qui traitera à tour de rôle TOUS les
'fichiers Excel du répertoire. Elle copiera la plage A15:A25
'de la feuil1 de chaque classeur ouvert vers la feuil1 de
'ce classeur, les données à la suite des autres ...
Do While Fichier <> ""
'Test pour s'assurer que le fichier est
'différent de celui-ci (récipient du résultat)
If Fichier <> ThisWorkbook.Name Then
'Attribue à la variable Wk, le classeur qui
's'ouvre
Set Wk = Workbooks.Open(Repertoire & Fichier)
'Copie vers Rg, la plage A15:A25 de la feuil1

With Wk.Worksheets("Feuil1")
Ligne = .Range("A65536").End(xlUp).Row
If Ligne < 15 Then Ligne = 15
.Range("A15:Z" & Ligne).Copy Rg
End With

'Détermine la nouvelle Plage où seront copiées
'les données du prochain classeur à ouvrir
Set Rg = Rg(65536 - Rg.Row).End(xlUp).Offset(1)

'Ferme le classeur que tu viens d'ouvrir sans
'rien sauvegarder
Wk.Close False
'attribue à la variable fichier, le nom du prochain
'fichier à ouvrir
Fichier = Dir
End If
Loop

'Libère l'espace mémoire occupé par ces variables.
Set Wk = Nothing: Set Rg = Nothing
End Sub


Salutations!




"rick" a écrit dans le message de news:
michdenis , mes données sont à copié de A15 à Z 400,
sur la macro c'est seulement dans A????

mercid'avance

Bonjour Rick,

Remplace cette ligne de code :

Set Rg = Rg.Offset(10)


PAR :

Set Rg = Rg(65536 - Rg.Row).End(xlUp).Offset(1)


Salutations!



"rick" a écrit dans le message de news:
tu met la ligne:
Set Rg = Rg.Offset(10)

desolé, chose que j'ai oublié de preciser certains fichiers source peuvent
avoir des données de A15 à Z45 ou bien de A15 à Z18, cela varie pour chaque
fichier source.

donc la ligne offset(10) n'est pas bonne.

Comment résoudre ce problème?

merci d'avance


Bonjour Rick,

Voici une procédure qui copiera TOUTES les plages A15:A25 de la "Feuil1" de tous les classeurs contenus dans le répertoire
mentionné
dans la procédure.

Évidemment Toutes tes feuilles sources doivent avoir le même nom "Feuil1"

Ce répertoire doit contenir seulement des fichiers dont tu veux copier leur plage A15:A25 vers ton fichier compilant tes
résultats.

Évidemment, tu dois adapter le nom des objets selon ceux en vigueur dans ton application.

'---------------------------------------------
Sub CopierDesData()

'Section déclaration des variables
Dim Wk As Workbook, Rg As Range
Dim Repertoire As String
Dim Fichier As String

'Répertoire où sont tes fichiers Excel
Repertoire = "c:Atravail" 'à déterminer

'Fichier contient le premier fichier qui sera traité.
Fichier = Dir(Repertoire & "*.xls")

'Déterminer où les données seront copiées
'Dans la feuille "Feuil1" du classeur où
'tu copieras cette procédure, En colonne A:A
With ThisWorkbook.Worksheets("Feuil1")
If .Range("A1") = "" Then
Set Rg = .Range("A1")
Else
Set Rg = .Range("A" & .Range("A65536").End(xlUp).Row)
End If
End With

'Ceci est une boucle qui traitera à tour de rôle TOUS les
'fichiers Excel du répertoire. Elle copiera la plage A15:A25
'de la feuil1 de chaque classeur ouvert vers la feuil1 de
'ce classeur, les données à la suite des autres ...
Do While Fichier <> ""
'Test pour s'assurer que le fichier est
'différent de celui-ci (récipient du résultat)
If Fichier <> ThisWorkbook.Name Then
'Attribue à la variable Wk, le classeur qui
's'ouvre
Set Wk = Workbooks.Open(Repertoire & Fichier)
'Copie vers Rg, la plage A15:A25 de la feuil1
Wk.Worksheets("Feuil1").Range("A15:A25").Copy Rg
'Détermine la nouvelle Plage où seront copiées
'les données du prochain classeur à ouvrir
Set Rg = Rg.Offset(10)
'Ferme le classeur que tu viens d'ouvrir sans
'rien sauvegarder
Wk.Close False
'attribue à la variable fichier, le nom du prochain
'fichier à ouvrir
Fichier = Dir
End If
Loop

'Libère l'espace mémoire occupé par ces variables.
Set Wk = Nothing: Set Rg = Nothing
End Sub
'------------------------------------


Salutations!








"rick" a écrit dans le message de news:
Bonjour,

pour import de mes differents fichier source je connait bien la methode
getopen.

mais le probleme est que sur mes fichiers source j'ai des données de A15 à A25
sur les differents fichiers source.

Dans mon fichier destination, je souhaite les importer les uns à la suite de
l'autre sans écraser par dessus.

Mais je n'y arrive pas?

Je suis desolé, mais j'ai pas bien compris la macro que vous me donner:

Range("A65536").End(xlUp)(2).Select

quand je fait un import d'un de mes fichier source il faut qu'il se mette à
la prochaine ligne vide.

Pourriez vous m'en dire plus.

merci beaucoup















Avatar
Clément Marcotte
c'est ok


Youppi
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!
--
On apprend pas à un vieux singe à faire des grimaces

1 2