La méthode PasteSpecial de la classe Range a échoué (1004)

Signaler
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
-
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
-
Bonjour à tou(te)s

En fait, ce n'est pas (plus) une question mais une réponse que j'ai eu du mal à trouver, même sur le net : j'ai passé une demie journée pour trouver le problème - je m'en viens la noter ici pour que cela puisse en aider d'autres.

Contrexte :
Sous Excel 2010, je tentais de faire un "collage spécial" des valeurs (uniquement) de 300.000 cellules.
Quand je le faisais à la main, pas de souci.
Quand je l'incluais dans une macro, à chaque fois cette erreur.

Après avoir écumé tous les forums et les pages de Microsoft, j'en suis arrivé à la conclusion que les filtres automatiques provoquaient ce problème :
Le collage que je voulais faire amenait ces valeurs dans une feuille qui possèdait déjà les titres des colonnes; titres équipés de filtres automatiques.
Si on tente de faire un PasteSpecial dans ces conditions, ça plante.

La solution a donc consisté :
- A supprimer temporairement le filtrage automatique
- A demander le figeage des calculs de la feuille
(oSheet.Application.Calculation = xlManual)

A noter :
Pour supprimer temporairement les filtres automatiques et les remettre en place ensuite :

Dim oFilterRnge As String
Dim oRange1 As Range

' Pour désactiver le filtrage
If Not oSheet.AutoFilter Is Nothing Then
' Mémorise adresse de filtrage
oFilterRnge = oSheet.AutoFilter.Range.Address
' Supprime
oSheet.Range(oFilterRnge).AutoFilter
Else
oFilterRnge = ""
End If

' Pour remettre le filtre tel qu'il était au début
If Len(oFilterRnge) > 0 Then
' Remet en serice le filtrage
Set oRange1 = oSheet.Range(oFilterRnge)
oRange1.AutoFilter
End If
oSheet représente la feuille sur laquelle on travaille.

10 réponses

Messages postés
33134
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 juillet 2021
351
A marquer comme "résolu"
Messages postés
31607
Date d'inscription
samedi 12 mai 2007
Statut
Webmaster
Dernière intervention
22 juillet 2021
2
Salut,

Ca ne pourrait pas faire un tuto également ? (plutôt qu'un post sur le forum)
@++
Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
14
Bonjour,

Je me permet de "non résoudre" ce sujet et d'y intervenir.
Je viens de tester un copier/collage spécial sur une feuille disposant d'un filtrage automatique. Ma macro fonctionne...
Cs_Jack, peux tu, stp, nous donner ton code de copié/collé spécial?

Pour info, le mien qui fonctionne utilise un bloc
With End With
:
Sub test()
With Sheets("FeuilleFiltrée")
   Range("A1:A33").Copy
   .Range("A2").PasteSpecial 'je n'ai pas mis de paramètre ne connaissant pas les tiens...
End With
End Sub

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
Salut Pijaku

Rien de méchant :

' Cellules de destination - nettoyage
Set oRange2 = oSheet_Main.Range("A3")
oSheet_Main.Range(oRange2, oRange2.SpecialCells(xlLastCell)).ClearContents
' Cellules de destination - re-sélection
Set oRange2 = oSheet_Main.Range("A3")
' Cellules source : Toutes les cellules de PDHS
Set oRange1 = oSheet_PDHS.Range("A2:AB2")
Set oRange1 = oSheet_PDHS.Range(oRange1, oRange1.Offset(lLinesCount, 0))
' (*) lLinesCount est une variable initialisée plus tôt
' Vidage presse-papier
oExcel.Application.CutCopyMode = False
' Copiage
oExcel.Application.CutCopyMode = xlCopy
oRange1.Copy
DoEvents
oRange2.PasteSpecial Paste:=xlPasteValues, Operation:=xlPasteSpecialOperationNone
' et paf le chien !
Pour compléter, les cellules servant au filtrage se trouvent sur la ligne 2, c'est à dire juste au dessus des cellules que je veux coller.
/!\ Je colle prêt de 300.000 cellules : Peut-être un peu normal que le filtrage perde les pédales au moment du "coller".
Pour info, sous Excel 2003, on ne pouvait coller que 2500 lignes à la fois.
Peut-être que pour Excel 2010 ils ont corrigé le problème en créant des paquets de lignes, ce qui peut vouloir dire que le filtre essaye de retrouver ses petits en plein milieu du collage ... avec des données incomplètes.
Voilà comment je me l'explique.
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
PS : Je ne pense pas que le "With" influence la compilation.
Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
14
Salut,

Je n'arrive pas à reproduire le bug...
Ce fichier : http://cjoint.com/?DHDjpHUN6Gb tente de le reproduire, mais sans succès. J'utilise ton code sans la partie de désactivation du filtre...

Le classeur transmis ici contient 2 macros :
- Prepare_Classeur => remplit la feuil2 de données et prépare la feuil1 avec filtre
- TaMacro => ton code...

Peux tu y regarder et tester?
Il convient, en effet, avant de créer un tuto (comme le suggère Noctambule), de voir ce qui peut effectivement clocher (données, filtre actif ou non, autre, ...). Je sais que PasteSpecial est capricieuse et cela pourrait servir à d'autres.
Messages postés
16113
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
25 juillet 2021
555
Salut, c'est peut être l'OS qui fait la différence. Avez vous essayé (l'un ou l'autre) sur différents windows. J'ai pas excel 2010 ici, mais je pourrais regarder sous xp au boulot lundi.
Messages postés
33134
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 juillet 2021
351
Bonjour,

je me joins à la discussion.....

Si le souci a été "corrigée" par le retrait des filtres... ne serait-ce pas lié au fait que certaines colonnes étaient justement filtrées et donc que certains lignes étaient masquées ?
Le fait que le filtre soit "présents" ou non ne doit surement pas générer le souci rencontré... le fait que des lignes/cellules soient masquées... Si...!


Messages postés
33134
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 juillet 2021
351
Et bien non....
En utilisant le classeur de Pika... impossible de reproduire le message d'erreur

----------------------------------------------
Office 2010
Os : SEVEN Entreprise 64 Buts

Edit : Os : SEVEN Entreprise 64 Bits*
Messages postés
16113
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
25 juillet 2021
555
Wahoo 64 buts, arrête l'informatique et fait toi embaucher dans l'équipe de France!

Ha nos correcteurs d'orthographe.....
Messages postés
33134
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 juillet 2021
351
Oupsss... et heureusement qu'il n'a pas mis un "P" ... (mais là encore j'aurais quand même eu mes chances dans l'équipe de france... ^^ )
Messages postés
16113
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
25 juillet 2021
555
c'est sur!
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
Franck and Co : bien le bonjour

En effet, la démonstration de Franck fonctionne parfaitement.
J'y ai donc ajouté les particularités de mon application, chose que je n'avais pas remis en question et qui démontre que le problème est lié au fait de travailler sur 2 classeurs différents (source - destination)

Voilà donc la démo de Franck corrigée pour remettre en situation :
http://cjoint.com/?0HDmZe9nkb1

et dans lequel il y a bien problème.
Je n'ai pas le temps de voir si la correction que j'ai suggéré fonctionne. Je le ferai ce week-end

@ Jordane : Non, les filtres sont tous inactifs au moment du problème, c'est une des choses que j'avais vérifié.
Messages postés
33134
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 juillet 2021
351
Ah ben j'avais po compris que c'était la tienne ...... heureusement que c'est enfin le week end... je vais pouvoir aller m'entrainer un peu au foot...(arf..non.. je vais plutot en profiter pour me reposer... j'ai de l'avances sur les "buts" ^^ )
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
Merci pour cette effervescence.
Arg : Bizarre ce phénomène.

Je vais tenter de l'essayer à mon tour sur une autre machine - j'ai un peu de tout sous la main. Je vous tiendrais au courant.

La mienne :
W7-64 avec plein de mémoire
Office 2010 Prop Plus
mais c'est un tel bordel pour retrouver le "A propos de Excel" que j'ai abandonné - surement (mais pas sûr) - la version 64 bits/buts aussi.
Messages postés
16113
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
25 juillet 2021
555
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
lol, merci Whisleril.
Je ne sais pas pourquoi cette fenêtre ne voulait pas s'afficher toute à l'heure.

J'ai donc une version 32 bits/buts : pourquoi m'a-t-il installé une 32 au lieu d'une 64 ? Mystère du setup (qui est le même pour le 32 et le 64).
Le problème viendrait-il de là ... ça me paraittrait louche.
Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
14
Testé avec Excel 2007 (12.0.6683.5502) SP3 MSO et W7 édition Familiale Premium 64 bits, le classeur de Cs_Jack m'a donné à la première, utilisation le message 400 (comme whismeril), puis a fonctionné sans souci.
Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
14
Merci pour cette effervescence.
Cette effervescence se justifie.
Nous avons tous été confrontés à un moment ou à un autre à ce genre de caprice de la part de PasteSpecial.
Pour ma part, il est temps de comprendre le pourquoi du comment.

Sur ce je vous souhaite un bon week end à tous
Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
14
Salut tout le monde,

JE ne peux pas tester, mais peut être faudrait-il sélectionner le Range de destination : oRange2.Select avant le collage spécial.
Autre piste, sélectionner un range de destination de la même "taille" que le range copié...
A voir.
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
Re à tou(te)s

Franck : Le .Select est à bannir pour la simple raison qu'il crée une sélection et qu'une intervention de l'utilisateur au même moment peut provoquer des résultats inattendus - mieux vaut toujours travailler avec les objets et bannir la sélection.

Tests sous :
- XP Pro 32 SP2 + Excel Pro 2007 : même erreur
- XP Pro 32 SP2 + Excel Pro 2003 : fonctionne
- W7-64 SP1 + Excel 2010 32, sur une autre machine que celle de dev : même erreur

Ce qui est rassurant pour moi, c'est que deux machines avec la même configuration donne le même résultat (l'erreur).