Erreur d'execution 1004 (ActiveSheet.Paste)

Escartefigue

XLDnaute Nouveau
Le forum bonjour,

J'ai un problème avec la commande "ActiveSheet.Paste" de façon aléatoire!
Je m'explique:
Je génère des présentations de produits en copiant des images sur une autre feuille.
Pour ce faire j'ai utilisé la macro suivante:
Private Sub Worksheet_Activate()

' Remise à zéro de l'affichage.
Application.ScreenUpdating = flase
For Each s In ActiveSheet.Shapes
If s.Type = 13 Then s.Delete
Next s
' Fiche N°001.
For Each c In [A1]
If c <> "" Then
lig = [Prez].Find(c, LookAt:=xlWhole).Row
col = [Prez].Column + 1
For Each s In Sheets("Images").Shapes
If s.TopLeftCell.Address = Cells(lig, col).Address Then s.Copy
Next s
ActiveSheet.Paste
Selection.ShapeRange.Left = c.Offset(, 0).Left + 0
Selection.ShapeRange.Top = c.Top + 1
End If
Next c
For Each c In [C26]
If c <> "" Then
lig = [DAS].Find(c, LookAt:=xlWhole).Row
col = [DAS].Column + 1
For Each s In Sheets("Images").Shapes
If s.TopLeftCell.Address = Cells(lig, col).Address Then s.Copy
Next s
ActiveSheet.Paste
Selection.ShapeRange.Left = c.Offset(, 0).Left + 10
Selection.ShapeRange.Top = c.Top + 5
End If
Next c
For Each c In [B26]
If c <> "" Then
lig = [Extr_Inssuf].Find(c, LookAt:=xlWhole).Row
col = [Extr_Inssuf].Column + 1
For Each s In Sheets("Images").Shapes
If s.TopLeftCell.Address = Cells(lig, col).Address Then s.Copy
Next s
ActiveSheet.Paste
Selection.ShapeRange.Left = c.Offset(, 0).Left + 1
Selection.ShapeRange.Top = c.Top + 25
End If
Next c
End Sub

Rien de bien sorcier, la macro marche au poil... enfin pour une feuille! J'ai dû dupliquer 150 fois la partie de génération de présentation (1 par page) et c'est là que les choses ce gâtes!

La macro étant trop longue j'ai dû la découper en 10 macros (1 macro de remise à zéro de la présentation, 8 macros de génération de présentation (20 pages par macro) et une macro qui démarre toutes les macros lorsque l'on ouvre la feuille concernée.

La plus part du temps j'ai cette erreur 1004 (mais pas tout le temps) et jamais au même endroit ou sur la même macro, ce qui me fait me dire que c'est un problème de cash mémoire dû a un trop grands nombre de copier/coller.

Pour moi la solution était de rajouter la ligne de commande "Application.CutCopyMode = False" a la fin de chaque page mais visiblement ça ne marche pas!

Quelqu'un aurait une idée s'il vous plait????
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Erreur d'execution 1004 (ActiveSheet.Paste)

Bonjour Escartefigue, bonjour le forum,

Sans fichier difficile de t'aider !...

Ça n'a rien à voir mais pourquoi des boucles sur une seule cellule ?
Code:
For Each c In [A1]
    If c <> "" Then
Code:
If Range("A1").Value <> "" Then
devrait suffire non ?

Le bonjour à Monsieur Brun...
 

Escartefigue

XLDnaute Nouveau
Re : Erreur d'execution 1004 (ActiveSheet.Paste)

Bonjour Robert,

Tout d’abord merci de t’intéresser à mon problème.
Ma faiblesse dans Excel c'est les macros... J'ai essayé ta solution mais ça ne marche pas.
Pourrais tu me faire un exemple complet afin que je comprenne d'où vient mon erreur s'il te plait?

PS: je ne peut malheureusement pas mettre de fichier car il est clafit de données confidentielles
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Erreur d'execution 1004 (ActiveSheet.Paste)

Bonjour Escartefigue, bonjour le forum,

Ce que je te disais était juste une remarque pas une solution...
Je répète, sans fichier difficile de t'aider. Mais si tu as la flemme d'envoyer un fichier exemple ayant la même structure que ton original (nom des onglet, plages nommées, formules, code VBA, etc.) et juste un poignée de données non confidentielles, je ne peux rien pour toi...
 

Staple1600

XLDnaute Barbatruc
Re : Erreur d'execution 1004 (ActiveSheet.Paste)

Bonjour à tous, Robert

Escartefigue
PS: je ne peut malheureusement pas mettre de fichier car il est clafit de données confidentielles
Si tu lisais la charte du forum, tu saurais comment on envoie un fichier exemple.
PS: On envoie jamais un fichier original sur XLD.
On crée un fichier exemple simplifié avec des donnés fictives et le code VBA adapté en conséquence.

Je plussoie donc à ce que vient d'écrire Robert.
 

Escartefigue

XLDnaute Nouveau
Re : Erreur d'execution 1004 (ActiveSheet.Paste)

Bonjour Staple1600,

J'ai lu la charte et fais ce fameux fichier mais il fait plus de 3MO ce qui ne passe pas sur le site.
Je suis allé certes un peu vite en ne parlant que des infos confidentielles.
Robert a gentiment accepté de m'aider par mail.

;-)
 

Staple1600

XLDnaute Barbatruc
Re : Erreur d'execution 1004 (ActiveSheet.Paste)

Re

Escartefigue
Que Robert t'aide par mail, c'est son choix comme disait Evelyne T.

Mais le principe d'un forum d'entraide (notamment d'XLD), c'est poser et résoudre les questions dans le fil discussion...

Espérons pour les éventuels lecteurs de ton fil, qu'il y aura un retour dans la discussion.
(et que tout se ne passera pas par mail)

NB: On n'avait besoin que d'un fichier exemple (donc créé pour l'occasion) et qui donc ne fera pas 3Mo.
Avec juste quelques données anonymes et le code de la macro qui pose problème
 
Dernière édition:

Escartefigue

XLDnaute Nouveau
Re : Erreur d'execution 1004 (ActiveSheet.Paste)

Re

Escartefigue
Que Robert t'aide par mail, c'est son choix comme disait Evelyne T.
Bien que je trouve délicieusement paradoxal ce que disait Robert juste avant ;)

Mais le principe d'un forum d'entraide (notamment d'XLD), c'est poser et résoudre les questions dans le fil discussion...
Faut croire que les mœurs changent avec le temps.

Espérons pour les éventuels lecteurs de ton fil, qu'il y aura un retour dans la discussion.
(et que tout se ne passera pas par mail)

NB: On n'avait besoin que d'un fichier exemple (donc créé pour l'occasion) et qui donc ne fera pas 3Mo.
Avec juste quelques données anonymes et le code de la macro qui pose problème
Décidément je dois mal m'exprimer...
J'ai fais le fameux fichier don tu parles.
Malheureusement je ne peux pas le réduire a une taille qui le fera passer sur le site!
Pourquoi: Ma macro marche quand il y a peu d'exemples mais elle ne marche plus quand il y en a un grand nombre (il faut dupliquer 150 fois la partie postée). J'ai écrit ce code pour une page sur 150, ça marchait très bien et c'est pour ça que j'ai décider de dupliquer le code pour chaque page! 3MO c'est la taille minimale sans aucune fioriture pour faire marcher la base de ma feuille.
Il n'y a donc aucun intérêt a poster ce fichier dans une forme plus réduite car l'erreur ne se produit plus!

Alors rassure toi j'ai bien compris le but du forum et je comptais venir expliquer le pourquoi et le comment du problème une fois résolu. Je suis vraiment désolé que tu le prennes ainsi.
 

Staple1600

XLDnaute Barbatruc
Re : Erreur d'execution 1004 (ActiveSheet.Paste)

Re

Escartefigue
Je suis vraiment désolé que tu le prennes ainsi
Je n'ai rien pris ;)
Juste exprimé une opinion (sur un ton badin de plus, identifiable par les emoticones, et la référence à Evelyne ;))

Encore une fois, un fichier exemple simple peut suffire avec une trentaine de lignes.
(Ensuite on peut toujours faire un copier/coller pour augmenter le volume de données)
(Et il est aussi facile une fois qu'on a ce fichier exemple de s'user les doigts pour faire
(il faut dupliquer 150 fois la partie postée)

Donc en te relisant, on doit comprendre que tu as 150 feuilles dans ton classeur avec dans chaque feuille une procédure
Code:
Private Sub Worksheet_Activate

alors qu'on pourrait peut-être se contenter d'une seule procédure mais située dans ThisWorkBook.
Code:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
'ton code ici
End Sub
 
Dernière édition:

Escartefigue

XLDnaute Nouveau
Re : Erreur d'execution 1004 (ActiveSheet.Paste)

Faire simple avec du compliqué... je fais ça tous les jours mais là je t'avoues que je ne peut vraiment pas faire plus (j'ai cherché de nouveau pour être sûr).

En fait j'ai en feuille1 un tableau de 150 lignes dans le que je rentre des donnée qui génèrent des calculs dans une feuille 2.
En feuille 3 j'ai fait un système d'impression rapide et visuel. Cette feuille fait 150 pages, il y a donc 1 page pour une ligne du tableau en feuille 1.

Chacune de ses pages se découpent en 5 parties.
- L'entête, que je dois générer par une image
- le tableau de synthèse qui se remplit automatiquement avec les données de la feuille 1
- Le schéma implantation
- La photo produit
- Le pied de page (suffisamment simple pour être fait sur cellule)

Ma problématique était de faire apparaitre l'image de l'entête, la photo du bon produit et le bon schéma d’implantation.

Au départ je voulais éviter les macros, je suis donc partie sur la méthode suivante: voir ICI
Ca marchait super bien sauf qu'il y avait tellement d'interaction qu'il fallait prés de 30 secondes entre chaque clic... bref beaucoup trop long!

Je me suis rabattue sur une méthode en VBA un peu plus bas sur la même page que j'ai rapidement analysé (voir chapitre Classement avec images)

Ce qui m'a fait créer cette macro un peut maladroite comme me l'a fait remarque Robert.
Bref ma macro c'est surement le bordel, un peu comme dans mon cerveau.
 

Staple1600

XLDnaute Barbatruc
Re : Erreur d'execution 1004 (ActiveSheet.Paste)

Re

C'est déjà plus clair ;)
Donc un fichier exemple pourrait être
Un nouveau classeur vierge avec trois feuilles
En feuille 1, un tableau de cinq lignes
En feuille 2, les calculs relatifs à ces lignes
En feuille 3: une seule page formatée comme tu l'as dit
- L'entête, que je dois générer par une image
- le tableau de synthèse qui se remplit automatiquement avec les données de la feuille 1
- Le schéma implantation
- La photo produit
- Le pied de page (suffisamment simple pour être fait sur cellule)
Et pour finir 5 images différentes pour les 5 produits fictifs plus l'image d’en-tète.
Un tel classeur devraoit pouvoir se joindre ici et nous aiderait à essayer de t'aider. ;)
 

Escartefigue

XLDnaute Nouveau
Re : Erreur d'execution 1004 (ActiveSheet.Paste)

Re

C'est déjà plus clair ;)
Donc un fichier exemple pourrait être
Un nouveau classeur vierge avec trois feuilles
En feuille 1, un tableau de cinq lignes
En feuille 2, les calculs relatifs à ces lignes
En feuille 3: une seule page formatée comme tu l'as dit

Et pour finir 5 images différentes pour les 5 produits fictifs plus l'image d’en-tète.
Un tel classeur devraoit pouvoir se joindre ici et nous aiderait à essayer de t'aider. ;)
Bon je te l'ai minimisé à 10 lignes
 

Pièces jointes

  • Fichier pour aide.xls
    661.5 KB · Affichages: 64

Staple1600

XLDnaute Barbatruc
Re : Erreur d'execution 1004 (ActiveSheet.Paste)

Re


Merci pour le fichier, mais il est protégé par un mot passe.:rolleyes:
(en tout cas les feuilles)

Donc difficile de lancer une macro sur des feuilles protégées ;)

En attendant le mot de passe, une petite correction ici
Code d'origine
Code:
Sub Prez_RAZ()
' Remise à zéro de l'affichage.
 Application.ScreenUpdating = flase 'PAS OK ;o)
  For Each s In ActiveSheet.Shapes
    If s.Type = 13 Then s.Delete
    Next s
End Sub
Code corrigé
Code:
Sub Prez_RAZ()
' Remise à zéro de l'affichage.
 Application.ScreenUpdating = False ' OK ;o)
  For Each s In ActiveSheet.Shapes
    If s.Type = 13 Then s.Delete
    Next s
End Sub
 
Dernière édition:

Escartefigue

XLDnaute Nouveau
Re : Erreur d'execution 1004 (ActiveSheet.Paste)

La macro se lance sur la feuille "Fiches Selection" qui n'est pas protégé, donc aucun problème pour le fonctionnement de la macro.
Bien vu pour la première erreur, pourtant cette macro ne pose pas de dysfonctionnement.
 

Staple1600

XLDnaute Barbatruc
Re : Erreur d'execution 1004 (ActiveSheet.Paste)

Re

Personnellement , je réduirais un peu le code en utilisant cette syntaxe.
NB: Par principe, pas besoin de mot de passe quand on est phase de test, non :confused:
(surtout sur un fichier exemple ... )
Code VBA:
Sub Prez_Gen_1()
' Fiche N°001.
Dim adres, zones, i%, col&, lig&
adres = Array("A1", "C26", "B26")
zones = Array("Prez", "DAS", "Extr_Inssuf")
For i = 0 To UBound(adres)
If Not IsEmpty(Range(adres(i))) Then
lig = Range(zones(i)).Find(Range(adres(i)), LookAt:=xlWhole).Row
col = Range(zones(i)).Column + 1
For Each s In Sheets("Images").Shapes
If s.TopLeftCell.Address = Cells(lig, col).Address Then s.Copy
Next s
ActiveSheet.Paste
Selection.ShapeRange.Left = Range(adres(i)).Offset(, 0).Left + 0
Selection.ShapeRange.Top = Range(adres(i)).Top + 1
End If
Next i
'Faire selon la même logique pour les autres fiches
'-----------
' reste du code à modifier ... ou pas
End sub
 

Discussions similaires

Réponses
2
Affichages
143
Réponses
8
Affichages
473

Statistiques des forums

Discussions
312 164
Messages
2 085 870
Membres
103 007
dernier inscrit
salma_hayek