Connaître le nombre de cellules fusionnées verticalement et/ou horizontalement

Magic_Doctor

XLDnaute Barbatruc
Bonsoir,

Récemment je demandais comment pouvait-on savoir si une cellule était fusionnée ou pas.
J'avais retenu la solution de mromain :

Public Function IsMerge(zone As Range) As Boolean
'mromain
'Savoir si des cellules sont fusionnées ou pas

IsMerge = zone.MergeCells

End Function

qui donne toute satisfaction.

Supposons maintenant que la cellule, que nous appellerons "lolo", corresponde à la fusion de A1 & A3 :
---> IsMerge(lolo) = VRAI

Si "lolo" correspond à A1 & D1 :
---> IsMerge(lolo) = VRAI

Si "lolo" correspond à A1 & F4 :
---> IsMerge(lolo) = VRAI

Par quel artifice mystérieux pourrait-on récupérer le nombre de lignes et/ou de colonnes correspondant à "lolo", à savoir :
- dans le 1er cas : 3 lignes
- dans le 2ème cas : 3 colonnes
- dans le 3ème cas : 4 lignes et 6 colonnes
 

Pierrot93

XLDnaute Barbatruc
Re : Connaître le nombre de cellules fusionnées verticalement et/ou horizontalement

Bonsoir,

peut être comme ceci, pour les lignes :

Code:
Function nblignes(zone As Range) As Byte
nblignes = zone.Rows.Count
End Function

pour les colonnes :

Code:
Function nbcolonnes(zone As Range) As Byte
nbcolonnes = zone.Columns.Count
End Function

bonne soirée et / ou bonne journée
@+
 

Pierrot93

XLDnaute Barbatruc
Re : Connaître le nombre de cellules fusionnées verticalement et/ou horizontalement

Re

tu peux ensuite appeler les 2 fonctions pour récupérer le nombre de lignes et de colonnes :

Code:
Sub test()
MsgBox "Nb de lignes : " & nblignes(Range("toto").MergeArea) & vbLf & _
    "Nb de colonnes : " & nbcolonnes(Range("toto").MergeArea)
End Sub

@+
 

Pierrot93

XLDnaute Barbatruc
Re : Connaître le nombre de cellules fusionnées verticalement et/ou horizontalement

Re

oui, à priori c'est dépendant du fait que la plage nommée soit fusionnée avant ou après, test peut être ce code, semble fonctionner chez moi...

Code:
Option Explicit
Function nblignes(PlageNommee As String) As Byte
If Names(PlageNommee).RefersToRange.Rows.Count > 1 Then
    nblignes = Range(PlageNommee).Rows.Count
Else
    nblignes = Range(PlageNommee).MergeArea.Rows.Count
End If
End Function
Function nbcolonnes(PlageNommee As String) As Byte
If Names(PlageNommee).RefersToRange.Columns.Count > 1 Then
    nbcolonnes = Range(PlageNommee).Columns.Count
Else
    nbcolonnes = Range(PlageNommee).MergeArea.Columns.Count
End If
End Function
Sub test()
MsgBox "Nb de lignes : " & nblignes("toto") & vbLf & _
    "Nb de colonnes : " & nbcolonnes("toto")
End Sub

bonne journée
@+
 

mromain

XLDnaute Barbatruc
Re : Connaître le nombre de cellules fusionnées verticalement et/ou horizontalement

Bonjour Magic_Doctor, Pierrot93,

voici une autre solution :
Code:
Public Function NbColumns(zone As Range) As Integer
NbColumns = zone.MergeArea.Columns.Count
End Function

Public Function NbRows(zone As Range) As Integer
NbRows = zone.MergeArea.Rows.Count
End Function

a+
 

Magic_Doctor

XLDnaute Barbatruc
Re : Connaître le nombre de cellules fusionnées verticalement et/ou horizontalement

Bonjour,

Je réponds avec du retard, car ici nous sommes en vacances et on crève de chaud !

Merci Pierrot93 & mromain pour vos solutions.
C'est curieux, j'ai essayé la solution de mromain, et elle fonctionne très bien même après avoir nommé la plage. À moins que je n'aie pas bien compris la remarque de Pierrot93.
 

Discussions similaires

Statistiques des forums

Discussions
312 371
Messages
2 087 711
Membres
103 648
dernier inscrit
mehdi kaddaf