Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Error 1004 - merged cells

Aloha

XLDnaute Accro
Bonsoir,

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
 

Aloha

XLDnaute Accro
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:

Code:
       Range("B1:E66").Select
       Selection.Delete Shift:=xlToLeft
       Range("A5:Y66").Select
       With Selection

          .HorizontalAlignment = xlCenter
          .VerticalAlignment = xlCenter
          .WrapText = False
          .Orientation = 0
          .AddIndent = False
          .IndentLevel = 0
          .ShrinkToFit = False
          .ReadingOrder = xlContext
          .MergeCells = False
    
      End With

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.

Bonne soirée
Aloha
 

Patrice33740

XLDnaute Impliqué
Bonjour,

Essaies :
VB:
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
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…