Aller chercher une plage variable dans plusieurs fichiers...
21 réponses
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...
un truc du genre. Je suppose bien sur qu'il s'agit d'effacer les lignes vides de la feuille qui réceptionne les données
With wshdest.UsedRange frow = .Rows(1).Row End With
If frow <> 1 Then Range(Cells(1, 1), Cells(frow - 1, 256)).Delete
With wshdest.UsedRange .AutoFilter .AutoFilter Field:=1, Criteria1:="=" .Offset(1, 0).SpecialCells(xlCellTypeVisible).Delete '.Delete .AutoFilter Field:=1 .AutoFilter End With
A+
CA MARCHE!!!
Maintenant, comment effacer les lignes vides???
Merci beaucoup!
"anonymousA" wrote:
bon,ce que tu décris me parait complètement pas normal
envoies moi tes fichiers à l'adresse s'il sont ne sont pas trop gros et pas confidentiels et je vais essayer de voir comment traiter la question.
N'oublie pas de laisser dans la procédure exactement le texte que tu as frappé.
Je ne peux rien faire de + pour toi pour l'instant
A+
Ca bloque à "set wbk=..." et ca me dit error 1004
application-defined or object-defined error.
"anonymousA" wrote:
bien sur.
Je reste perplexe car si tu n'as qu'un classeur ouvert et qu'il a bien une feuille dénominée Sheet4 comme nom d'onglet, ca doit marcher, car il n'y a rien de compliqué la dedans. Fais un dernier essai ( ca a l'air stupide mais sait-on jamais). 1ere phasei: écris une procédure nouvelle dans laquelle tu n'écris que Sub essai on error resume next set wsh¬tiveworksbook.sheets("Sheet4") if err.number<>0 then msgbox err.number &"/" & err.description end if end sub
si tu obtiens le message d'erreur par msgbox regardes ce qu'il te dit . Dans ce cas, ca veut forcément dire qu'il ne reconnait pas sheet4 comme étant une feuille du classeur actif
si tu n'as pas de message d'erreur et que en réessayant la proc que je t'ai envoyée , il se plante à nouveau sur la même ligne, essaye de changer le nom de ta feuille dans Excel et mets le nouveau nom dans la proc.
A+
Juste un truc: est-ce que tout ce qui est dans la boucle with est en une seule ligne? (je l'ai supposé ainsi)
"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
un truc du genre. Je suppose bien sur qu'il s'agit d'effacer les lignes vides
de la feuille qui réceptionne les données
With wshdest.UsedRange
frow = .Rows(1).Row
End With
If frow <> 1 Then Range(Cells(1, 1), Cells(frow - 1, 256)).Delete
With wshdest.UsedRange
.AutoFilter
.AutoFilter Field:=1, Criteria1:="="
.Offset(1, 0).SpecialCells(xlCellTypeVisible).Delete
'.Delete
.AutoFilter Field:=1
.AutoFilter
End With
A+
CA MARCHE!!!
Maintenant, comment effacer les lignes vides???
Merci beaucoup!
"anonymousA" wrote:
bon,ce que tu décris me parait complètement pas normal
envoies moi tes fichiers à l'adresse AnonymousA@wanadoo.fr s'il sont ne sont
pas trop gros et pas confidentiels et je vais essayer de voir comment traiter
la question.
N'oublie pas de laisser dans la procédure exactement le texte que tu as
frappé.
Je ne peux rien faire de + pour toi pour l'instant
A+
Ca bloque à "set wbk=..."
et ca me dit
error 1004
application-defined or object-defined error.
"anonymousA" wrote:
bien sur.
Je reste perplexe car si tu n'as qu'un classeur ouvert et qu'il a bien une
feuille dénominée Sheet4 comme nom d'onglet, ca doit marcher, car il n'y a
rien de compliqué la dedans.
Fais un dernier essai ( ca a l'air stupide mais sait-on jamais).
1ere phasei: écris une procédure nouvelle dans laquelle tu n'écris que
Sub essai
on error resume next
set wsh¬tiveworksbook.sheets("Sheet4")
if err.number<>0 then
msgbox err.number &"/" & err.description
end if
end sub
si tu obtiens le message d'erreur par msgbox regardes ce qu'il te dit . Dans
ce cas, ca veut forcément dire qu'il ne reconnait pas sheet4 comme étant une
feuille du classeur actif
si tu n'as pas de message d'erreur et que en réessayant la proc que je t'ai
envoyée , il se plante à nouveau sur la même ligne, essaye de changer le nom
de ta feuille dans Excel et mets le nouveau nom dans la proc.
A+
Juste un truc: est-ce que tout ce qui est dans la boucle with est en une
seule ligne? (je l'ai supposé ainsi)
"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...
un truc du genre. Je suppose bien sur qu'il s'agit d'effacer les lignes vides de la feuille qui réceptionne les données
With wshdest.UsedRange frow = .Rows(1).Row End With
If frow <> 1 Then Range(Cells(1, 1), Cells(frow - 1, 256)).Delete
With wshdest.UsedRange .AutoFilter .AutoFilter Field:=1, Criteria1:="=" .Offset(1, 0).SpecialCells(xlCellTypeVisible).Delete '.Delete .AutoFilter Field:=1 .AutoFilter End With
A+
CA MARCHE!!!
Maintenant, comment effacer les lignes vides???
Merci beaucoup!
"anonymousA" wrote:
bon,ce que tu décris me parait complètement pas normal
envoies moi tes fichiers à l'adresse s'il sont ne sont pas trop gros et pas confidentiels et je vais essayer de voir comment traiter la question.
N'oublie pas de laisser dans la procédure exactement le texte que tu as frappé.
Je ne peux rien faire de + pour toi pour l'instant
A+
Ca bloque à "set wbk=..." et ca me dit error 1004
application-defined or object-defined error.
"anonymousA" wrote:
bien sur.
Je reste perplexe car si tu n'as qu'un classeur ouvert et qu'il a bien une feuille dénominée Sheet4 comme nom d'onglet, ca doit marcher, car il n'y a rien de compliqué la dedans. Fais un dernier essai ( ca a l'air stupide mais sait-on jamais). 1ere phasei: écris une procédure nouvelle dans laquelle tu n'écris que Sub essai on error resume next set wsh¬tiveworksbook.sheets("Sheet4") if err.number<>0 then msgbox err.number &"/" & err.description end if end sub
si tu obtiens le message d'erreur par msgbox regardes ce qu'il te dit . Dans ce cas, ca veut forcément dire qu'il ne reconnait pas sheet4 comme étant une feuille du classeur actif
si tu n'as pas de message d'erreur et que en réessayant la proc que je t'ai envoyée , il se plante à nouveau sur la même ligne, essaye de changer le nom de ta feuille dans Excel et mets le nouveau nom dans la proc.
A+
Juste un truc: est-ce que tout ce qui est dans la boucle with est en une seule ligne? (je l'ai supposé ainsi)
"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...