Pb d\'erreur 1004

guenfood

XLDnaute Occasionnel
Pb d'erreur 1004

Bonjour,

J'ai un fichier 'Pointage' dans lequel j'importe des données de 2 autres fichiers excel via une macro.
Ces données doivent être ajoutées les unes après les autres.

Donc pour la macro concernant le premier fichier, pas de problème, cela incrémente bien mon fiche=ier 'pointage'.
Si je lance la macro pour le deuxième fichier, pas de soucis, cela rempli bien mon fichier 'pointage', MAIS en effacant les premières données.
Donc, après une recherche sur le forum, j'ai vu que pour ajouter les données à la suite, il fallait utiliser la fonction
Code:
Range('A65536').End(xlUp).Offset(1, 0).Select

Ce que j'ai fait, mais là,une fois que je lance ma macro, l'import du premier fichier se fait impeccable, mais pour le deuxième, celui pour lequel j'ai rajouté le code, j'ai droit au message d'erreur '1004 Impossible de coller les informations....'.

Comment résoudre ce problème ?
Merci par avance
Pour info, voici le code de ma macro :
Code:
Sub test()
'
' test Macro
' Macro enregistrée le 22/08/2005 par m435780
'

'
    ChDir 'U:\\Manuels\\Comptes\\Vrai-Couv'
    Workbooks.Open FileName:= _
        '\\\\XD007561\\FBNPXLE\\Manuels\\Comptes\\Vrai-Couv\\couv.xls'
    Rows('1:10').Select
    Selection.Delete Shift:=xlUp
    Rows('1:1').Select
    Selection.Delete Shift:=xlUp
    Columns('A:A').Select
    Selection.Copy
    Windows('pointage.xls').Activate
    Columns('A:A').Select
    ActiveSheet.Paste
    Range('B1').Select
    Windows('couv.xls').Activate
    Columns('B:B').Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows('pointage.xls').Activate
    Columns('B:B').Select
    ActiveSheet.Paste
    Range('C1').Select
    Windows('couv.xls').Activate
    Columns('C:C').Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows('pointage.xls').Activate
    ActiveSheet.Paste
    Windows('couv.xls').Activate
    Columns('D:D').Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows('pointage.xls').Activate
    Range('D1').Select
    ActiveSheet.Paste
    Range('E1').Select
    Windows('couv.xls').Activate
    Columns('E:E').Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows('pointage.xls').Activate
    ActiveSheet.Paste
    Range('G1').Select
    Windows('couv.xls').Activate
    Columns('F:F').Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows('pointage.xls').Activate
    ActiveSheet.Paste
    Windows('couv.xls').Activate
    Columns('G:G').Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows('pointage.xls').Activate
    Range('H1').Select
    ActiveSheet.Paste
    Windows('couv.xls').Activate
    Columns('H:H').Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows('pointage.xls').Activate
    Range('I1').Select
    ActiveSheet.Paste
    Windows('couv.xls').Activate
    Columns('I:I').Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows('pointage.xls').Activate
    Range('J1').Select
    ActiveSheet.Paste
    Windows('couv.xls').Activate
    Columns('J:J').Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows('pointage.xls').Activate
    Range('K1').Select
    ActiveSheet.Paste
    Windows('couv.xls').Activate
    ActiveWorkbook.Close SaveChanges:=False
    '
' vrais Macro
' Macro enregistrée le 22/08/2005 par m435780
'

'
    ChDir 'U:\\Manuels\\Comptes\\Vrai-Couv'
    Workbooks.Open FileName:= _
        '\\\\XD007561\\FBNPXLE\\Manuels\\Comptes\\Vrai-Couv\\vrai.xls'
    Rows('1:10').Select
    Selection.Delete Shift:=xlUp
    Rows('1:1').Select
    Selection.Delete Shift:=xlUp
    Columns('A:A').Select
    Selection.Copy
    Windows('pointage.xls').Activate
    ActiveSheet.Range('A65536').End(xlUp).Offset(1, 0).Select
    ActiveSheet.Paste
    Windows('vrai.xls').Activate
    Columns('B:B').Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows('pointage.xls').Activate
    ActiveSheet.Range('B65536').End(xlUp).Offset(1, 0).Select
    ActiveSheet.Paste
    Windows('vrai.xls').Activate
    Columns('C:C').Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows('pointage.xls').Activate
    ActiveSheet.Range('C65536').End(xlUp).Offset(1, 0).Select
    ActiveSheet.Paste
    Windows('vrai.xls').Activate
    Columns('D:D').Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows('pointage.xls').Activate
    ActiveSheet.Range('D65536').End(xlUp).Offset(1, 0).Select
    ActiveSheet.Paste
    Windows('vrai.xls').Activate
    Columns('E:E').Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows('pointage.xls').Activate
    ActiveSheet.Range('E65536').End(xlUp).Offset(1, 0).Select
    ActiveSheet.Paste
    Windows('vrai.xls').Activate
    Columns('F:F').Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows('pointage.xls').Activate
    ActiveSheet.Range('F65536').End(xlUp).Offset(1, 0).Select
    ActiveSheet.Paste
    Windows('vrai.xls').Activate
    Columns('G:G').Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows('pointage.xls').Activate
    ActiveSheet.Range('H65536').End(xlUp).Offset(1, 0).Select
    ActiveSheet.Paste
    Windows('vrai.xls').Activate
    Columns('H:H').Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows('pointage.xls').Activate
    ActiveSheet.Range('I65536').End(xlUp).Offset(1, 0).Select
    ActiveSheet.Paste
    Windows('vrai.xls').Activate
    Columns('I:I').Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows('pointage.xls').Activate
    ActiveSheet.Range('J65536').End(xlUp).Offset(1, 0).Select
    ActiveSheet.Paste
    Windows('vrai.xls').Activate
    Columns('J:J').Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows('pointage.xls').Activate
    ActiveSheet.Range('K65536').End(xlUp).Offset(1, 0).Select
    ActiveSheet.Paste
    Columns('A:A').EntireColumn.AutoFit
    Columns('B:B').EntireColumn.AutoFit
    Columns('C:C').EntireColumn.AutoFit
    Columns('D:D').EntireColumn.AutoFit
    Columns('E:E').EntireColumn.AutoFit
    Columns('G:G').EntireColumn.AutoFit
    Columns('H:H').EntireColumn.AutoFit
    Columns('I:I').EntireColumn.AutoFit
    Columns('J:J').EntireColumn.AutoFit
    Columns('J:J').ColumnWidth = 6.57
    Columns('J:J').EntireColumn.AutoFit
    Columns('J:J').EntireColumn.AutoFit
    Columns('K:K').EntireColumn.AutoFit
    Windows('vrai.xls').Activate
    ActiveWorkbook.Close SaveChanges:=False
End Sub

Message édité par: guenfood, à: 22/08/2005 12:13
 

2passage

XLDnaute Impliqué
Re:pb d'erreur 1004

Bonjour,

Ton problème vient surement du fait que tu copies des colonnes entières que tu essayes de coller dans des cellules (si la destination est la premiere cellule de la colonne , excel comprend la destination comme colonne entière mais sinon.. impossible.. blabla.. car zone.. forme.. tailles différentes...)

la solution serait de procéder plutot comme ca :

workbooks('classeurs de depart').sheets.('feuille de départ').range('A2:A' &
workbooks('classeurs de depart').sheets.('feuille de départ').range('A65536').end(xlup).row).copy destination:=
workbooks('classeurs d'arrivée')sheets.('feuille d'arrivée').range('A65536').end(xlup)

Vala
A+

(Edit : c'est une seule ligne de code)

Message édité par: 2passage, à: 22/08/2005 13:32
 

guenfood

XLDnaute Occasionnel
Re:pb d'erreur 1004

:huh:
J'ai un peu de mal à saisir.

Si je comprends bien, je ne touche pas à la première partie de mon code.
Par contre, pour la deuxième, je dois changer ma façon de sélectionner mes colonnes.
Mais j'ai du mal à saisir le code que tu m'as donné.
Par exemple, si je veux sélectionner et copier toutes les données de la colonne A, peux-tu me dire si ceci est bon (à partir du moment où le doc est déjà ouvert et la fenêtre activée:
Code:
Activesheet.range('A1:A65536').end(xlup).copy
Windows('pointage.xls').Activate
ActiveSheet.Range('A65536').End(xlUp).Offset(1, 0).Select
ActiveSheet.Paste
 

2passage

XLDnaute Impliqué
Re:pb d'erreur 1004

Bonjour,

Non, car assez vite la zone de destination ne sera plus assez grande pour recevoir A1:A65536 (dès que tu auras collé ton en tête de colonne en fait). L'idée est alors de ne selectionner que les données utilisées dans la feuille de départ et de les coller dans la feuille de destination au bon endroit

Sinon, evite les .avtivate / . activate... ca ne sert qu'a faire clignoter tes fenetres : la syntaxe 'range.copy destination' est bien plus efficace.

comme le 1er code que je t'ai mis est trop 'complexe' (c'est vrai que c'est un peu indigeste), je peux te proposer de décomposer un peu :

dim zone_a_copier, zone_destination as range
dim Dern_ligne_zone as integer

'pour la colonne A
set Dern_ligne_zone = workbooks('vrai.xls').worksheet('feuil1').range('A65536').end(xlup).row
set zone_a_copier = workbooks('vrai.xls').worksheet('feuil1').range('A2:A' & Dern_ligne_zone
set zone_destination = workbooks('pointage.xls').worksheet('feuil1').range('A65536').end(xlup).offset(1,0)
zone_a_copier.copy zone_destination

En espérant que ça t'aide
A+
 

guenfood

XLDnaute Occasionnel
Re:pb d'erreur 1004

Merci pour ta réponse rapide.
Je rencontre encore un problème.

J'ai inséré ton code mais, lors de l'exécution, j'ai un message 'erreur de compilation, objet requis'.
Et cela me surligne :'set Dern_ligne_zone '
alors que celui-ci est bien défini avec 'dim Dern_ligne_zone as integer'

Il est où le pb ??
 

MichelXld

XLDnaute Barbatruc
Re:pb d'erreur 1004

Bonjour Guenfood , bonjour 2Passage

je n'ai pas regarder la totalité des procedures mais dans la proposition de 2passage il faut remplacer

Set Dern_ligne_zone = workbooks('vrai.xls').worksheet('feuil1').range('A65536').end(xlup).row

par

Dern_ligne_zone = workbooks('vrai.xls').worksheet('feuil1').range('A65536').end(xlup).row


le Set est de trop dans cette ligne
Set est utilisé pour les variables type Object ou Range


bonne soiree
MichelXld

Message édité par: michelxld, à: 22/08/2005 17:21
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 909
Membres
101 836
dernier inscrit
karmon