OVH Cloud OVH Cloud

Aller chercher une plage variable dans plusieurs fichiers...

21 réponses
Avatar
Christophe B.
Bonjour,

J'ai dans une colonne une liste de fichiers du type:
C:\Docs\2001.xls
C:\Docs\2002.xls
C:\Docs\2003.xls etc...

J'aimerais aller chercher les données de la première feuille de chaque sauf
la première ligne et les mettre toutes à la suite les unes des autres dans
mon classeur actif sachant que la plage n'est jamais la même...

Merci!

Christophe.B

10 réponses

1 2 3
Avatar
anonymousA
bonjour,

on suppose que la colonne contenant les noms des fichiers est la colonne A
de la feuille appelée Feuil1 du classeur actif.ar ailleurs, je vais supposer
que tu connais le nombre des fichiers à ouvir, i.e que tu connais le N° de la
dernière ligne de la colonne A contenant un nom de fichier. On pourrait bien
sur automatiser cet aspect de recherche des cellules non vides dans la
colonne A mais sans précisions supplémentaires, j'en reste à la 1ere option.
On va ouvir les fichiers les uns après les autres. On pourrait faire le
transfert classeurs fermés mais je n'y vois pas d'interet majeur (sauf
contre-indications particulières non précisées dans ta question).
enfin je suppose que dans chacun des fichiers qui sera ouvert, les infos
sont contenus dans la feuille appelée Feuil1 et que ces infos doivent être
transférées dans le classeur actif dans la feuille appelée Feuil2

Sub transfert()

Application.DisplayAlerts = False

finfichiers = 4 'N° de ligne contenant le dernier nom du fichier. Attention
il ne faut pas qu'il y ait de ligne vide sinon le programme se plantera

Set wsh = ActiveWorkbook.Sheets("Feuil1")

Set wshdest = ActiveWorkbook.Sheets("Feuil2")

For I = 2 To finfichiers 'je suppose que le 1er fichier est en A2

Workbooks.Open wsh.Cells(I, 1).Value
Set wbk = ActiveWorkbook
Set wshsource = ActiveWorkbook.Sheets("Feuil1")

With wshsource
.UsedRange.Offset(1, 0).Resize(.UsedRange.Rows.Count - 1,
.UsedRange.Columns.Count).Copy
wshdest.Cells(wshdest.Cells.SpecialCells(xlCellTypeLastCell).Row + 1, 1)
End With

wbk.Close

Next

End Sub

Attention, l'utilisation de xlCellTypeLastCell implique que la 1ere
écritture de données dans la feuille de réception démarre à la 1ere cellule
n'ayant jamais recu de données ni de format.
Si on souhaite faire démarrer l'écriture à la 1ere cellule non vide ( de
valeur ou de formules donc ayant eu la possibilité d'avoir reçu une donnée ou
un format mais ayant été écrasé depuis) , il faut utiliser une autre méthode
de détermination de cette cellule par l'une des méthodes suivantes:

'index de la dernière ligne possédant une valeur dans la colonne B p.e de la
feuille destinataire si on est sur que la colonne B recoit toujours des
valeurs
Range("B65536").End(xlUp).Row

ou
si on ne connait pas de colonne absolument renseignée dans la feuille
destinataire
'** l'index de la dernière ligne renseignée :
Lx = Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row

Enfin, je ne connais pas le nombre de lignes à copier dans les fichiers
sources, mais si leur nombre total ou leur nombre total + le N° de la 1ere
ligne sur laquelle va s'inscrire les données ( cf précaution précédente sur
xlCellTypeLastCell ) est supérieurà 65536 ( limitation du Nbre de lignes par
feuille pour Excel), il conviendrait de mettre en place une gestion d'erreurs.

A+


Bonjour,

J'ai dans une colonne une liste de fichiers du type:
C:Docs2001.xls
C:Docs2002.xls
C:Docs2003.xls etc...

J'aimerais aller chercher les données de la première feuille de chaque sauf
la première ligne et les mettre toutes à la suite les unes des autres dans
mon classeur actif sachant que la plage n'est jamais la même...

Merci!

Christophe.B


Avatar
Christophe B.
Et classeur fermé ca donne quoi?

Merci!

"anonymousA" wrote:

bonjour,

on suppose que la colonne contenant les noms des fichiers est la colonne A
de la feuille appelée Feuil1 du classeur actif.ar ailleurs, je vais supposer
que tu connais le nombre des fichiers à ouvir, i.e que tu connais le N° de la
dernière ligne de la colonne A contenant un nom de fichier. On pourrait bien
sur automatiser cet aspect de recherche des cellules non vides dans la
colonne A mais sans précisions supplémentaires, j'en reste à la 1ere option.
On va ouvir les fichiers les uns après les autres. On pourrait faire le
transfert classeurs fermés mais je n'y vois pas d'interet majeur (sauf
contre-indications particulières non précisées dans ta question).
enfin je suppose que dans chacun des fichiers qui sera ouvert, les infos
sont contenus dans la feuille appelée Feuil1 et que ces infos doivent être
transférées dans le classeur actif dans la feuille appelée Feuil2

Sub transfert()

Application.DisplayAlerts = False

finfichiers = 4 'N° de ligne contenant le dernier nom du fichier. Attention
il ne faut pas qu'il y ait de ligne vide sinon le programme se plantera

Set wsh = ActiveWorkbook.Sheets("Feuil1")

Set wshdest = ActiveWorkbook.Sheets("Feuil2")

For I = 2 To finfichiers 'je suppose que le 1er fichier est en A2

Workbooks.Open wsh.Cells(I, 1).Value
Set wbk = ActiveWorkbook
Set wshsource = ActiveWorkbook.Sheets("Feuil1")

With wshsource
.UsedRange.Offset(1, 0).Resize(.UsedRange.Rows.Count - 1,
.UsedRange.Columns.Count).Copy
wshdest.Cells(wshdest.Cells.SpecialCells(xlCellTypeLastCell).Row + 1, 1)
End With

wbk.Close

Next

End Sub

Attention, l'utilisation de xlCellTypeLastCell implique que la 1ere
écritture de données dans la feuille de réception démarre à la 1ere cellule
n'ayant jamais recu de données ni de format.
Si on souhaite faire démarrer l'écriture à la 1ere cellule non vide ( de
valeur ou de formules donc ayant eu la possibilité d'avoir reçu une donnée ou
un format mais ayant été écrasé depuis) , il faut utiliser une autre méthode
de détermination de cette cellule par l'une des méthodes suivantes:

'index de la dernière ligne possédant une valeur dans la colonne B p.e de la
feuille destinataire si on est sur que la colonne B recoit toujours des
valeurs
Range("B65536").End(xlUp).Row

ou
si on ne connait pas de colonne absolument renseignée dans la feuille
destinataire
'** l'index de la dernière ligne renseignée :
Lx = Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row

Enfin, je ne connais pas le nombre de lignes à copier dans les fichiers
sources, mais si leur nombre total ou leur nombre total + le N° de la 1ere
ligne sur laquelle va s'inscrire les données ( cf précaution précédente sur
xlCellTypeLastCell ) est supérieurà 65536 ( limitation du Nbre de lignes par
feuille pour Excel), il conviendrait de mettre en place une gestion d'erreurs.

A+


Bonjour,

J'ai dans une colonne une liste de fichiers du type:
C:Docs2001.xls
C:Docs2002.xls
C:Docs2003.xls etc...

J'aimerais aller chercher les données de la première feuille de chaque sauf
la première ligne et les mettre toutes à la suite les unes des autres dans
mon classeur actif sachant que la plage n'est jamais la même...

Merci!

Christophe.B




Avatar
Christophe B.
Et j'ai un "subscript out of range"...

"anonymousA" wrote:

bonjour,

on suppose que la colonne contenant les noms des fichiers est la colonne A
de la feuille appelée Feuil1 du classeur actif.ar ailleurs, je vais supposer
que tu connais le nombre des fichiers à ouvir, i.e que tu connais le N° de la
dernière ligne de la colonne A contenant un nom de fichier. On pourrait bien
sur automatiser cet aspect de recherche des cellules non vides dans la
colonne A mais sans précisions supplémentaires, j'en reste à la 1ere option.
On va ouvir les fichiers les uns après les autres. On pourrait faire le
transfert classeurs fermés mais je n'y vois pas d'interet majeur (sauf
contre-indications particulières non précisées dans ta question).
enfin je suppose que dans chacun des fichiers qui sera ouvert, les infos
sont contenus dans la feuille appelée Feuil1 et que ces infos doivent être
transférées dans le classeur actif dans la feuille appelée Feuil2

Sub transfert()

Application.DisplayAlerts = False

finfichiers = 4 'N° de ligne contenant le dernier nom du fichier. Attention
il ne faut pas qu'il y ait de ligne vide sinon le programme se plantera

Set wsh = ActiveWorkbook.Sheets("Feuil1")

Set wshdest = ActiveWorkbook.Sheets("Feuil2")

For I = 2 To finfichiers 'je suppose que le 1er fichier est en A2

Workbooks.Open wsh.Cells(I, 1).Value
Set wbk = ActiveWorkbook
Set wshsource = ActiveWorkbook.Sheets("Feuil1")

With wshsource
.UsedRange.Offset(1, 0).Resize(.UsedRange.Rows.Count - 1,
.UsedRange.Columns.Count).Copy
wshdest.Cells(wshdest.Cells.SpecialCells(xlCellTypeLastCell).Row + 1, 1)
End With

wbk.Close

Next

End Sub

Attention, l'utilisation de xlCellTypeLastCell implique que la 1ere
écritture de données dans la feuille de réception démarre à la 1ere cellule
n'ayant jamais recu de données ni de format.
Si on souhaite faire démarrer l'écriture à la 1ere cellule non vide ( de
valeur ou de formules donc ayant eu la possibilité d'avoir reçu une donnée ou
un format mais ayant été écrasé depuis) , il faut utiliser une autre méthode
de détermination de cette cellule par l'une des méthodes suivantes:

'index de la dernière ligne possédant une valeur dans la colonne B p.e de la
feuille destinataire si on est sur que la colonne B recoit toujours des
valeurs
Range("B65536").End(xlUp).Row

ou
si on ne connait pas de colonne absolument renseignée dans la feuille
destinataire
'** l'index de la dernière ligne renseignée :
Lx = Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row

Enfin, je ne connais pas le nombre de lignes à copier dans les fichiers
sources, mais si leur nombre total ou leur nombre total + le N° de la 1ere
ligne sur laquelle va s'inscrire les données ( cf précaution précédente sur
xlCellTypeLastCell ) est supérieurà 65536 ( limitation du Nbre de lignes par
feuille pour Excel), il conviendrait de mettre en place une gestion d'erreurs.

A+


Bonjour,

J'ai dans une colonne une liste de fichiers du type:
C:Docs2001.xls
C:Docs2002.xls
C:Docs2003.xls etc...

J'aimerais aller chercher les données de la première feuille de chaque sauf
la première ligne et les mettre toutes à la suite les unes des autres dans
mon classeur actif sachant que la plage n'est jamais la même...

Merci!

Christophe.B




Avatar
anonymousA
re,

l'idée est d'utiliser une connection par ADO entre des fichiers. Ensuite
cette connexion établie, on tranfère les données par un recordset et si on a
un Excel > Excel 97, on réalise le transfert par Copyfromrecordset, autrement
on fait differemment.
Si tu veux des exemples d'utilisation d'ADO , va sur le site de Frédéric
Sigonneau et cherche ADO. tu en trouveras de nombreux.

A+


Et classeur fermé ca donne quoi?

Merci!

"anonymousA" wrote:

bonjour,

on suppose que la colonne contenant les noms des fichiers est la colonne A
de la feuille appelée Feuil1 du classeur actif.ar ailleurs, je vais supposer
que tu connais le nombre des fichiers à ouvir, i.e que tu connais le N° de la
dernière ligne de la colonne A contenant un nom de fichier. On pourrait bien
sur automatiser cet aspect de recherche des cellules non vides dans la
colonne A mais sans précisions supplémentaires, j'en reste à la 1ere option.
On va ouvir les fichiers les uns après les autres. On pourrait faire le
transfert classeurs fermés mais je n'y vois pas d'interet majeur (sauf
contre-indications particulières non précisées dans ta question).
enfin je suppose que dans chacun des fichiers qui sera ouvert, les infos
sont contenus dans la feuille appelée Feuil1 et que ces infos doivent être
transférées dans le classeur actif dans la feuille appelée Feuil2

Sub transfert()

Application.DisplayAlerts = False

finfichiers = 4 'N° de ligne contenant le dernier nom du fichier. Attention
il ne faut pas qu'il y ait de ligne vide sinon le programme se plantera

Set wsh = ActiveWorkbook.Sheets("Feuil1")

Set wshdest = ActiveWorkbook.Sheets("Feuil2")

For I = 2 To finfichiers 'je suppose que le 1er fichier est en A2

Workbooks.Open wsh.Cells(I, 1).Value
Set wbk = ActiveWorkbook
Set wshsource = ActiveWorkbook.Sheets("Feuil1")

With wshsource
.UsedRange.Offset(1, 0).Resize(.UsedRange.Rows.Count - 1,
.UsedRange.Columns.Count).Copy
wshdest.Cells(wshdest.Cells.SpecialCells(xlCellTypeLastCell).Row + 1, 1)
End With

wbk.Close

Next

End Sub

Attention, l'utilisation de xlCellTypeLastCell implique que la 1ere
écritture de données dans la feuille de réception démarre à la 1ere cellule
n'ayant jamais recu de données ni de format.
Si on souhaite faire démarrer l'écriture à la 1ere cellule non vide ( de
valeur ou de formules donc ayant eu la possibilité d'avoir reçu une donnée ou
un format mais ayant été écrasé depuis) , il faut utiliser une autre méthode
de détermination de cette cellule par l'une des méthodes suivantes:

'index de la dernière ligne possédant une valeur dans la colonne B p.e de la
feuille destinataire si on est sur que la colonne B recoit toujours des
valeurs
Range("B65536").End(xlUp).Row

ou
si on ne connait pas de colonne absolument renseignée dans la feuille
destinataire
'** l'index de la dernière ligne renseignée :
Lx = Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row

Enfin, je ne connais pas le nombre de lignes à copier dans les fichiers
sources, mais si leur nombre total ou leur nombre total + le N° de la 1ere
ligne sur laquelle va s'inscrire les données ( cf précaution précédente sur
xlCellTypeLastCell ) est supérieurà 65536 ( limitation du Nbre de lignes par
feuille pour Excel), il conviendrait de mettre en place une gestion d'erreurs.

A+


Bonjour,

J'ai dans une colonne une liste de fichiers du type:
C:Docs2001.xls
C:Docs2002.xls
C:Docs2003.xls etc...

J'aimerais aller chercher les données de la première feuille de chaque sauf
la première ligne et les mettre toutes à la suite les unes des autres dans
mon classeur actif sachant que la plage n'est jamais la même...

Merci!

Christophe.B






Avatar
anonymousA
oui, mais à quel endroit dans le programme ?


Et j'ai un "subscript out of range"...

"anonymousA" wrote:

bonjour,

on suppose que la colonne contenant les noms des fichiers est la colonne A
de la feuille appelée Feuil1 du classeur actif.ar ailleurs, je vais supposer
que tu connais le nombre des fichiers à ouvir, i.e que tu connais le N° de la
dernière ligne de la colonne A contenant un nom de fichier. On pourrait bien
sur automatiser cet aspect de recherche des cellules non vides dans la
colonne A mais sans précisions supplémentaires, j'en reste à la 1ere option.
On va ouvir les fichiers les uns après les autres. On pourrait faire le
transfert classeurs fermés mais je n'y vois pas d'interet majeur (sauf
contre-indications particulières non précisées dans ta question).
enfin je suppose que dans chacun des fichiers qui sera ouvert, les infos
sont contenus dans la feuille appelée Feuil1 et que ces infos doivent être
transférées dans le classeur actif dans la feuille appelée Feuil2

Sub transfert()

Application.DisplayAlerts = False

finfichiers = 4 'N° de ligne contenant le dernier nom du fichier. Attention
il ne faut pas qu'il y ait de ligne vide sinon le programme se plantera

Set wsh = ActiveWorkbook.Sheets("Feuil1")

Set wshdest = ActiveWorkbook.Sheets("Feuil2")

For I = 2 To finfichiers 'je suppose que le 1er fichier est en A2

Workbooks.Open wsh.Cells(I, 1).Value
Set wbk = ActiveWorkbook
Set wshsource = ActiveWorkbook.Sheets("Feuil1")

With wshsource
.UsedRange.Offset(1, 0).Resize(.UsedRange.Rows.Count - 1,
.UsedRange.Columns.Count).Copy
wshdest.Cells(wshdest.Cells.SpecialCells(xlCellTypeLastCell).Row + 1, 1)
End With

wbk.Close

Next

End Sub

Attention, l'utilisation de xlCellTypeLastCell implique que la 1ere
écritture de données dans la feuille de réception démarre à la 1ere cellule
n'ayant jamais recu de données ni de format.
Si on souhaite faire démarrer l'écriture à la 1ere cellule non vide ( de
valeur ou de formules donc ayant eu la possibilité d'avoir reçu une donnée ou
un format mais ayant été écrasé depuis) , il faut utiliser une autre méthode
de détermination de cette cellule par l'une des méthodes suivantes:

'index de la dernière ligne possédant une valeur dans la colonne B p.e de la
feuille destinataire si on est sur que la colonne B recoit toujours des
valeurs
Range("B65536").End(xlUp).Row

ou
si on ne connait pas de colonne absolument renseignée dans la feuille
destinataire
'** l'index de la dernière ligne renseignée :
Lx = Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row

Enfin, je ne connais pas le nombre de lignes à copier dans les fichiers
sources, mais si leur nombre total ou leur nombre total + le N° de la 1ere
ligne sur laquelle va s'inscrire les données ( cf précaution précédente sur
xlCellTypeLastCell ) est supérieurà 65536 ( limitation du Nbre de lignes par
feuille pour Excel), il conviendrait de mettre en place une gestion d'erreurs.

A+


Bonjour,

J'ai dans une colonne une liste de fichiers du type:
C:Docs2001.xls
C:Docs2002.xls
C:Docs2003.xls etc...

J'aimerais aller chercher les données de la première feuille de chaque sauf
la première ligne et les mettre toutes à la suite les unes des autres dans
mon classeur actif sachant que la plage n'est jamais la même...

Merci!

Christophe.B






Avatar
Christophe B.
Je n'en sais rien... Rien n'est surligné...

"anonymousA" wrote:

oui, mais à quel endroit dans le programme ?


Et j'ai un "subscript out of range"...

"anonymousA" wrote:

bonjour,

on suppose que la colonne contenant les noms des fichiers est la colonne A
de la feuille appelée Feuil1 du classeur actif.ar ailleurs, je vais supposer
que tu connais le nombre des fichiers à ouvir, i.e que tu connais le N° de la
dernière ligne de la colonne A contenant un nom de fichier. On pourrait bien
sur automatiser cet aspect de recherche des cellules non vides dans la
colonne A mais sans précisions supplémentaires, j'en reste à la 1ere option.
On va ouvir les fichiers les uns après les autres. On pourrait faire le
transfert classeurs fermés mais je n'y vois pas d'interet majeur (sauf
contre-indications particulières non précisées dans ta question).
enfin je suppose que dans chacun des fichiers qui sera ouvert, les infos
sont contenus dans la feuille appelée Feuil1 et que ces infos doivent être
transférées dans le classeur actif dans la feuille appelée Feuil2

Sub transfert()

Application.DisplayAlerts = False

finfichiers = 4 'N° de ligne contenant le dernier nom du fichier. Attention
il ne faut pas qu'il y ait de ligne vide sinon le programme se plantera

Set wsh = ActiveWorkbook.Sheets("Feuil1")

Set wshdest = ActiveWorkbook.Sheets("Feuil2")

For I = 2 To finfichiers 'je suppose que le 1er fichier est en A2

Workbooks.Open wsh.Cells(I, 1).Value
Set wbk = ActiveWorkbook
Set wshsource = ActiveWorkbook.Sheets("Feuil1")

With wshsource
.UsedRange.Offset(1, 0).Resize(.UsedRange.Rows.Count - 1,
.UsedRange.Columns.Count).Copy
wshdest.Cells(wshdest.Cells.SpecialCells(xlCellTypeLastCell).Row + 1, 1)
End With

wbk.Close

Next

End Sub

Attention, l'utilisation de xlCellTypeLastCell implique que la 1ere
écritture de données dans la feuille de réception démarre à la 1ere cellule
n'ayant jamais recu de données ni de format.
Si on souhaite faire démarrer l'écriture à la 1ere cellule non vide ( de
valeur ou de formules donc ayant eu la possibilité d'avoir reçu une donnée ou
un format mais ayant été écrasé depuis) , il faut utiliser une autre méthode
de détermination de cette cellule par l'une des méthodes suivantes:

'index de la dernière ligne possédant une valeur dans la colonne B p.e de la
feuille destinataire si on est sur que la colonne B recoit toujours des
valeurs
Range("B65536").End(xlUp).Row

ou
si on ne connait pas de colonne absolument renseignée dans la feuille
destinataire
'** l'index de la dernière ligne renseignée :
Lx = Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row

Enfin, je ne connais pas le nombre de lignes à copier dans les fichiers
sources, mais si leur nombre total ou leur nombre total + le N° de la 1ere
ligne sur laquelle va s'inscrire les données ( cf précaution précédente sur
xlCellTypeLastCell ) est supérieurà 65536 ( limitation du Nbre de lignes par
feuille pour Excel), il conviendrait de mettre en place une gestion d'erreurs.

A+


Bonjour,

J'ai dans une colonne une liste de fichiers du type:
C:Docs2001.xls
C:Docs2002.xls
C:Docs2003.xls etc...

J'aimerais aller chercher les données de la première feuille de chaque sauf
la première ligne et les mettre toutes à la suite les unes des autres dans
mon classeur actif sachant que la plage n'est jamais la même...

Merci!

Christophe.B








Avatar
anonymousA
cette procédure fonctionne parfaitement sur un exemple que je me suis fait
sur mon PC avant de t'envoyer la proc, car il est exceptionnel que j'envoie
quelque chose sans le tester ou sans être sur qu'il l'ait été au moins une
fois.
Maintenant, les conditions d'exercice d'une macro dépendant à la fois du
soft et de la configuration du PC de l'utilisateur et de l'utilisateur
lui-même parfois ?

Si tu ne donnes pas plus d'infos sur le début d'une genèse de l'erreur,il ne
m'est pas possible de t'aider.

Pour déterminer d'où vient le problème, essaye de mettre un point d'arrêt à
chaque instruction et regarde à quel moment ca se plante.




Bonjour,

J'ai dans une colonne une liste de fichiers du type:
C:Docs2001.xls
C:Docs2002.xls
C:Docs2003.xls etc...

J'aimerais aller chercher les données de la première feuille de chaque sauf
la première ligne et les mettre toutes à la suite les unes des autres dans
mon classeur actif sachant que la plage n'est jamais la même...

Merci!

Christophe.B


Avatar
Christophe B.
Ca plante à partir de
Set wshdest = ActiveWorkbook.Sheets("Sheet4")

Encore merci... :)

"anonymousA" wrote:

cette procédure fonctionne parfaitement sur un exemple que je me suis fait
sur mon PC avant de t'envoyer la proc, car il est exceptionnel que j'envoie
quelque chose sans le tester ou sans être sur qu'il l'ait été au moins une
fois.
Maintenant, les conditions d'exercice d'une macro dépendant à la fois du
soft et de la configuration du PC de l'utilisateur et de l'utilisateur
lui-même parfois ?

Si tu ne donnes pas plus d'infos sur le début d'une genèse de l'erreur,il ne
m'est pas possible de t'aider.

Pour déterminer d'où vient le problème, essaye de mettre un point d'arrêt à
chaque instruction et regarde à quel moment ca se plante.




Bonjour,

J'ai dans une colonne une liste de fichiers du type:
C:Docs2001.xls
C:Docs2002.xls
C:Docs2003.xls etc...

J'aimerais aller chercher les données de la première feuille de chaque sauf
la première ligne et les mettre toutes à la suite les unes des autres dans
mon classeur actif sachant que la plage n'est jamais la même...

Merci!

Christophe.B




Avatar
anonymousA
j'ai supposé dans la proc que le classeur qui va réceptionner les données est
le classeur actif . Au démarrage de la procédure, il faut donc que ton
curseur soit positionné sur le classeur en question, en d'autres termes, il
faut donc que le classeur qui est le classeur destinataire soit au premier
plan dans Excel quand tu lances la procédure.
Ce qui me fait dire ca, c'est le fait que ca se plante sur Sheet4 ( tu es en
Excel Anglais, non ?) et que par défaut souvent dans Excel si on n' a pas
touché à cette option dans le Menu Outils/Options, le nombre de feuilles dans
un nouveau classeur est de 3 ( donc va jusqu'à Sheet3).Tout celà mis bout à
bout me fait penser que soit tu n'es pas surle classeur actif, soit ton
classeur actif (donc de réception des données) ne possède pas de feuille qui
s'appelle Sheet4. M'enfin , je peux me tromper.

Si tu veux éviter des désagréments de classeur actif, tu écris si je
reprends les termes de mon 1er envoi:

set wbkdest=workbooks("nomduclasseurderéceptiondesdonnées.xls")
'il faut bien sur que ce classeur soit ouvert


Set wsh = wbkdest.Sheets("Feuil1")

Set wshdest = wbkdest.Sheets("Feuil2")

Attention. Les instructions précédentes n'élimineront pas le problème de
feuilles inexistantes Feuil1 et/ou Feuil2 dans le classeur de réception des
données.


Ca plante à partir de
Set wshdest = ActiveWorkbook.Sheets("Sheet4")

Encore merci... :)

"anonymousA" wrote:

cette procédure fonctionne parfaitement sur un exemple que je me suis fait
sur mon PC avant de t'envoyer la proc, car il est exceptionnel que j'envoie
quelque chose sans le tester ou sans être sur qu'il l'ait été au moins une
fois.
Maintenant, les conditions d'exercice d'une macro dépendant à la fois du
soft et de la configuration du PC de l'utilisateur et de l'utilisateur
lui-même parfois ?

Si tu ne donnes pas plus d'infos sur le début d'une genèse de l'erreur,il ne
m'est pas possible de t'aider.

Pour déterminer d'où vient le problème, essaye de mettre un point d'arrêt à
chaque instruction et regarde à quel moment ca se plante.




Bonjour,

J'ai dans une colonne une liste de fichiers du type:
C:Docs2001.xls
C:Docs2002.xls
C:Docs2003.xls etc...

J'aimerais aller chercher les données de la première feuille de chaque sauf
la première ligne et les mettre toutes à la suite les unes des autres dans
mon classeur actif sachant que la plage n'est jamais la même...

Merci!

Christophe.B






Avatar
Christophe B.
C'est là que je suis aussi perdu... Je n'ai que ce classeur d'ouvert (il est
donc actif) avec une feuille 4... Ca me met cette erreur dès que j'ajoute
toutes les lignes set...

"anonymousA" wrote:

j'ai supposé dans la proc que le classeur qui va réceptionner les données est
le classeur actif . Au démarrage de la procédure, il faut donc que ton
curseur soit positionné sur le classeur en question, en d'autres termes, il
faut donc que le classeur qui est le classeur destinataire soit au premier
plan dans Excel quand tu lances la procédure.
Ce qui me fait dire ca, c'est le fait que ca se plante sur Sheet4 ( tu es en
Excel Anglais, non ?) et que par défaut souvent dans Excel si on n' a pas
touché à cette option dans le Menu Outils/Options, le nombre de feuilles dans
un nouveau classeur est de 3 ( donc va jusqu'à Sheet3).Tout celà mis bout à
bout me fait penser que soit tu n'es pas surle classeur actif, soit ton
classeur actif (donc de réception des données) ne possède pas de feuille qui
s'appelle Sheet4. M'enfin , je peux me tromper.

Si tu veux éviter des désagréments de classeur actif, tu écris si je
reprends les termes de mon 1er envoi:

set wbkdest=workbooks("nomduclasseurderéceptiondesdonnées.xls")
'il faut bien sur que ce classeur soit ouvert


Set wsh = wbkdest.Sheets("Feuil1")

Set wshdest = wbkdest.Sheets("Feuil2")

Attention. Les instructions précédentes n'élimineront pas le problème de
feuilles inexistantes Feuil1 et/ou Feuil2 dans le classeur de réception des
données.


Ca plante à partir de
Set wshdest = ActiveWorkbook.Sheets("Sheet4")

Encore merci... :)

"anonymousA" wrote:

cette procédure fonctionne parfaitement sur un exemple que je me suis fait
sur mon PC avant de t'envoyer la proc, car il est exceptionnel que j'envoie
quelque chose sans le tester ou sans être sur qu'il l'ait été au moins une
fois.
Maintenant, les conditions d'exercice d'une macro dépendant à la fois du
soft et de la configuration du PC de l'utilisateur et de l'utilisateur
lui-même parfois ?

Si tu ne donnes pas plus d'infos sur le début d'une genèse de l'erreur,il ne
m'est pas possible de t'aider.

Pour déterminer d'où vient le problème, essaye de mettre un point d'arrêt à
chaque instruction et regarde à quel moment ca se plante.




Bonjour,

J'ai dans une colonne une liste de fichiers du type:
C:Docs2001.xls
C:Docs2002.xls
C:Docs2003.xls etc...

J'aimerais aller chercher les données de la première feuille de chaque sauf
la première ligne et les mettre toutes à la suite les unes des autres dans
mon classeur actif sachant que la plage n'est jamais la même...

Merci!

Christophe.B








1 2 3