Nombre de cellules (cellules fusionnées comptent pour 1) d'une Range

dionys0s

XLDnaute Impliqué
Salut le forum,

je pensais que la solution serait simple, mais il semblerait que non.
Je cherche à définir le nombre de cellule d'une plage, et je veux que les cellules fusionnées ne comptent que pour une seule cellule.

Je pense que j'ai dû louper quelque chose. Je pensais que MaPlag.MergeArea.Cells.Count, ou quelque chose dans ce style, ferait l'affaire, mais impossible de trouver quoi que ce soit qui fonctionne.

J'ai contourné ça à l'aide d'une petit fonction, mais je demande si je n'ai pas loupé quelque chose, une méthode ou je ne sais quoi. Ci-dessous, la fonction commise.

VB:
Public Function NbCellFus(ByRef PlagSourc As Range) As Integer

    Dim TEMP() As Boolean, i As Integer, j As Integer
    Dim iPrim As Integer, jPrim As Integer

    With PlagSourc
        ReDim TEMP(.Rows(1).Row To .Rows(1).Row + .Rows.Count - 1, .Columns(1).Column To .Columns(1).Column + .Columns.Count - 1)
    End With

    For i = LBound(TEMP, 1) To UBound(TEMP, 1)
        For j = LBound(TEMP, 2) To UBound(TEMP, 2)
            If TEMP(i, j) = False Then
                NbCellFus = NbCellFus + 1
                For iPrim = i To i + Cells(i, j).MergeArea.Rows.Count - 1
                    For jPrim = j To j + Cells(i, j).MergeArea.Columns.Count - 1
                        TEMP(iPrim, jPrim) = True
                    Next jPrim
                Next iPrim
            End If
        Next j
    Next i

End Function

Y a-t-il une méthode plus rapide et simple qui te saute aux yeux, Ô toi, lecteur qui a eu la gentillesse de lire jusqu'ici ?

D'avance merci

dionys0s
 

Pièces jointes

  • NbFusion.xlsm
    37.3 KB · Affichages: 53
Dernière édition:
G

Guest

Guest
Re : Nombre de cellules (cellules fusionnées comptent pour 1) d'une Range

Bonjour,

Code:
Public Function NbCellFus(plgSource As Range) As Long
  Dim a As Range
  Dim cpt As Long
  For Each a In plgSource
    NbCellFus = NbCellFus - a.MergeCells 'Sachant que True=-1 et - - = +
  Next
End Function

A+
 

dionys0s

XLDnaute Impliqué
Re : Nombre de cellules (cellules fusionnées comptent pour 1) d'une Range

Re,

J'ai parlé trop vite. Je me suis mal exprimé : en fait je ne cherche pas le nombre de cellules fusionnées, mais le nombre total de cellules, et je veux que chaque cellule fusionnée compte pour 1 (et non pas pour Nb de lignes * nombre de Colonnes de la fusion en question)
 
G

Guest

Guest
Re : Nombre de cellules (cellules fusionnées comptent pour 1) d'une Range

Re,

Désolé mais je viens de vérifier tu as 36 cellules fusionnées entre B2:F11 et 22 entre B2:F7 --> donc la fonction est bonne, elle compte le nombre de cellule fusionnées, ce sont tes explications qui ne sont pas claires ou ambigües!

La fonction ci-dessous te donneras le nombre de cellules en comptant 1 par fusion: soit 17 cellules

Code:
Public Function NbCell(plgSource As Range) As Long
  Dim a As Range
  Dim u As Range 'union des plages fusionnées
  Dim cpt As Long
  For Each a In plgSource
    If a.MergeCells Then
        If u Is Nothing Then
            Set u = a.MergeArea
        Else
            If Intersect(u, a.MergeArea) Is Nothing Then Set u = Union(u, a.MergeArea)
        End If
    Else
        cpt = cpt + 1
    End If
  Next
  NbCell = cpt + u.Areas.Count
End Function

A+
 

david84

XLDnaute Barbatruc
Re : Nombre de cellules (cellules fusionnées comptent pour 1) d'une Range

Bonsoir,
à tester :
Code:
Function NbCell(ByRef PlagSourc As Range) As Integer
Dim c As Range, Dico As Object
Set Dico = CreateObject("scripting.dictionary")
For Each c In PlagSourc
 Dico(c.MergeArea.Address) = Dico(c.MergeArea.Address)
Next c
NbCell = Dico.Count
End Function
A+

Edit : bonsoir l'ami Hasco !
 

job75

XLDnaute Barbatruc
Re : Nombre de cellules (cellules fusionnées comptent pour 1) d'une Range

Bonjour dionys0s, salut Hasco,

Code:
Function NbCellFus&(r As Range)
Dim d As Object
Set d = CreateObject("Scripting.Dictionary")
For Each r In r
d(r.MergeArea.Address) = ""
Next
NbCellFus = d.Count
End Function
Fichier joint.

Edit : hello David, on s'est donné le mot ;)

A+
 

Pièces jointes

  • NbFusion(1).xls
    49.5 KB · Affichages: 32

job75

XLDnaute Barbatruc
Re : Nombre de cellules (cellules fusionnées comptent pour 1) d'une Range

Re,

Autre solution, plus simple, sans Dictionary :

Code:
Function NbCellFus&(r As Range)
NbCellFus = r.Count
For Each r In r
NbCellFus = NbCellFus + (r.Address <> r.MergeArea(1).Address)
Next
End Function
A+
 
Dernière édition:

dionys0s

XLDnaute Impliqué
Re : Nombre de cellules (cellules fusionnées comptent pour 1) d'une Range

Re tout le monde

merci bcp pour vos réponses. Et merci à toi Job pour cette dernière solution. Superbe. D'autant que je travaille sur Mac, donc les solutions avec Dictionary, autant dire que c'est compliqué...
 

Discussions similaires

Réponses
29
Affichages
1 K

Membres actuellement en ligne

Statistiques des forums

Discussions
312 685
Messages
2 090 945
Membres
104 705
dernier inscrit
Mike72