Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[VBA] Blocage à la copie d'une feuille avec Excel 2013

8 réponses
Avatar
HD
Bonjour,

J'ai encore un souci avec Excel 2013. J'ai une macro simple qui
fonctionne depuis les versions Excel 97 jusqu'à la version Excel 2010.
Le souci est que si le classeur où se trouve la macro passe par un poste
ayant Excel 2013 je me retrouve alors avec un classeur pour lequel la
macro ne fonctionne plus. Lorsqu'on lance la macro l'écran se fige. Le
blocage se situe au niveau de la copie d'une feuille via les lignes
suivantes:
Sheets("FdC").Select
Sheets("FdC").Copy
Dès que la copie de la feuille "FdC" est lancée Excel bloque et la suite
du script n'est pas exécutée.

Je suppose que cela provient encore de la nouvelle méthode d'encryptage
des feuilles Excel (le classeur une fois ouvert et enregistré sur un
poste ayant Excel 2013 conserve l'encryptage 2013 d'où le fait que le
problème se retrouve alors sur les autres postes ayant des versions
Excel différentes)... mais comment remédier mon problème ? Je veux tout
simplement copier une feuille complète dans un nouveau classeur.

J'ai tenté de déprotéger la feuille FdC avant l'exécution de
Sheets("FdC").Copy mais rien n'y fait. Et je n'ai aucun message d'erreur
affiché.

Cordialement,

HD

8 réponses

Avatar
MichD
Bonjour,

Cette ligne de code serait suffisante :
Sheets("FdC").Copy

Cette ligne de code ne pose aucun problème dans Excel 2013.

As-tu un message d'erreur? Si oui, lequel?
Qu'est-ce qu'il y dans cette feuille au-delà des données?
Avatar
HD
Cette ligne de code serait suffisante :
Sheets("FdC").Copy
Cette ligne de code ne pose aucun problème dans Excel 2013.


Avec un classeur d'origine, le problème ne se pose pas sur des postes
avec Excel antérieur à 2013. Dès que le classeur a été ouvert et
enregistré avec Excel 2013 là les problèmes commencent.

As-tu un message d'erreur? Si oui, lequel?


Il n'y a aucun message d'erreur. Je n'ai pas de "On error resume next"
qui pourrait empêcher l'affichage d'une erreur. Excel est complétement
bloqué.

Qu'est-ce qu'il y dans cette feuille au-delà des données?


C'est une feuille de saisie avec des macros événements qui y sont
attachées (Worksheet_SelectionChange, Worksheet_Change et
Worksheet_Activate). Si je supprime toutes les macros faisant références
à cette feuille le problème est toujours là. Par contre, en faisant un
ctrl+alt+suppr pour planter Excel et le débloquer, je viens enfin
d'avoir un message d'erreur: << Erreur d'exécution '-2147417848
(80010108)': La méthode 'Copy' de l'objet '_Worksheet' a échoué >>.
Lorsque je clique sur débogage je retombe sur la ligne
Sheets("FdC").Copy

@+
HD
Avatar
MichD
Peux-tu publier ton classeur en utilisant le site Cjoint.com.
Fais disparaître du fichier, tout ce qui n'est pas obligatoire.
Tu nous retournes l'adresse ici .
Avatar
HD
Bonjour,
J'ai enfin le temps de me repencher sur le problème... Je pense que le
souci provient du fait qu'Excel considère que la feuille en question
utilise une plage de cellules immense. Lorsque j'ai voulu afficher des
lignes qui étaient cachées j'ai encore eu Excel qui a planté...

Je vais tester de copier les cellules qui m'intéressent sur une autre
feuille pour voir ce que cela donne... Je vous tiens au courant.

@+
HD


---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
http://www.avast.com
Avatar
HD
Ma partie utilisée de ma feuille (ActiveSheet.UsedRange) devrait faire
1450 cellules... or elle en fait 1835008... d'où problème.

@+
HD


---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
http://www.avast.com
Avatar
HD
Et malheureusement... Activesheet.UsedRange est loin de toujours
fonctionner... dans mon cas son exécution ne change rien.

@+
HD


---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
http://www.avast.com
Avatar
MichD
Si la plage est plus grande que celle où il y a des valeurs, essaie cette
macro pour faire le ménage.


'------------------------------------
Sub test()'MichD
Dim Sh As Worksheet, DerLig As Long, DerCol As Integer
Dim ModeCalcul As String

Application.ScreenUpdating = False
ModeCalcul = Application.Calculation
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
On Error Resume Next
For Each Sh In ThisWorkbook.Worksheets
With Sh
If Not IsEmpty(.UsedRange) Then
DerLig = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row

DerCol = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
.Range(.Cells(1, DerCol + 1), .Cells(.Rows.Count,
.Columns.Count)).Clear
.Range(.Cells(1, DerCol + 1), .Cells(.Rows.Count,
.Columns.Count)).Delete
.Range(.Cells(DerLig + 1, 1), .Cells(.Rows.Count,
.Columns.Count)).Clear
.Range(.Cells(DerLig + 1, 1), .Cells(.Rows.Count,
.Columns.Count)).Delete
End If
End With
If Err <> 0 Then Err = 0
Next
Application.Calculation = ModeCalcul
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
'------------------------------------

"HD" a écrit dans le message de groupe de discussion :
m5neqk$6d9$

Et malheureusement... Activesheet.UsedRange est loin de toujours
fonctionner... dans mon cas son exécution ne change rien.

@+
HD


---
L'absence de virus dans ce courrier électronique a été vérifiée par le
logiciel antivirus Avast.
http://www.avast.com
Avatar
HD
Bonjour MichD,

J'ai lancé la macro, cela a pris un bon moment mais... le ménage s'est
fait correctement et tout refonctionne comme avant.

Encore un grand MERCI à toi !!!

@+
HD


---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
http://www.avast.com