Sub ControleCellules(Target As Range, prefixe As String, RememberCell As Variant)
'Magic_Doctor/mromain/Hervé
'Blocage de toutes les cellules s'il en existe une avec "? ? ?"
Dim i As Byte, NomCelda As String, celda As Range, NbLgn As Byte, NbCol As Byte
Dim MergeCelda As Byte
Bourde = 0
MergeCelda = 0
'On Error Resume Next
Dim x As Boolean
For i = 1 To Names.Count
If IsError(Range(Names(i).Name).Value) Then
x = True
Else
x = Range(Names(i).Name).Value = "? ? ?"
End If
'Si le nom de la cellule commence par "prefixe" & que la cellule contient "? ? ?"
If Left(Names(i).Name, Len(prefixe)) = prefixe And x Then
'Récupère le nom de la cellule ("NomCelda") qui contient "? ? ?"
NomCelda = Names(i).Name: Bourde = 1
'Défusionne les cellules fusionnées
Set celda = Range(NomCelda)
If IsMerge(celda) = -1 Then 'Si la cellule contenant "? ? ?" est fusionnée
'Renvoie & mémorise le nombre de lignes et/ou de colonnes
'de la cellule fusionnée contenant "? ? ?"
NbLgn = NbLignes(celda): NbCol = NbColonnes(celda)
celda.UnMerge: MergeCelda = 1
End If
Exit For
End If
Next i
'Si on a trouvé "? ? ?" dans une des cellule, remettre l'ancienne valeur dans la
'cellule active, sélectionner la cellule qui contient "? ? ?" et quitter la macro
If Bourde = 1 Then 'S'il existe une cellule avec "? ? ?"
Target.Value = RememberCell
'Refusionne la cellule défusionnée qui contient "? ? ?"
If MergeCelda = 1 Then Range(celda, celda.Offset(NbLgn - 1, NbCol - 1)).Merge
celda.Select
End If
End Sub