Bonjour a tous,
Dans un classeur(classeur de traitement), j'ai réalisé des fonctions
vba me permettant de generer un autre classeur (classeur cible).Je
dispose également de plusieurs classeurs "source" où se trouvent des
données que je souhaiterai injecter dans le classeur cible.
Sachant que les plages de cellules des classeurs source ont une taille
variable,j'ai écrit une fonction me permettant d'identifier les
cellules a importer (cette fonction me renvoit le nombre de lignes et
de colonnes de la plage de cellule a copier).
Je voudrais,lorsqu'on travaille a partir du classeur de
traitement(ouvert), pouvoir copier des plages de cellules du classeur
source vers le classeur cible alors que ceux ci sont fermés, et ce
grace a une fonction VBA.
Quelqu'un aurait-il-une idée???
PS:J'ai deja essayé en créant deux objets excel application : dans le
premier j'ouvre le classeur source,dans le deuxième le classeur cible
et je n'arrive pas a copier les cellules sources vers les cellules
cibles en utilisant la ligne de code suivante:
xls.Workbooks("Class_source").Worksheet(1).Range(Worksheets(1).Cells(1,
1), Worksheets(1).Cell_(NbLigneSource,NbColSource)).Copy
xls2.Workbook("cible").Worksheet(1).Range(Worksheets(1).Cells(1, 1),
Worksheets(1).Cells(NbLigneCible, NbColonneCible)).PasteSpecial
Mais cela ne donne rien.....
Merci d'avance pour vos réponses eclairées,
Tonic
Bonjour a tous,
Dans un classeur(classeur de traitement), j'ai réalisé des fonctions
vba me permettant de generer un autre classeur (classeur cible).Je
dispose également de plusieurs classeurs "source" où se trouvent des
données que je souhaiterai injecter dans le classeur cible.
Sachant que les plages de cellules des classeurs source ont une taille
variable,j'ai écrit une fonction me permettant d'identifier les
cellules a importer (cette fonction me renvoit le nombre de lignes et
de colonnes de la plage de cellule a copier).
Je voudrais,lorsqu'on travaille a partir du classeur de
traitement(ouvert), pouvoir copier des plages de cellules du classeur
source vers le classeur cible alors que ceux ci sont fermés, et ce
grace a une fonction VBA.
Quelqu'un aurait-il-une idée???
PS:J'ai deja essayé en créant deux objets excel application : dans le
premier j'ouvre le classeur source,dans le deuxième le classeur cible
et je n'arrive pas a copier les cellules sources vers les cellules
cibles en utilisant la ligne de code suivante:
xls.Workbooks("Class_source").Worksheet(1).Range(Worksheets(1).Cells(1,
1), Worksheets(1).Cell_(NbLigneSource,NbColSource)).Copy
xls2.Workbook("cible").Worksheet(1).Range(Worksheets(1).Cells(1, 1),
Worksheets(1).Cells(NbLigneCible, NbColonneCible)).PasteSpecial
Mais cela ne donne rien.....
Merci d'avance pour vos réponses eclairées,
Tonic
Bonjour a tous,
Dans un classeur(classeur de traitement), j'ai réalisé des fonctions
vba me permettant de generer un autre classeur (classeur cible).Je
dispose également de plusieurs classeurs "source" où se trouvent des
données que je souhaiterai injecter dans le classeur cible.
Sachant que les plages de cellules des classeurs source ont une taille
variable,j'ai écrit une fonction me permettant d'identifier les
cellules a importer (cette fonction me renvoit le nombre de lignes et
de colonnes de la plage de cellule a copier).
Je voudrais,lorsqu'on travaille a partir du classeur de
traitement(ouvert), pouvoir copier des plages de cellules du classeur
source vers le classeur cible alors que ceux ci sont fermés, et ce
grace a une fonction VBA.
Quelqu'un aurait-il-une idée???
PS:J'ai deja essayé en créant deux objets excel application : dans le
premier j'ouvre le classeur source,dans le deuxième le classeur cible
et je n'arrive pas a copier les cellules sources vers les cellules
cibles en utilisant la ligne de code suivante:
xls.Workbooks("Class_source").Worksheet(1).Range(Worksheets(1).Cells(1,
1), Worksheets(1).Cell_(NbLigneSource,NbColSource)).Copy
xls2.Workbook("cible").Worksheet(1).Range(Worksheets(1).Cells(1, 1),
Worksheets(1).Cells(NbLigneCible, NbColonneCible)).PasteSpecial
Mais cela ne donne rien.....
Merci d'avance pour vos réponses eclairées,
Tonic
Erreur sur cette ligne<<<<
Set FeuilleSource =
Ta méthode est sans doute utilisable, mais ta syntaxe comporte des imprécisions
(plage non systématiquement qualifiées, typos dans certains appels à la
collection Worksheets). Et les instances d'Excel créées par Ole sont avares de
messages d'erreurs!
En détaillant bien les opérations, tu pourrais tenter cette écriture (non
testée, elle suppose que toutes les variables de ton exemple soit bien
initialisées) :
''''''''''''''''''''''''''''''''''
Sub essai()
Dim FeuilleSource As Excel.Worksheet, FeuilleCible As Excel.Worksheet
Set FeuilleSource = xls.Workbooks("Class_source").Worksheets(1)
Set FeuilleCible = xls2.Workbook("cible").Worksheets(1)
With FeuilleSource
.Range(.Cells(1, 1), .Cells(NbLigneSource, NbColSource)).Copy
End With
With FeuilleCible
.Range(.Cells(1, 1), .Cells(NbLigneSource, NbColSource)).PasteSpecial
End With
End Sub
'''''''''''''''''''''''''''''''''''
Tu gagnerais peut-être aussi en "facilité de manipulation" en nommant les plages
de cellules sources et cibles.
----------
Ange Ounis
----------
Erreur sur cette ligne<<<<
Set FeuilleSource =
Ta méthode est sans doute utilisable, mais ta syntaxe comporte des imprécisions
(plage non systématiquement qualifiées, typos dans certains appels à la
collection Worksheets). Et les instances d'Excel créées par Ole sont avares de
messages d'erreurs!
En détaillant bien les opérations, tu pourrais tenter cette écriture (non
testée, elle suppose que toutes les variables de ton exemple soit bien
initialisées) :
''''''''''''''''''''''''''''''''''
Sub essai()
Dim FeuilleSource As Excel.Worksheet, FeuilleCible As Excel.Worksheet
Set FeuilleSource = xls.Workbooks("Class_source").Worksheets(1)
Set FeuilleCible = xls2.Workbook("cible").Worksheets(1)
With FeuilleSource
.Range(.Cells(1, 1), .Cells(NbLigneSource, NbColSource)).Copy
End With
With FeuilleCible
.Range(.Cells(1, 1), .Cells(NbLigneSource, NbColSource)).PasteSpecial
End With
End Sub
'''''''''''''''''''''''''''''''''''
Tu gagnerais peut-être aussi en "facilité de manipulation" en nommant les plages
de cellules sources et cibles.
----------
Ange Ounis
----------
Erreur sur cette ligne<<<<
Set FeuilleSource =
Ta méthode est sans doute utilisable, mais ta syntaxe comporte des imprécisions
(plage non systématiquement qualifiées, typos dans certains appels à la
collection Worksheets). Et les instances d'Excel créées par Ole sont avares de
messages d'erreurs!
En détaillant bien les opérations, tu pourrais tenter cette écriture (non
testée, elle suppose que toutes les variables de ton exemple soit bien
initialisées) :
''''''''''''''''''''''''''''''''''
Sub essai()
Dim FeuilleSource As Excel.Worksheet, FeuilleCible As Excel.Worksheet
Set FeuilleSource = xls.Workbooks("Class_source").Worksheets(1)
Set FeuilleCible = xls2.Workbook("cible").Worksheets(1)
With FeuilleSource
.Range(.Cells(1, 1), .Cells(NbLigneSource, NbColSource)).Copy
End With
With FeuilleCible
.Range(.Cells(1, 1), .Cells(NbLigneSource, NbColSource)).PasteSpecial
End With
End Sub
'''''''''''''''''''''''''''''''''''
Tu gagnerais peut-être aussi en "facilité de manipulation" en nommant les plages
de cellules sources et cibles.
----------
Ange Ounis
----------
Merci pour ta réponse Ange, j'ai utilisé ton code mais cela ne donne
rien....Je deviens fou a passer autant de temps pour un simple
copier-coller!!!!Voici ce que j'ai utilisé :
Dim xls As Excel.Application
Dim xls2 As Excel.Application
Dim NbLigneSource As Long
Const NbColSource As Integer = 6
Dim FeuilleSource As Excel.Worksheet
Dim FeuilleCible As Excel.Worksheet
NbLigneSource =
(xls.Workbooks.Open("H:ExcelDataBilan_Journalier_01_01_2005.xls").Worksheets("AL_DEF").Range("A65536").End(xlUp).Row) - 10
Workbooks.Open "H:ExcelBilan_Annuel_2005.xls"
Workbooks.Open "H:ExcelDataBilan_Journalier_01_01_2005.xls"Erreur sur cette ligne<<<<
Set FeuilleSource =
Workbooks("Bilan_Journalier_01_01_2005").Workheets("AL_DEF")
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Set FeuilleCible = Workbooks("Bilan_Annuel_2005").Worksheets("DONNEES
BRUTES")
With FeuilleSource
.Range(.Cells(1, 1), .Cells(NbLigneSource, NbColSource)).Copy
End With
With FeuilleCible 'LigneCible=4
.Range(.Cells(1, 1), .Cells(LigneCible, 6)).PasteSpecial
End With
Le compilateur renvoie une erreur "l'indice n'appartient pas a la
selection",je suppose qu'il parle du worksheets et meme en changeant le nom
"AL_DEF" par l'indice de l'index (en l'occurence 5) je n'arrive pas a
obtenir ce que je veux........... Je commence vraiment a deseperer...Pourrais
tu m'aider????
Merci pour tout,
TonicTa méthode est sans doute utilisable, mais ta syntaxe comporte des imprécisions
(plage non systématiquement qualifiées, typos dans certains appels à la
collection Worksheets). Et les instances d'Excel créées par Ole sont avares de
messages d'erreurs!
En détaillant bien les opérations, tu pourrais tenter cette écriture (non
testée, elle suppose que toutes les variables de ton exemple soit bien
initialisées) :
''''''''''''''''''''''''''''''''''
Sub essai()
Dim FeuilleSource As Excel.Worksheet, FeuilleCible As Excel.Worksheet
Set FeuilleSource = xls.Workbooks("Class_source").Worksheets(1)
Set FeuilleCible = xls2.Workbook("cible").Worksheets(1)
With FeuilleSource
.Range(.Cells(1, 1), .Cells(NbLigneSource, NbColSource)).Copy
End With
With FeuilleCible
.Range(.Cells(1, 1), .Cells(NbLigneSource, NbColSource)).PasteSpecial
End With
End Sub
'''''''''''''''''''''''''''''''''''
Tu gagnerais peut-être aussi en "facilité de manipulation" en nommant les plages
de cellules sources et cibles.
----------
Ange Ounis
----------
Merci pour ta réponse Ange, j'ai utilisé ton code mais cela ne donne
rien....Je deviens fou a passer autant de temps pour un simple
copier-coller!!!!Voici ce que j'ai utilisé :
Dim xls As Excel.Application
Dim xls2 As Excel.Application
Dim NbLigneSource As Long
Const NbColSource As Integer = 6
Dim FeuilleSource As Excel.Worksheet
Dim FeuilleCible As Excel.Worksheet
NbLigneSource =
(xls.Workbooks.Open("H:ExcelDataBilan_Journalier_01_01_2005.xls").Worksheets("AL_DEF").Range("A65536").End(xlUp).Row) - 10
Workbooks.Open "H:ExcelBilan_Annuel_2005.xls"
Workbooks.Open "H:ExcelDataBilan_Journalier_01_01_2005.xls"
Erreur sur cette ligne<<<<
Set FeuilleSource =
Workbooks("Bilan_Journalier_01_01_2005").Workheets("AL_DEF")
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Set FeuilleCible = Workbooks("Bilan_Annuel_2005").Worksheets("DONNEES
BRUTES")
With FeuilleSource
.Range(.Cells(1, 1), .Cells(NbLigneSource, NbColSource)).Copy
End With
With FeuilleCible 'LigneCible=4
.Range(.Cells(1, 1), .Cells(LigneCible, 6)).PasteSpecial
End With
Le compilateur renvoie une erreur "l'indice n'appartient pas a la
selection",je suppose qu'il parle du worksheets et meme en changeant le nom
"AL_DEF" par l'indice de l'index (en l'occurence 5) je n'arrive pas a
obtenir ce que je veux........... Je commence vraiment a deseperer...Pourrais
tu m'aider????
Merci pour tout,
Tonic
Ta méthode est sans doute utilisable, mais ta syntaxe comporte des imprécisions
(plage non systématiquement qualifiées, typos dans certains appels à la
collection Worksheets). Et les instances d'Excel créées par Ole sont avares de
messages d'erreurs!
En détaillant bien les opérations, tu pourrais tenter cette écriture (non
testée, elle suppose que toutes les variables de ton exemple soit bien
initialisées) :
''''''''''''''''''''''''''''''''''
Sub essai()
Dim FeuilleSource As Excel.Worksheet, FeuilleCible As Excel.Worksheet
Set FeuilleSource = xls.Workbooks("Class_source").Worksheets(1)
Set FeuilleCible = xls2.Workbook("cible").Worksheets(1)
With FeuilleSource
.Range(.Cells(1, 1), .Cells(NbLigneSource, NbColSource)).Copy
End With
With FeuilleCible
.Range(.Cells(1, 1), .Cells(NbLigneSource, NbColSource)).PasteSpecial
End With
End Sub
'''''''''''''''''''''''''''''''''''
Tu gagnerais peut-être aussi en "facilité de manipulation" en nommant les plages
de cellules sources et cibles.
----------
Ange Ounis
----------
Merci pour ta réponse Ange, j'ai utilisé ton code mais cela ne donne
rien....Je deviens fou a passer autant de temps pour un simple
copier-coller!!!!Voici ce que j'ai utilisé :
Dim xls As Excel.Application
Dim xls2 As Excel.Application
Dim NbLigneSource As Long
Const NbColSource As Integer = 6
Dim FeuilleSource As Excel.Worksheet
Dim FeuilleCible As Excel.Worksheet
NbLigneSource =
(xls.Workbooks.Open("H:ExcelDataBilan_Journalier_01_01_2005.xls").Worksheets("AL_DEF").Range("A65536").End(xlUp).Row) - 10
Workbooks.Open "H:ExcelBilan_Annuel_2005.xls"
Workbooks.Open "H:ExcelDataBilan_Journalier_01_01_2005.xls"Erreur sur cette ligne<<<<
Set FeuilleSource =
Workbooks("Bilan_Journalier_01_01_2005").Workheets("AL_DEF")
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Set FeuilleCible = Workbooks("Bilan_Annuel_2005").Worksheets("DONNEES
BRUTES")
With FeuilleSource
.Range(.Cells(1, 1), .Cells(NbLigneSource, NbColSource)).Copy
End With
With FeuilleCible 'LigneCible=4
.Range(.Cells(1, 1), .Cells(LigneCible, 6)).PasteSpecial
End With
Le compilateur renvoie une erreur "l'indice n'appartient pas a la
selection",je suppose qu'il parle du worksheets et meme en changeant le nom
"AL_DEF" par l'indice de l'index (en l'occurence 5) je n'arrive pas a
obtenir ce que je veux........... Je commence vraiment a deseperer...Pourrais
tu m'aider????
Merci pour tout,
TonicTa méthode est sans doute utilisable, mais ta syntaxe comporte des imprécisions
(plage non systématiquement qualifiées, typos dans certains appels à la
collection Worksheets). Et les instances d'Excel créées par Ole sont avares de
messages d'erreurs!
En détaillant bien les opérations, tu pourrais tenter cette écriture (non
testée, elle suppose que toutes les variables de ton exemple soit bien
initialisées) :
''''''''''''''''''''''''''''''''''
Sub essai()
Dim FeuilleSource As Excel.Worksheet, FeuilleCible As Excel.Worksheet
Set FeuilleSource = xls.Workbooks("Class_source").Worksheets(1)
Set FeuilleCible = xls2.Workbook("cible").Worksheets(1)
With FeuilleSource
.Range(.Cells(1, 1), .Cells(NbLigneSource, NbColSource)).Copy
End With
With FeuilleCible
.Range(.Cells(1, 1), .Cells(NbLigneSource, NbColSource)).PasteSpecial
End With
End Sub
'''''''''''''''''''''''''''''''''''
Tu gagnerais peut-être aussi en "facilité de manipulation" en nommant les plages
de cellules sources et cibles.
----------
Ange Ounis
----------
Je vois que tes instances d'Excel ne sont pas créées, tes classeurs
fermés au départ, et toujours des imprécisions dans la qualification des
objets :
xls.Workbooks.Open(classeur)
ouvre classeur dans l'instance xls d'Excel,
alors que (une ligne plus loin)
Workbooks.Open classeur
ouvre classeur dans l'application Excel courante et classeur n'est alors
pas connu de l'instance xls ni de xls2...
Essaye avec ces modifs :
'''''''''''''''''''''''''''''''''
Sub essai2()
Dim xls As New Excel.Application, xls2 As New Excel.Application
Dim FeuilleSource As Excel.Worksheet, FeuilleCible As Excel.Worksheet
Dim NbLigneSource As Long
Const NbColSource As Integer = 6
Dim NomSource As String, NomCible As String
NomSource = "H:ExcelDataBilan_Journalier_01_01_2005.xls"
NomCible = "H:ExcelBilan_Annuel_2005.xls"
Set FeuilleSource = xls.Workbooks.Open(NomSource).Worksheets("AL_DEF")
Set FeuilleCible = xls2.Workbook(NomCible).Worksheets(1)
NbLigneSource = FeuilleSource.Range("A65536").End(xlUp).Row - 10
With FeuilleSource
.Range(.Cells(1, 1), .Cells(NbLigneSource, NbColSource)).Copy
End With
With FeuilleCible
.Range(.Cells(1, 1), .Cells(NbLigneSource, NbColSource)).PasteSpecial
End With
End Sub
'''''''''''''''''''''''''''''''''
----------
Ange Ounis
----------Merci pour ta réponse Ange, j'ai utilisé ton code mais cela ne donne
rien....Je deviens fou a passer autant de temps pour un simple
copier-coller!!!!Voici ce que j'ai utilisé :
Dim xls As Excel.Application
Dim xls2 As Excel.Application
Dim NbLigneSource As Long
Const NbColSource As Integer = 6
Dim FeuilleSource As Excel.Worksheet
Dim FeuilleCible As Excel.Worksheet
NbLigneSource =
(xls.Workbooks.Open("H:ExcelDataBilan_Journalier_01_01_2005.xls").Worksheets("AL_DEF").Range("A65536").End(xlUp).Row)
- 10
Workbooks.Open "H:ExcelBilan_Annuel_2005.xls"
Workbooks.Open "H:ExcelDataBilan_Journalier_01_01_2005.xls"Erreur sur cette ligne<<<<
Set FeuilleSource =
Workbooks("Bilan_Journalier_01_01_2005").Workheets("AL_DEF")
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Set FeuilleCible =
Workbooks("Bilan_Annuel_2005").Worksheets("DONNEES BRUTES")
With FeuilleSource
.Range(.Cells(1, 1), .Cells(NbLigneSource, NbColSource)).Copy
End With
With FeuilleCible 'LigneCible=4
.Range(.Cells(1, 1), .Cells(LigneCible, 6)).PasteSpecial
End With
Le compilateur renvoie une erreur "l'indice n'appartient pas a la
selection",je suppose qu'il parle du worksheets et meme en changeant
le nom "AL_DEF" par l'indice de l'index (en l'occurence 5) je n'arrive
pas a obtenir ce que je veux........... Je commence vraiment a
deseperer...Pourrais tu m'aider????
Merci pour tout,
TonicTa méthode est sans doute utilisable, mais ta syntaxe comporte des
imprécisions (plage non systématiquement qualifiées, typos dans
certains appels à la collection Worksheets). Et les instances d'Excel
créées par Ole sont avares de messages d'erreurs!
En détaillant bien les opérations, tu pourrais tenter cette écriture
(non testée, elle suppose que toutes les variables de ton exemple
soit bien initialisées) :
''''''''''''''''''''''''''''''''''
Sub essai()
Dim FeuilleSource As Excel.Worksheet, FeuilleCible As Excel.Worksheet
Set FeuilleSource = xls.Workbooks("Class_source").Worksheets(1)
Set FeuilleCible = xls2.Workbook("cible").Worksheets(1)
With FeuilleSource
.Range(.Cells(1, 1), .Cells(NbLigneSource, NbColSource)).Copy
End With
With FeuilleCible
.Range(.Cells(1, 1), .Cells(NbLigneSource,
NbColSource)).PasteSpecial
End With
End Sub
'''''''''''''''''''''''''''''''''''
Tu gagnerais peut-être aussi en "facilité de manipulation" en nommant
les plages de cellules sources et cibles.
----------
Ange Ounis
----------
Je vois que tes instances d'Excel ne sont pas créées, tes classeurs
fermés au départ, et toujours des imprécisions dans la qualification des
objets :
xls.Workbooks.Open(classeur)
ouvre classeur dans l'instance xls d'Excel,
alors que (une ligne plus loin)
Workbooks.Open classeur
ouvre classeur dans l'application Excel courante et classeur n'est alors
pas connu de l'instance xls ni de xls2...
Essaye avec ces modifs :
'''''''''''''''''''''''''''''''''
Sub essai2()
Dim xls As New Excel.Application, xls2 As New Excel.Application
Dim FeuilleSource As Excel.Worksheet, FeuilleCible As Excel.Worksheet
Dim NbLigneSource As Long
Const NbColSource As Integer = 6
Dim NomSource As String, NomCible As String
NomSource = "H:ExcelDataBilan_Journalier_01_01_2005.xls"
NomCible = "H:ExcelBilan_Annuel_2005.xls"
Set FeuilleSource = xls.Workbooks.Open(NomSource).Worksheets("AL_DEF")
Set FeuilleCible = xls2.Workbook(NomCible).Worksheets(1)
NbLigneSource = FeuilleSource.Range("A65536").End(xlUp).Row - 10
With FeuilleSource
.Range(.Cells(1, 1), .Cells(NbLigneSource, NbColSource)).Copy
End With
With FeuilleCible
.Range(.Cells(1, 1), .Cells(NbLigneSource, NbColSource)).PasteSpecial
End With
End Sub
'''''''''''''''''''''''''''''''''
----------
Ange Ounis
----------
Merci pour ta réponse Ange, j'ai utilisé ton code mais cela ne donne
rien....Je deviens fou a passer autant de temps pour un simple
copier-coller!!!!Voici ce que j'ai utilisé :
Dim xls As Excel.Application
Dim xls2 As Excel.Application
Dim NbLigneSource As Long
Const NbColSource As Integer = 6
Dim FeuilleSource As Excel.Worksheet
Dim FeuilleCible As Excel.Worksheet
NbLigneSource =
(xls.Workbooks.Open("H:ExcelDataBilan_Journalier_01_01_2005.xls").Worksheets("AL_DEF").Range("A65536").End(xlUp).Row)
- 10
Workbooks.Open "H:ExcelBilan_Annuel_2005.xls"
Workbooks.Open "H:ExcelDataBilan_Journalier_01_01_2005.xls"
Erreur sur cette ligne<<<<
Set FeuilleSource =
Workbooks("Bilan_Journalier_01_01_2005").Workheets("AL_DEF")
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Set FeuilleCible =
Workbooks("Bilan_Annuel_2005").Worksheets("DONNEES BRUTES")
With FeuilleSource
.Range(.Cells(1, 1), .Cells(NbLigneSource, NbColSource)).Copy
End With
With FeuilleCible 'LigneCible=4
.Range(.Cells(1, 1), .Cells(LigneCible, 6)).PasteSpecial
End With
Le compilateur renvoie une erreur "l'indice n'appartient pas a la
selection",je suppose qu'il parle du worksheets et meme en changeant
le nom "AL_DEF" par l'indice de l'index (en l'occurence 5) je n'arrive
pas a obtenir ce que je veux........... Je commence vraiment a
deseperer...Pourrais tu m'aider????
Merci pour tout,
Tonic
Ta méthode est sans doute utilisable, mais ta syntaxe comporte des
imprécisions (plage non systématiquement qualifiées, typos dans
certains appels à la collection Worksheets). Et les instances d'Excel
créées par Ole sont avares de messages d'erreurs!
En détaillant bien les opérations, tu pourrais tenter cette écriture
(non testée, elle suppose que toutes les variables de ton exemple
soit bien initialisées) :
''''''''''''''''''''''''''''''''''
Sub essai()
Dim FeuilleSource As Excel.Worksheet, FeuilleCible As Excel.Worksheet
Set FeuilleSource = xls.Workbooks("Class_source").Worksheets(1)
Set FeuilleCible = xls2.Workbook("cible").Worksheets(1)
With FeuilleSource
.Range(.Cells(1, 1), .Cells(NbLigneSource, NbColSource)).Copy
End With
With FeuilleCible
.Range(.Cells(1, 1), .Cells(NbLigneSource,
NbColSource)).PasteSpecial
End With
End Sub
'''''''''''''''''''''''''''''''''''
Tu gagnerais peut-être aussi en "facilité de manipulation" en nommant
les plages de cellules sources et cibles.
----------
Ange Ounis
----------
Je vois que tes instances d'Excel ne sont pas créées, tes classeurs
fermés au départ, et toujours des imprécisions dans la qualification des
objets :
xls.Workbooks.Open(classeur)
ouvre classeur dans l'instance xls d'Excel,
alors que (une ligne plus loin)
Workbooks.Open classeur
ouvre classeur dans l'application Excel courante et classeur n'est alors
pas connu de l'instance xls ni de xls2...
Essaye avec ces modifs :
'''''''''''''''''''''''''''''''''
Sub essai2()
Dim xls As New Excel.Application, xls2 As New Excel.Application
Dim FeuilleSource As Excel.Worksheet, FeuilleCible As Excel.Worksheet
Dim NbLigneSource As Long
Const NbColSource As Integer = 6
Dim NomSource As String, NomCible As String
NomSource = "H:ExcelDataBilan_Journalier_01_01_2005.xls"
NomCible = "H:ExcelBilan_Annuel_2005.xls"
Set FeuilleSource = xls.Workbooks.Open(NomSource).Worksheets("AL_DEF")
Set FeuilleCible = xls2.Workbook(NomCible).Worksheets(1)
NbLigneSource = FeuilleSource.Range("A65536").End(xlUp).Row - 10
With FeuilleSource
.Range(.Cells(1, 1), .Cells(NbLigneSource, NbColSource)).Copy
End With
With FeuilleCible
.Range(.Cells(1, 1), .Cells(NbLigneSource, NbColSource)).PasteSpecial
End With
End Sub
'''''''''''''''''''''''''''''''''
----------
Ange Ounis
----------Merci pour ta réponse Ange, j'ai utilisé ton code mais cela ne donne
rien....Je deviens fou a passer autant de temps pour un simple
copier-coller!!!!Voici ce que j'ai utilisé :
Dim xls As Excel.Application
Dim xls2 As Excel.Application
Dim NbLigneSource As Long
Const NbColSource As Integer = 6
Dim FeuilleSource As Excel.Worksheet
Dim FeuilleCible As Excel.Worksheet
NbLigneSource =
(xls.Workbooks.Open("H:ExcelDataBilan_Journalier_01_01_2005.xls").Worksheets("AL_DEF").Range("A65536").End(xlUp).Row)
- 10
Workbooks.Open "H:ExcelBilan_Annuel_2005.xls"
Workbooks.Open "H:ExcelDataBilan_Journalier_01_01_2005.xls"Erreur sur cette ligne<<<<
Set FeuilleSource =
Workbooks("Bilan_Journalier_01_01_2005").Workheets("AL_DEF")
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Set FeuilleCible =
Workbooks("Bilan_Annuel_2005").Worksheets("DONNEES BRUTES")
With FeuilleSource
.Range(.Cells(1, 1), .Cells(NbLigneSource, NbColSource)).Copy
End With
With FeuilleCible 'LigneCible=4
.Range(.Cells(1, 1), .Cells(LigneCible, 6)).PasteSpecial
End With
Le compilateur renvoie une erreur "l'indice n'appartient pas a la
selection",je suppose qu'il parle du worksheets et meme en changeant
le nom "AL_DEF" par l'indice de l'index (en l'occurence 5) je n'arrive
pas a obtenir ce que je veux........... Je commence vraiment a
deseperer...Pourrais tu m'aider????
Merci pour tout,
TonicTa méthode est sans doute utilisable, mais ta syntaxe comporte des
imprécisions (plage non systématiquement qualifiées, typos dans
certains appels à la collection Worksheets). Et les instances d'Excel
créées par Ole sont avares de messages d'erreurs!
En détaillant bien les opérations, tu pourrais tenter cette écriture
(non testée, elle suppose que toutes les variables de ton exemple
soit bien initialisées) :
''''''''''''''''''''''''''''''''''
Sub essai()
Dim FeuilleSource As Excel.Worksheet, FeuilleCible As Excel.Worksheet
Set FeuilleSource = xls.Workbooks("Class_source").Worksheets(1)
Set FeuilleCible = xls2.Workbook("cible").Worksheets(1)
With FeuilleSource
.Range(.Cells(1, 1), .Cells(NbLigneSource, NbColSource)).Copy
End With
With FeuilleCible
.Range(.Cells(1, 1), .Cells(NbLigneSource,
NbColSource)).PasteSpecial
End With
End Sub
'''''''''''''''''''''''''''''''''''
Tu gagnerais peut-être aussi en "facilité de manipulation" en nommant
les plages de cellules sources et cibles.
----------
Ange Ounis
----------
Je m'aperçois que j'ai oublié de modifier l'affectation de la feuille cible. Il
faut remplacer :
Set FeuilleCible = xls2.Workbooks(NomCible).Worksheets(1)
par :
Set FeuilleCible = xls2.Workbooks.Open(NomCible).Worksheets("DONNEES BRUTES")
Désolé.
----------
Ange Ounis
----------Je vois que tes instances d'Excel ne sont pas créées, tes classeurs
fermés au départ, et toujours des imprécisions dans la qualification des
objets :
xls.Workbooks.Open(classeur)
ouvre classeur dans l'instance xls d'Excel,
alors que (une ligne plus loin)
Workbooks.Open classeur
ouvre classeur dans l'application Excel courante et classeur n'est alors
pas connu de l'instance xls ni de xls2...
Essaye avec ces modifs :
'''''''''''''''''''''''''''''''''
Sub essai2()
Dim xls As New Excel.Application, xls2 As New Excel.Application
Dim FeuilleSource As Excel.Worksheet, FeuilleCible As Excel.Worksheet
Dim NbLigneSource As Long
Const NbColSource As Integer = 6
Dim NomSource As String, NomCible As String
NomSource = "H:ExcelDataBilan_Journalier_01_01_2005.xls"
NomCible = "H:ExcelBilan_Annuel_2005.xls"
Set FeuilleSource = xls.Workbooks.Open(NomSource).Worksheets("AL_DEF")
Set FeuilleCible = xls2.Workbook(NomCible).Worksheets(1)
NbLigneSource = FeuilleSource.Range("A65536").End(xlUp).Row - 10
With FeuilleSource
.Range(.Cells(1, 1), .Cells(NbLigneSource, NbColSource)).Copy
End With
With FeuilleCible
.Range(.Cells(1, 1), .Cells(NbLigneSource, NbColSource)).PasteSpecial
End With
End Sub
'''''''''''''''''''''''''''''''''
----------
Ange Ounis
----------Merci pour ta réponse Ange, j'ai utilisé ton code mais cela ne donne
rien....Je deviens fou a passer autant de temps pour un simple
copier-coller!!!!Voici ce que j'ai utilisé :
Dim xls As Excel.Application
Dim xls2 As Excel.Application
Dim NbLigneSource As Long
Const NbColSource As Integer = 6
Dim FeuilleSource As Excel.Worksheet
Dim FeuilleCible As Excel.Worksheet
NbLigneSource =
(xls.Workbooks.Open("H:ExcelDataBilan_Journalier_01_01_2005.xls").Worksheets("AL_DEF").Range("A65536").End(xlUp).Row)
- 10
Workbooks.Open "H:ExcelBilan_Annuel_2005.xls"
Workbooks.Open "H:ExcelDataBilan_Journalier_01_01_2005.xls"Erreur sur cette ligne<<<<
Set FeuilleSource =
Workbooks("Bilan_Journalier_01_01_2005").Workheets("AL_DEF")
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Set FeuilleCible =
Workbooks("Bilan_Annuel_2005").Worksheets("DONNEES BRUTES")
With FeuilleSource
.Range(.Cells(1, 1), .Cells(NbLigneSource, NbColSource)).Copy
End With
With FeuilleCible 'LigneCible=4
.Range(.Cells(1, 1), .Cells(LigneCible, 6)).PasteSpecial
End With
Le compilateur renvoie une erreur "l'indice n'appartient pas a la
selection",je suppose qu'il parle du worksheets et meme en changeant
le nom "AL_DEF" par l'indice de l'index (en l'occurence 5) je n'arrive
pas a obtenir ce que je veux........... Je commence vraiment a
deseperer...Pourrais tu m'aider????
Merci pour tout,
TonicTa méthode est sans doute utilisable, mais ta syntaxe comporte des
imprécisions (plage non systématiquement qualifiées, typos dans
certains appels à la collection Worksheets). Et les instances d'Excel
créées par Ole sont avares de messages d'erreurs!
En détaillant bien les opérations, tu pourrais tenter cette écriture
(non testée, elle suppose que toutes les variables de ton exemple
soit bien initialisées) :
''''''''''''''''''''''''''''''''''
Sub essai()
Dim FeuilleSource As Excel.Worksheet, FeuilleCible As Excel.Worksheet
Set FeuilleSource = xls.Workbooks("Class_source").Worksheets(1)
Set FeuilleCible = xls2.Workbook("cible").Worksheets(1)
With FeuilleSource
.Range(.Cells(1, 1), .Cells(NbLigneSource, NbColSource)).Copy
End With
With FeuilleCible
.Range(.Cells(1, 1), .Cells(NbLigneSource,
NbColSource)).PasteSpecial
End With
End Sub
'''''''''''''''''''''''''''''''''''
Tu gagnerais peut-être aussi en "facilité de manipulation" en nommant
les plages de cellules sources et cibles.
----------
Ange Ounis
----------
Je m'aperçois que j'ai oublié de modifier l'affectation de la feuille cible. Il
faut remplacer :
Set FeuilleCible = xls2.Workbooks(NomCible).Worksheets(1)
par :
Set FeuilleCible = xls2.Workbooks.Open(NomCible).Worksheets("DONNEES BRUTES")
Désolé.
----------
Ange Ounis
----------
Je vois que tes instances d'Excel ne sont pas créées, tes classeurs
fermés au départ, et toujours des imprécisions dans la qualification des
objets :
xls.Workbooks.Open(classeur)
ouvre classeur dans l'instance xls d'Excel,
alors que (une ligne plus loin)
Workbooks.Open classeur
ouvre classeur dans l'application Excel courante et classeur n'est alors
pas connu de l'instance xls ni de xls2...
Essaye avec ces modifs :
'''''''''''''''''''''''''''''''''
Sub essai2()
Dim xls As New Excel.Application, xls2 As New Excel.Application
Dim FeuilleSource As Excel.Worksheet, FeuilleCible As Excel.Worksheet
Dim NbLigneSource As Long
Const NbColSource As Integer = 6
Dim NomSource As String, NomCible As String
NomSource = "H:ExcelDataBilan_Journalier_01_01_2005.xls"
NomCible = "H:ExcelBilan_Annuel_2005.xls"
Set FeuilleSource = xls.Workbooks.Open(NomSource).Worksheets("AL_DEF")
Set FeuilleCible = xls2.Workbook(NomCible).Worksheets(1)
NbLigneSource = FeuilleSource.Range("A65536").End(xlUp).Row - 10
With FeuilleSource
.Range(.Cells(1, 1), .Cells(NbLigneSource, NbColSource)).Copy
End With
With FeuilleCible
.Range(.Cells(1, 1), .Cells(NbLigneSource, NbColSource)).PasteSpecial
End With
End Sub
'''''''''''''''''''''''''''''''''
----------
Ange Ounis
----------
Merci pour ta réponse Ange, j'ai utilisé ton code mais cela ne donne
rien....Je deviens fou a passer autant de temps pour un simple
copier-coller!!!!Voici ce que j'ai utilisé :
Dim xls As Excel.Application
Dim xls2 As Excel.Application
Dim NbLigneSource As Long
Const NbColSource As Integer = 6
Dim FeuilleSource As Excel.Worksheet
Dim FeuilleCible As Excel.Worksheet
NbLigneSource =
(xls.Workbooks.Open("H:ExcelDataBilan_Journalier_01_01_2005.xls").Worksheets("AL_DEF").Range("A65536").End(xlUp).Row)
- 10
Workbooks.Open "H:ExcelBilan_Annuel_2005.xls"
Workbooks.Open "H:ExcelDataBilan_Journalier_01_01_2005.xls"
Erreur sur cette ligne<<<<
Set FeuilleSource =
Workbooks("Bilan_Journalier_01_01_2005").Workheets("AL_DEF")
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Set FeuilleCible =
Workbooks("Bilan_Annuel_2005").Worksheets("DONNEES BRUTES")
With FeuilleSource
.Range(.Cells(1, 1), .Cells(NbLigneSource, NbColSource)).Copy
End With
With FeuilleCible 'LigneCible=4
.Range(.Cells(1, 1), .Cells(LigneCible, 6)).PasteSpecial
End With
Le compilateur renvoie une erreur "l'indice n'appartient pas a la
selection",je suppose qu'il parle du worksheets et meme en changeant
le nom "AL_DEF" par l'indice de l'index (en l'occurence 5) je n'arrive
pas a obtenir ce que je veux........... Je commence vraiment a
deseperer...Pourrais tu m'aider????
Merci pour tout,
Tonic
Ta méthode est sans doute utilisable, mais ta syntaxe comporte des
imprécisions (plage non systématiquement qualifiées, typos dans
certains appels à la collection Worksheets). Et les instances d'Excel
créées par Ole sont avares de messages d'erreurs!
En détaillant bien les opérations, tu pourrais tenter cette écriture
(non testée, elle suppose que toutes les variables de ton exemple
soit bien initialisées) :
''''''''''''''''''''''''''''''''''
Sub essai()
Dim FeuilleSource As Excel.Worksheet, FeuilleCible As Excel.Worksheet
Set FeuilleSource = xls.Workbooks("Class_source").Worksheets(1)
Set FeuilleCible = xls2.Workbook("cible").Worksheets(1)
With FeuilleSource
.Range(.Cells(1, 1), .Cells(NbLigneSource, NbColSource)).Copy
End With
With FeuilleCible
.Range(.Cells(1, 1), .Cells(NbLigneSource,
NbColSource)).PasteSpecial
End With
End Sub
'''''''''''''''''''''''''''''''''''
Tu gagnerais peut-être aussi en "facilité de manipulation" en nommant
les plages de cellules sources et cibles.
----------
Ange Ounis
----------
Je m'aperçois que j'ai oublié de modifier l'affectation de la feuille cible. Il
faut remplacer :
Set FeuilleCible = xls2.Workbooks(NomCible).Worksheets(1)
par :
Set FeuilleCible = xls2.Workbooks.Open(NomCible).Worksheets("DONNEES BRUTES")
Désolé.
----------
Ange Ounis
----------Je vois que tes instances d'Excel ne sont pas créées, tes classeurs
fermés au départ, et toujours des imprécisions dans la qualification des
objets :
xls.Workbooks.Open(classeur)
ouvre classeur dans l'instance xls d'Excel,
alors que (une ligne plus loin)
Workbooks.Open classeur
ouvre classeur dans l'application Excel courante et classeur n'est alors
pas connu de l'instance xls ni de xls2...
Essaye avec ces modifs :
'''''''''''''''''''''''''''''''''
Sub essai2()
Dim xls As New Excel.Application, xls2 As New Excel.Application
Dim FeuilleSource As Excel.Worksheet, FeuilleCible As Excel.Worksheet
Dim NbLigneSource As Long
Const NbColSource As Integer = 6
Dim NomSource As String, NomCible As String
NomSource = "H:ExcelDataBilan_Journalier_01_01_2005.xls"
NomCible = "H:ExcelBilan_Annuel_2005.xls"
Set FeuilleSource = xls.Workbooks.Open(NomSource).Worksheets("AL_DEF")
Set FeuilleCible = xls2.Workbook(NomCible).Worksheets(1)
NbLigneSource = FeuilleSource.Range("A65536").End(xlUp).Row - 10
With FeuilleSource
.Range(.Cells(1, 1), .Cells(NbLigneSource, NbColSource)).Copy
End With
With FeuilleCible
.Range(.Cells(1, 1), .Cells(NbLigneSource, NbColSource)).PasteSpecial
End With
End Sub
'''''''''''''''''''''''''''''''''
----------
Ange Ounis
----------Merci pour ta réponse Ange, j'ai utilisé ton code mais cela ne donne
rien....Je deviens fou a passer autant de temps pour un simple
copier-coller!!!!Voici ce que j'ai utilisé :
Dim xls As Excel.Application
Dim xls2 As Excel.Application
Dim NbLigneSource As Long
Const NbColSource As Integer = 6
Dim FeuilleSource As Excel.Worksheet
Dim FeuilleCible As Excel.Worksheet
NbLigneSource =
(xls.Workbooks.Open("H:ExcelDataBilan_Journalier_01_01_2005.xls").Worksheets("AL_DEF").Range("A65536").End(xlUp).Row)
- 10
Workbooks.Open "H:ExcelBilan_Annuel_2005.xls"
Workbooks.Open "H:ExcelDataBilan_Journalier_01_01_2005.xls"Erreur sur cette ligne<<<<
Set FeuilleSource =
Workbooks("Bilan_Journalier_01_01_2005").Workheets("AL_DEF")
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Set FeuilleCible =
Workbooks("Bilan_Annuel_2005").Worksheets("DONNEES BRUTES")
With FeuilleSource
.Range(.Cells(1, 1), .Cells(NbLigneSource, NbColSource)).Copy
End With
With FeuilleCible 'LigneCible=4
.Range(.Cells(1, 1), .Cells(LigneCible, 6)).PasteSpecial
End With
Le compilateur renvoie une erreur "l'indice n'appartient pas a la
selection",je suppose qu'il parle du worksheets et meme en changeant
le nom "AL_DEF" par l'indice de l'index (en l'occurence 5) je n'arrive
pas a obtenir ce que je veux........... Je commence vraiment a
deseperer...Pourrais tu m'aider????
Merci pour tout,
TonicTa méthode est sans doute utilisable, mais ta syntaxe comporte des
imprécisions (plage non systématiquement qualifiées, typos dans
certains appels à la collection Worksheets). Et les instances d'Excel
créées par Ole sont avares de messages d'erreurs!
En détaillant bien les opérations, tu pourrais tenter cette écriture
(non testée, elle suppose que toutes les variables de ton exemple
soit bien initialisées) :
''''''''''''''''''''''''''''''''''
Sub essai()
Dim FeuilleSource As Excel.Worksheet, FeuilleCible As Excel.Worksheet
Set FeuilleSource = xls.Workbooks("Class_source").Worksheets(1)
Set FeuilleCible = xls2.Workbook("cible").Worksheets(1)
With FeuilleSource
.Range(.Cells(1, 1), .Cells(NbLigneSource, NbColSource)).Copy
End With
With FeuilleCible
.Range(.Cells(1, 1), .Cells(NbLigneSource,
NbColSource)).PasteSpecial
End With
End Sub
'''''''''''''''''''''''''''''''''''
Tu gagnerais peut-être aussi en "facilité de manipulation" en nommant
les plages de cellules sources et cibles.
----------
Ange Ounis
----------