dans une feuille toutes les cellules sont reliées verticalement deux par deux dans A1:Y66.
Avec une macro je les ai déliées et lorsque je veux les trier, je reçois l'erreur 1004: "To do this all the merged cells must be of the same size".
J'ai vérifié le format des cellules: il n'en reste aucune qui serait reliée et manuellement j'arrive à trier.
Seulement, lorsque j'enregistre ce triage, et que je colle le bout de code dans la macro déliant les cellules, je reçois l'erreur.
Quelle solution y a-t-il à ce problème?
Bonne soirée
Aloha
j'ètais sur le point de l'ajouter.
J'ai fait un fichier exemple, mais là le code fonctionne.
Le code d'origine qui fonctionne mais très lentement:
Code:
Sub PréparerFeuilles(WS As Worksheet)
Dim Zelle As Range
WS.Unprotect
For Each Zelle In WS.Range("A5:AC66")
If Zelle.MergeCells = True Then
With Zelle.MergeArea
.MergeCells = False
End With
End If
Next
WS.Range("A5:A66").Copy
WS.Range("A5:A66").PasteSpecial xlPasteValues
WS.Range("A5:Y66").Sort Key1:=WS.Range("A5"), Order1:=xlAscending
End Sub
Comme il est trop lent, j'ai essayé, avec mes modestes moyens, d'accélérer l'action et j'ai fabriqué le code suivant:
Et en-dessous j'ai collé le bout du code original qui fait le triage:
Code:
WS.Range("A5:A66").Copy
WS.Range("A5:A66").PasteSpecial xlPasteValues
WS.Range("A5:Y66").Sort Key1:=WS.Range("A5"), Order1:=xlAscending
End Sub
En A5:A66 il y a des dates produites par des formules et elles sont sauvées en les remplaçant par les valeurs.
Dans le code d'origine il y a la variable Ws parce que le code doit s'exécuter sur toutes les feuilles.
J'ai essayé de l'ajouter à Range: Ws.Range, mais ça n'est pas accepté.
Comme le code enregistré fonctionne dans le fichier exemple, ça doit tenir au fait qu'il y a la variable, non?
Comment devrais-je modifier ce code pour qu'il tourne rond sur toutes les feuilles?
Lorsque je fais le même tri manuellement il n'y a aucun problème.
Sub PréparerFeuilles(WS As Worksheet)
WS.Unprotect
WS.Range("A5:AC66").UnMerge
WS.Range("A5:A66").Value = WS.Range("A5:A66").Value
WS.Range("A5:Y66").Sort Key1:=WS.Range("A5"), Order1:=xlAscending
End Sub