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

0/5 (4 avis)

Snippet vu 7 066 fois - Téléchargée 21 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
cs_chrisom Messages postés 4 Date d'inscription samedi 30 avril 2005 Statut Membre Dernière intervention 24 juillet 2005
26 mars 2012 à 07:47
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
klhsri Messages postés 6 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 2 janvier 2009
22 mars 2012 à 20:19
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_amydale Messages postés 16 Date d'inscription jeudi 3 juin 2004 Statut Membre Dernière intervention 4 janvier 2012
22 mars 2012 à 15:08
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

++
NHenry Messages postés 15083 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 19 septembre 2023 159
19 mars 2012 à 19:32
Bonjour,

Je pense que ton code serait mieux sur www.codyx.org.

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.