Vba excel - repérer, compter, supprimer des cellules fusionnées

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 249 fois - Téléchargée 19 fois

Contenu du snippet

Salut

J'ai eu un problème pour exploiter un tableau sous forme de base de données ... les cellules fusionnées ce n'est pas bon pour celà !
Je propose le code VBA suivant pour compter les cellules fusionnées d'une zone, les identifier (message en pop up), et à volonter supprimer la fusion et dans ce cas recopier ou non la valeur de la cellule fusionnée dans les autres cellules ...

--------------------------------------------------------------------------------
On peut :
?ne rien donner comme argument (la recherche se fait autour du point selectionné et les cases fusionnées sont annoncées en pop up)
?préciser une adresse (sous la forme range("F5:H232"))
?le faire taire : a= fusionnées(,False)
?faire séparer les cellules fusionnées : a= fusionnées(,False, True)
?séparer les cellules fusionnées sans recopier la valeur : a= fusionnées(,False, true, false)

--------------------------------------------------------------------------------

Source / Exemple :


Function Fusionnées(Optional MaZone As Range, Optional Verbose As Boolean = True, Optional Clear As Boolean = False, Optional Recopie As Boolean = True)
Dim rg As Range, cl As Range, cll As Range
Dim TempVal
If MaZone Is Nothing Then Set MaZone = ActiveCell.CurrentRegion

Fusionnées = 0
For Each cll In MaZone
    If cll.MergeCells = True Then
        If Verbose Then MsgBox (cll.Address & " est fusionnée dans " & cll.MergeArea.Address)
        If Clear Then
            Set rg = cll.MergeArea
            Fusionnées = Fusionnées + rg.Cells.Count
            'MsgBox Fusionnées
            TempVal = rg.Cells(1, 1).Value
            'MsgBox "a recopier " + CStr(TempVal)
            cll.MergeArea.UnMerge
            If Recopie Then
                For Each cl In rg
                    rg.Value = TempVal
                Next cl
            End If
        Else
        Fusionnées = Fusionnées + 1
        End If
    End If
Next cll
End Function

Conclusion :


plutôt cool non ?

A voir également

Ajouter un commentaire

Commentaires

NHenry
Messages postés
14570
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
21 octobre 2019
136 -
Bonjour,

Je pense que ton code serait mieux sur www.codyx.org.
cs_amydale
Messages postés
18
Date d'inscription
jeudi 3 juin 2004
Statut
Membre
Dernière intervention
4 janvier 2012
-
Bonjour,
L'idée n'est pas bête et ca peut même s'avérer pratique.

Une petite remarque :
# For Each cl In rg
# rg.Value = TempVal
# Next cl
Comprend pas trop l'intéret du for each

++
klhsri
Messages postés
6
Date d'inscription
vendredi 19 octobre 2007
Statut
Membre
Dernière intervention
2 janvier 2009
-
Bonjour,

Je ne connais pas codyx.com, je vais y faire un tour ... Merci.

Pour la boucle "tempval", je cherche juste à permettre de recopier la valeur de la cellule fusionnée dans chaque case constitutive... Ou pas c'est au choix, ... Car quand on supprime la fusion seule la première case prend la valeur et les autres restent vides.
cs_chrisom
Messages postés
4
Date d'inscription
samedi 30 avril 2005
Statut
Membre
Dernière intervention
24 juillet 2005
-
bonjour,
il serait peut-être intéressant de proposer à l'utilisateur de modifier le format cellules fusionnées par centrer sur plusieurs colonnes s'il le souhaite
bonne journée

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.