Macro VBA : Dé-fusionner et remplir des cellules

Répondre
Partager Rechercher
J'ai récemment récupéré un dossier client pour lequel je reçois des tableurs de dizaines de milliers de lignes avec des cellules fusionnées.

Ces tableurs sont inexploitables en l'état car quand on utilise les filtres Excel il considère que seule la cellule du haut parmi des cellules fusionnées contient une valeur. Les autres sont considérées comme vides.

Pour résoudre ce problème, la personne qui s'en chargeait avant dé-fusionnait et remplissait manuellement le fichier ce qui prend plusieurs jours...

Je vais devoir me pencher à nouveau sur un de ces fichiers lundi et j'aimerais une macro qui me permette sur l'ensemble du tableau de dé-fusionner toutes les cellules et de mettre la valeur de la cellule du haut dans celles qui étaient vides mais je n'arrive pas à la programmer seule.

Je suis sous Excel 2010 ce qui ne doit pas changer grand chose.
Quelqu'un pourrait me programmer une petite macro VBA pour faire ça ou me dire s'il y a une astuce à mettre en œuvre ?

Merci
Quand j'ai ce genre de cas:
1) je défusionne le tout (ctrl-a, click droit: format, alignement: décocher fusion)

2) je copie la première ligne et je la colle juste derrière.
3) je fais une formule qui prend soit la value existante, soit la valeur au-dessus, et je la copie dans les nouvelles colonnes

Par exemple, si ta feuille fait 10 colonnes (A:J), je copie A1:J1 dans K1:T1 et je crée une formule dans la cellule K2: =IF(A2="";K1;A2) (c'est-à-dire: si la cellule A2 est vide, on prend la valeur qui est juste en-dessus, sinon on prend A2). Je copie cette formule partout dans les colonnes K à T

4) Là j'ai mes valeurs. Pour bien finir les choses je prends les colonnes K à T, je les copies comme valeurs dans A:J et j'efface les colonnes K:T désormais obsolètes.

Ca ne m'arrive heureusement (pour moi en tout cas) pas assez souvent pour que j'en fasse une macro.
Miniatures attachées
Cliquez sur l'image pour la voir en taille réelle

Nom : untitled.JPG
Taille : 752x823
Poids : 90,7 Ko
ID : 196524  

Dernière modification par Chernish ; 14/06/2013 à 15h26.
Beaucoup plus simple que mon idée de départ et tout aussi efficace.
J'ai peur que ça mouline un peu sur l'ordinateur du bureau mais ça doit pouvoir se faire facilement depuis chez moi en m'envoyant le fichier.

Un grand merci, je n'avais pas eu l'idée
En cherchant avec google j'ai trouvé cette macro qui fait ce que tu veux :

Sub FindMergedCellsUnmergeThemAndFillThem()
Dim MergedCell As Range, FirstAddress As String, MergeAddress As String, MergeValue As Variant
Application.FindFormat.MergeCells = True
Do
Set MergedCell = ActiveSheet.UsedRange.Find("", LookAt:=xlPart, SearchFormat:=True)
If MergedCell Is Nothing Then Exit Do
MergeValue = MergedCell.Value
MergeAddress = MergedCell.MergeArea.Address
MergedCell.MergeArea.UnMerge
Range(MergeAddress).Value = MergeValue
Loop
Application.FindFormat.Clear
End Sub
Citation :
Publié par Melchiorus
En cherchant avec google j'ai trouvé cette macro qui fait ce que tu veux :

Sub FindMergedCellsUnmergeThemAndFillThem()
Dim MergedCell As Range, FirstAddress As String, MergeAddress As String, MergeValue As Variant
Application.FindFormat.MergeCells = True
Do
Set MergedCell = ActiveSheet.UsedRange.Find("", LookAt:=xlPart, SearchFormat:=True)
If MergedCell Is Nothing Then Exit Do
MergeValue = MergedCell.Value
MergeAddress = MergedCell.MergeArea.Address
MergedCell.MergeArea.UnMerge
Range(MergeAddress).Value = MergeValue
Loop
Application.FindFormat.Clear
End Sub
Je viens de la tester, elle fonctionne correctement. Je verrai ce que ça donne demain sur un ordinateur de bureau avec des milliers de lignes plutôt que sur mon ordinateur avec quelques cellules.
L'avantage de la formule étant que je peux l'utiliser par petits bouts sans que ça ne plante l'ordinateur. Par contre on ne peut pas annuler l'utilisation d'une macro, c'est bon à savoir.

Merci à vous deux.
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés