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 ?
26 mars 2012 à 07:47
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
22 mars 2012 à 20:19
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.
22 mars 2012 à 15:08
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
++
19 mars 2012 à 19:32
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.