XL 2013 code qui de-fusionne des cellules dans un tableau

  • Initiateur de la discussion Initiateur de la discussion vinciHorus
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Solution
Bonjour vinciHorus, patricktoulon, le forum,

Rien compris mais puisqu'on demande de défusionner :
VB:
Sub Sup()
With Range("D8:D" & Rows.Count)
    .UnMerge
    On Error Resume Next
    .SpecialCells(xlCellTypeBlanks).Delete xlUp
    .CurrentRegion.Borders.Weight = xlThin 'facultatif
End With
End Sub
A+
EN l'état si je me cantonne a ta demo
pour la reproduire je fait ceci
VB:
Sub test()
    Dim D As Object, C As Range
    Set D = CreateObject("scripting.dictionary")
    For Each C In Range("D1", Cells(Rows.Count, "D").End(xlUp)).Cells
        If C.MergeCells = True And Not D.exists(C.MergeArea.Address) Then
            D(C.MergeArea.Address) = C.Value
        End If
    Next
    [G8].Resize(D.Count, 1) = Application.Transpose(D.Items)
End Sub
mais je suis quasiment certain que c'a n'est pas tout a fait ça ,mais comme a ton habitude tu va nous donner les éléments 1 par 1 😉
 
EN l'état si je me cantonne a ta demo
pour la reproduire je fait ceci
VB:
Sub test()
    Dim D As Object, C As Range
    Set D = CreateObject("scripting.dictionary")
    For Each C In Range("D1", Cells(Rows.Count, "D").End(xlUp)).Cells
        If C.MergeCells = True And Not D.exists(C.MergeArea.Address) Then
            D(C.MergeArea.Address) = C.Value
        End If
    Next
    [G8].Resize(D.Count, 1) = Application.Transpose(D.Items)
End Sub
mais je suis quasiment certain que c'a n'est pas tout a fait ça ,mais comme a ton habitude tu va nous donner les éléments 1 par 1 😉
c'est un élément qui entrera dans ma macro principale !!!

c'est possible de le faire sur le même tableau? (les modifications s'appliquent sur le même tableau)
 
re
VB:
Sub test()
    Dim D As Object, C As Range,firstrow&
    Set D = CreateObject("scripting.dictionary")
    For Each C In Range("D1", Cells(Rows.Count, "D").End(xlUp)).Cells
        If C.MergeCells = True And Not D.exists(C.MergeArea.Address) Then
            If firstrow = 0 Then firstrow = C.Row
            D(C.MergeArea.Address) = C.Value: C.MergeCells = False: C = ""
       
End If
    Next
    Cells(firstrow, "D").Resize(D.Count, 1) = Application.Transpose(D.Items)
End Sub
 
re
VB:
Sub test()
    Dim D As Object, C As Range,firstrow&
    Set D = CreateObject("scripting.dictionary")
    For Each C In Range("D1", Cells(Rows.Count, "D").End(xlUp)).Cells
        If C.MergeCells = True And Not D.exists(C.MergeArea.Address) Then
            If firstrow = 0 Then firstrow = C.Row
            D(C.MergeArea.Address) = C.Value: C.MergeCells = False: C = ""
      
End If
    Next
    Cells(firstrow, "D").Resize(D.Count, 1) = Application.Transpose(D.Items)
End Sub
cela fonctionne mais ça ne tient pas compte des bordures
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
275
Réponses
11
Affichages
153
Réponses
1
Affichages
83
Réponses
1
Affichages
166
Retour