Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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+
 

Pierrot93

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

Re, bonjour Romain

@Romain
attention, ce code provoquera une erreur, si la fusion des cellules a eut lieu après avoir nommé la plage...

@+
 

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.
 

Pierrot93

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

Re,

A priori, chez moi, bogue si la fusion des cellules est faite après avoir nomée la plage....

bonne journée
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…