VBA - Tester/Modifier plage de cellules fusionnées ou non

Suite à une question posée sur le forum.

La question était Macro pour verrouiller des cellules non vide Fusionnée

Constatant que les fonctions Excel...

Sheets("Feuil1").Range("A1:AF650").Locked = True
Sheets("Feuil1").Range("A1:AF650").SpecialCells(xlCellTypeBlanks).Locked = False

n'ont aucun effet sur les cellules fusionnées.

Deux solutions pour contourner ce petit problème.

En testant par lignes et colonnes

Sub LigneAvecMerge()
Dim Lig As Long
Dim Col As Integer
Dim ColDeb As Integer, ColFin As Integer
Dim Mg As String, TB
    'pour l'exemple, les colonnes à tester de 2 à 8
    ColDeb = 2: ColFin = 8
    With Sheets("Feuil1")
        .Unprotect 'éventuellement MotPasse
        For Col = ColDeb To ColFin
            For Lig = 1 To Cells(Rows.Count, Col).End(xlUp).Row
                Mg = .Cells(Lig, Col).MergeArea.Address
                TB = Split(Mg, ":")
                If .Range(TB(0)).Value <> "" Then
                    .Range(Mg).Locked = True
                Else
                    .Range(Mg).Locked = False
                End If
            Next Lig
        Next Col
        .Protect 'éventuellement MotPasse
    End With
End Sub

Ou avec une plage définie

Sub PlageAvecMerge()
Dim Cel As Range
Dim Plage As Range
Dim Mg As String, TB
    With Sheets("Feuil1")
        Set Plage = .Range("B2:F20") 'pour l'exemple
       .Unprotect 'éventuellement MotPasse
        For Each Cel In Plage
            Mg = Cel.MergeArea.Address
            TB = Split(Mg, ":")
            If .Range(TB(0)).Value <> "" Then
                .Range(Mg).Locked = True
            Else
                .Range(Mg).Locked = False
            End If
        Next Cel
        .Protect 'éventuellement MotPasse
    End With
End Sub

Les deux solutions fonctionne aussi bien pour les cellules simple que pour les cellules fusionnées.

Les exemples verrouilles les cellules non vide et déverrouille les cellules vides.

Ce code peu facilement être adapter pour d'autre emploi, par exemple : vous voulez voir si la colonne "D" contient "Je suis" et que certaine ligne sont fusionnées "B+C+D+E" .. le résultat en colonne D sera OUI, bien entendu si la fusion contient "Je suis"

Evidemment vous aurez le même résultat si vous testez la colonne B ou C..ou E

Rechercher des sujets similaires à "vba tester modifier plage fusionnees"