Cel fusionnées

7 réponses
Avatar
Jacquouille
Bonjour,

Existe-t-il un "truc" pour visionner d'un seul coup toutes les cel
fusionnées d'une feuille (ou une lits écrite du style msgbox?

Déjà merci et bonne soirée.

PS: XL 2003 !!!

Jacques
" Le vin est au repas ce que le parfum est à la femme."
.

7 réponses

Avatar
GL
Le 23/01/2020 à 20:19, Jacquouille a écrit :
Bonjour,
Existe-t-il un "truc" pour visionner d'un seul coup toutes les cel
fusionnées d'une feuille (ou une lits écrite du style msgbox?
Déjà merci et bonne soirée.
PS: XL 2003 !!!
Jacques
" Le vin est au repas ce que le parfum est à la femme."
.

On peut le faire, mais c'est assez compliqué.
La base est la méthode .Find de l'objet Range et l'objet FindFormat
Sub FindMergedCells()
Dim WS As Worksheet, R As Range, C As Range, Addr$
Set WS = ActiveSheet
Application.FindFormat.MergeCells = True
Set C = WS.UsedRange.Find(What:="", SearchFormat:=True)
If C Is Nothing Then Exit Sub
Addr = C.Address
Set R = C
Do
Set R = Union(R, C)
Set C = WS.UsedRange.Find(What:="", After:=C, SearchFormat:=True)
'Debug.Print C.Address
Loop While Not C Is Nothing And C.Address <> Addr
'Debug.Print R.Address
R.Select
End Sub
Voilà.
Avatar
MichD
Le 23/01/20 à 14:19, Jacquouille a écrit :
Bonjour,
Existe-t-il un "truc" pour visionner d'un seul coup toutes les cel
fusionnées d'une feuille (ou une lits écrite du style msgbox?
Déjà merci et bonne soirée.
PS: XL 2003 !!!
Jacques
" Le vin est au repas ce que le parfum est à la femme."
.

Bonjour,
Pour sélectionner toutes les cellules fusionnées en même temps, cette
procédure fait le travail.
À cette ligne de code à la fin de la procédure : Sh.Range(Fusion).Select
La variable "Fusion" doit être limitée à un certain nombre de caractères
probablement 255. Si tu as un très grand nombre de cellules fusionnées
dans la feuille, cela risque de devenir un problème!
Dans la procédure, adapte le nom de la feuille de calcul.
'-----------------------------------------------------
Sub Rechercher_Format_Cellule()
Dim LeCellFormat As CellFormat
Dim Trouve As Range, Adr As String
Dim Sh As Worksheet, Rg As Range, Fusion As String
'Nom feuille à adapter
Set Sh = Worksheets("Feuil1")
Set LeCellFormat = Application.FindFormat
With LeCellFormat
.Clear
.MergeCells = True
End With
With Sh
'Définir la plage de cellules
Set Rg = .UsedRange 'L'ensemble de toute la feuille.
End With
With Rg
Set Trouve = .Find(What:="", _
Searchdirection:=xlNext, _
SearchFormat:=True)
If Not Trouve Is Nothing Then
Adr = Trouve.Address
Do
With Trouve
Fusion = Fusion & Trouve.Address & ","
End With
Set Trouve = .Find(What:="", _
After:=Trouve, SearchFormat:=True)
Loop Until Trouve.Address = Adr Or Trouve Is Nothing
End If
End With
If Fusion <> "" Then
Fusion = Left(Fusion, Len(Fusion) - 1)
Sh.Range(Fusion).Select
End If
End Sub
'-----------------------------------------------------
MichD
Avatar
Jacquouille
Un grand merci à mes deux répondeurs.
Ca va du tonnerre!
Je leur souhaite une bonne soirée.
Jacques
" Le vin est au repas ce que le parfum est à la femme."
.
"Jacquouille" a écrit dans le message de groupe de discussion :
r0crkh$mn2$
Bonjour,
Existe-t-il un "truc" pour visionner d'un seul coup toutes les cel
fusionnées d'une feuille (ou une lits écrite du style msgbox?
Déjà merci et bonne soirée.
PS: XL 2003 !!!
Jacques
" Le vin est au repas ce que le parfum est à la femme."
.
Avatar
MichD
Le 23/01/20 à 16:08, MichD a écrit :
Le 23/01/20 à 14:19, Jacquouille a écrit :
Bonjour,
Existe-t-il un "truc" pour visionner d'un seul coup toutes les cel
fusionnées d'une feuille (ou une lits écrite du style msgbox?
Déjà merci et bonne soirée.
PS: XL 2003 !!!
Jacques
" Le vin est au repas ce que le parfum est à la femme."
.

Bonjour,
Pour sélectionner toutes les cellules fusionnées en même temps, cette
procédure fait le travail.
À cette ligne de code à la fin de la procédure : Sh.Range(Fusion).Select
La variable "Fusion" doit être limitée à un certain nombre de caractères
probablement 255. Si tu as un très grand nombre de cellules fusionnées
dans la feuille, cela risque de devenir un problème!
Dans la procédure, adapte le nom de la feuille de calcul.
'-----------------------------------------------------
Sub Rechercher_Format_Cellule()
Dim LeCellFormat As CellFormat
Dim Trouve As Range, Adr As String
Dim Sh As Worksheet, Rg As Range, Fusion As String
'Nom feuille à adapter
Set Sh = Worksheets("Feuil1")
Set LeCellFormat = Application.FindFormat
With LeCellFormat
    .Clear
    .MergeCells = True
End With
With Sh
    'Définir la plage de cellules
    Set Rg = .UsedRange 'L'ensemble de toute la feuille.
End With
With Rg
    Set Trouve = .Find(What:="", _
            Searchdirection:=xlNext, _
            SearchFormat:=True)
    If Not Trouve Is Nothing Then
        Adr = Trouve.Address
        Do
            With Trouve
                Fusion = Fusion & Trouve.Address & ","
            End With
            Set Trouve = .Find(What:="", _
            After:=Trouve, SearchFormat:=True)
        Loop Until Trouve.Address = Adr Or Trouve Is Nothing
    End If
End With
If Fusion <> "" Then
    Fusion = Left(Fusion, Len(Fusion) - 1)
    Sh.Range(Fusion).Select
End If
End Sub
'-----------------------------------------------------
MichD

Il y a une petite coquille dans le code proposé :
Au lieu de ceci :
'--------------------------------------------
If Fusion <> "" Then
Fusion = Left(Fusion, Len(Fusion) - 1)
Sh.Range(Fusion).Select
End If
'--------------------------------------------
Il faut ajouter cette ligne de code : Sh.Select
Pour pouvoir sélectionner une cellule ou une plage de cellules, la
feuille où se trouvent ces cellules doit être la feuille active sinon la
procédure se plantera. Par conséquent, c'est précaution à prendre.
'--------------------------------------------
If Fusion <> "" Then
Fusion = Left(Fusion, Len(Fusion) - 1)
Sh.Select
Sh.Range(Fusion).Select
End If
'--------------------------------------------
Une autre alternative serait de définir la variable Sh au début de la
procédure comme ceci. La procédure s'appliquerait à toutes les feuilles
de calcul du classeur. La gestion de l'erreur s'applique si la feuille
active était une feuille graphique et quelqu'un essayait d'exécuter la
procédure.
On Error Resume Next
Set Sh = ActiveSheet
If Err <> 0 Then
MsgBox "La feuille active de ce classeur n'est pas une feuille de
calcul. Vérifier."
Exit Sub
End If
MichD
Avatar
Jacquouille
Bonjour Denis
Je suis très honoré par tes scrupules à vouloir bien faire. bravo.
Cependant, je ne comprends pas car, en début de macro, tu dis:
-- Set Sh = Worksheets("Feuil1") --
Pour moi, c'est donc sur la feuille active que la macro travaille.
Mais, cela fonctionne.
Grand merci pour cette précision
Bonne soirée
Jacques
" Le vin est au repas ce que le parfum est à la femme."
.
"MichD" a écrit dans le message de groupe de discussion :
r0f0jr$10v6$
Le 23/01/20 à 16:08, MichD a écrit :
Le 23/01/20 à 14:19, Jacquouille a écrit :
Bonjour,
Existe-t-il un "truc" pour visionner d'un seul coup toutes les cel
fusionnées d'une feuille (ou une lits écrite du style msgbox?
Déjà merci et bonne soirée.
PS: XL 2003 !!!
Jacques
" Le vin est au repas ce que le parfum est à la femme."
.

Bonjour,
Pour sélectionner toutes les cellules fusionnées en même temps, cette
procédure fait le travail.
À cette ligne de code à la fin de la procédure : Sh.Range(Fusion).Select
La variable "Fusion" doit être limitée à un certain nombre de caractères
probablement 255. Si tu as un très grand nombre de cellules fusionnées
dans la feuille, cela risque de devenir un problème!
Dans la procédure, adapte le nom de la feuille de calcul.
'-----------------------------------------------------
Sub Rechercher_Format_Cellule()
Dim LeCellFormat As CellFormat
Dim Trouve As Range, Adr As String
Dim Sh As Worksheet, Rg As Range, Fusion As String
'Nom feuille à adapter
Set Sh = Worksheets("Feuil1")
Set LeCellFormat = Application.FindFormat
With LeCellFormat
.Clear
.MergeCells = True
End With
With Sh
'Définir la plage de cellules
Set Rg = .UsedRange 'L'ensemble de toute la feuille.
End With
With Rg
Set Trouve = .Find(What:="", _
Searchdirection:=xlNext, _
SearchFormat:=True)
If Not Trouve Is Nothing Then
Adr = Trouve.Address
Do
With Trouve
Fusion = Fusion & Trouve.Address & ","
End With
Set Trouve = .Find(What:="", _
After:=Trouve, SearchFormat:=True)
Loop Until Trouve.Address = Adr Or Trouve Is Nothing
End If
End With
If Fusion <> "" Then
Fusion = Left(Fusion, Len(Fusion) - 1)
Sh.Range(Fusion).Select
End If
End Sub
'-----------------------------------------------------
MichD

Il y a une petite coquille dans le code proposé :
Au lieu de ceci :
'--------------------------------------------
If Fusion <> "" Then
Fusion = Left(Fusion, Len(Fusion) - 1)
Sh.Range(Fusion).Select
End If
'--------------------------------------------
Il faut ajouter cette ligne de code : Sh.Select
Pour pouvoir sélectionner une cellule ou une plage de cellules, la
feuille où se trouvent ces cellules doit être la feuille active sinon la
procédure se plantera. Par conséquent, c'est précaution à prendre.
'--------------------------------------------
If Fusion <> "" Then
Fusion = Left(Fusion, Len(Fusion) - 1)
Sh.Select
Sh.Range(Fusion).Select
End If
'--------------------------------------------
Une autre alternative serait de définir la variable Sh au début de la
procédure comme ceci. La procédure s'appliquerait à toutes les feuilles
de calcul du classeur. La gestion de l'erreur s'applique si la feuille
active était une feuille graphique et quelqu'un essayait d'exécuter la
procédure.
On Error Resume Next
Set Sh = ActiveSheet
If Err <> 0 Then
MsgBox "La feuille active de ce classeur n'est pas une feuille de
calcul. Vérifier."
Exit Sub
End If
MichD
Avatar
MichD
Un petit exemple :
Dans un module standard, tu places cette macro :
'-----------------------
Sub Test()
Dim Sh As worksheet
Set Sh = Worksheets("Feuil")
Sh.range("A5").select
End Sub
'-----------------------
Suppose que la feuille active est la feuil2, avec le raccourci clavier
Alt + F8 tu appelles la fenêtre des macros et que tu décides de lancer
la procédure "test", elle va se planter. Cependant si la feuille active
est la feuille "Feuil1" le code va s'exécuter correctement.
Quand plusieurs usagers utilisent le fichier, certains d'entre eux
peuvent être tentés de lancer une macro au hasard sans trop savoir ce
qui va se passer. Cela représente seulement une assurance qu'un code ne
fera pas de dommage à la feuille même lorsque la macro lancée ne
s'applique pas à ladite feuille.. Ce n'est pas un problème si le
classeur ne contient qu'une feuille et qu'une macro... ;-)
MichD
Avatar
Jacquouille
Hé hé,
c'est qu'il a encore raison.
Merci pour ta patience.
Bon WE
Jacques
" Le vin est au repas ce que le parfum est à la femme."
.
"MichD" a écrit dans le message de groupe de discussion :
r0fa26$gdd$
Un petit exemple :
Dans un module standard, tu places cette macro :
'-----------------------
Sub Test()
Dim Sh As worksheet
Set Sh = Worksheets("Feuil")
Sh.range("A5").select
End Sub
'-----------------------
Suppose que la feuille active est la feuil2, avec le raccourci clavier
Alt + F8 tu appelles la fenêtre des macros et que tu décides de lancer
la procédure "test", elle va se planter. Cependant si la feuille active
est la feuille "Feuil1" le code va s'exécuter correctement.
Quand plusieurs usagers utilisent le fichier, certains d'entre eux
peuvent être tentés de lancer une macro au hasard sans trop savoir ce
qui va se passer. Cela représente seulement une assurance qu'un code ne
fera pas de dommage à la feuille même lorsque la macro lancée ne
s'applique pas à ladite feuille.. Ce n'est pas un problème si le
classeur ne contient qu'une feuille et qu'une macro... ;-)
MichD