XL 2016 défusionner une cellule et dupliquer la valeur dans toutes les cellules

shadok974

XLDnaute Nouveau
Bonjour
J'aimerais avoir une solution pour que lors d'une défusion de cellule, la valeur dans la dite cellule se duplique à toutes les celles crées.
Pouvez vous m'aidez. svp
merci beaucoup d'avance.
 

Phil69970

XLDnaute Barbatruc
Bonjour @shadok974 et bienvenu sur XLD

Je te propose de regarder la réponse ici

Le moteur de recherche du forum sont une mine d'or ne pas hésiter à s'en servir en haut à droite

1697818572935.png


Merci de ton retour
 

shadok974

XLDnaute Nouveau
bonjour
je suis effectivement tombé sur ce topic,

Sub defusionner()
Dim Cel As Range
Dim I As Byte
For Each Cel In ActiveSheet.UsedRange
If Cel.MergeCells Then
I = Cel.MergeArea.Cells.Count
Cel.UnMerge
Cel.Resize(1, I).Value = Cel.Value
End If
Next Cel
End Sub

j'ai appliquer cette macro avant de poster mon message et la je viens de juste déterminer de corriger les dégâts que cela a occasionné. (je ne savais pas que l'on ne pouvait pas annuler les effets d'une macro^^ par un Ctrl+Z).

et cela ne fonctionne pas. je ne fait peut être pas ce qu'il faut
 

Phil69970

XLDnaute Barbatruc
@shadok974
Quand tu fais des essais fais les sur une copie
Poste un fichier représentatif et on fera la macro

C'est quoi représentatif ?

- représentatif, même organisation des lignes et des colonnes, mêmes libellés, mêmes noms de feuilles...
- anonymisé, pas de données personnelles réelles tels nom, n° sécu, adresse ... remplacé par Nom1, Nom2 etc ....
- simplifié, une quinzaine de lignes reproduisant l'ensemble des différents cas envisageables (Avec le résultat souhaité éventuellement)
 

shadok974

XLDnaute Nouveau
j'aimerais défusionner la colonne 1 (qui me sert à faire des suites de dates sans perdre ma mise en page), et que les dates apparaissent dans chaque cellule défusionnée, si possible. (sans bordure intérieure)

la feuille contient déjà un macro, pour annuler les mises en page des copier coller (pour infos)

Sub PasteasValue()
Selection.PasteSpecial Paste:=xlPasteValues
End Sub
 

Pièces jointes

  • Classeur2EDL.xlsx
    15.9 KB · Affichages: 3

shadok974

XLDnaute Nouveau
Re Bonjour
tout d'abord merci énormément de ta réponse et de ta réactivité.
tu trouveras mon fichier en totalité (pour te faire une idée de mon soucis), j'y ai recopier, modifier les lignes, et ajouter ton code.
cela demande donc une petite manip du code, si ajout de ligne dans le fichier.

peut on imaginer une adaptation du code qui prendrai en compte automatiquement, toute nouvelle création de ligne? et même à me laisser la dernière semaine pour ne pas perdre la mise en page fusionné (qui facilite l'ajout de ligne).

cela est il possible ?
en tout cas un énorme merci
 

Pièces jointes

  • BDD planning 21-10-23.xlsm
    189.4 KB · Affichages: 4

Phil69970

XLDnaute Barbatruc
@shadok974

Remarque :
La colonne A prend en compte le samedi et dimanche à partir de la ligne 64 est ce normal ? (voir marque jaune que j'ai fait pour repere ligne 64 )
==> Pas certain d’après les 64 premières lignes.
==> Tu veux garder la dernière semaine mais fait elle 5 ou 7 jours !! 🤔
====> Je suis parti sur une semaine de 5 jours du lundi au vendredi ;)
====> A toi de faire le ménage pour supprimer les samedi et dimanche inutiles

Voici la V2

La macro défusionne toute la colonne A sauf les 5 derniers jours
==> voir ma remarque

Merci de ton retour
 

Pièces jointes

  • Defusionner V2.xlsm
    170.1 KB · Affichages: 1

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous :),

Ma p'tite version qui doit permettre d'avoir des cellules fusionnées de hauteur variable.
Le code est dans module1.
VB:
Sub defusionner()
Dim der&, i&, n&
   Application.ScreenUpdating = False
   With ActiveSheet
      'dernière ligne
      If .FilterMode Then .ShowAllData
      der = .Cells(Rows.Count, "a").End(xlUp)
      'recherche dernière cellule fusionnée
      For i = der To 2 Step -1
         If .Cells(i, 1).MergeCells Then Exit For
      Next i
      'si i = 1 pas de cellule fusionnée
      If i = 1 Then Exit Sub
      'prochaine ligne à examiner (on saute la dernière ligne avec fusion)
      i = i - .Cells(i, 1).MergeArea.Cells.Count + 1
      For i = i - 1 To 2 Step -1
         If .Cells(i, 1).MergeCells Then
            n = .Cells(i, 1).MergeArea.Cells.Count    'nombre de lignes de la cellule fusionnée
            .Cells(i, 1).UnMerge                      'on dé-fusionne
            'on affecte aux cellules de l'ex-plage fusionnée la bonne valeur
            .Cells(i, 1).Offset(-n + 1).Resize(n) = .Cells(i, 1).Offset(-n + 1).Value
         End If
      Next i
   End With
End Sub
 

Pièces jointes

  • shadok974- BDD planning - v1.xlsm
    296.6 KB · Affichages: 0

shadok974

XLDnaute Nouveau
@shadok974

Remarque :
La colonne A prend en compte le samedi et dimanche à partir de la ligne 64 est ce normal ? (voir marque jaune que j'ai fait pour repere ligne 64 )
==> Pas certain d’après les 64 premières lignes.
==> Tu veux garder la dernière semaine mais fait elle 5 ou 7 jours !! 🤔
====> Je suis parti sur une semaine de 5 jours du lundi au vendredi ;)
====> A toi de faire le ménage pour supprimer les samedi et dimanche inutiles

Voici la V2

La macro défusionne toute la colonne A sauf les 5 derniers jours
==> voir ma remarque

Merci de ton retour
merci beaucoup c'est parfait.
je suis sur des semaines de 7 sept jours , (le début du tableau n'est pas bon)
j'ai donc modifier ton code pour -63 au lieu de -37 et cela fonctionne très bien. (d'ailleurs je ne comprends pas pourquoi -37 de base, 37 étant le nb de lignes )?

Sub defusionner()
Application.ScreenUpdating = False
Dim Cel As Range, I As Byte, Derlig&
Derlig = Range("A" & Rows.Count).End(xlUp).Row - 63 ' -1 si tu veux garder que le dernier jour

For Each Cel In Range("A2:A" & Derlig)
If Cel.MergeCells Then
I = Cel.MergeArea.Cells.Count
Cel.UnMerge
Cel.Resize(I, 1).Value = Cel.Value
End If
Next Cel
End Sub

Je pense que l'affaire est réglée,
merci encore une fois

@mapomme, je préfère garder une hauteur fixe , merci à toi .
 

Phil69970

XLDnaute Barbatruc
Bonjour @mapomme ;)

@shadok974

Pourquoi 37 c'est simple pour une semaine de 5 jours du lundi au vendredi
C'est pour avoir la dernière ligne de la semaine précédente

Rappel pour excel dans une plage fusionnée celle qui est remplie est la première ligne de la plage fusionnée
Donc ici la ligne 2558

1697881594216.png


Tu as 2566 lignes au total mais la dernière ligne remplie pour excel est la ligne 2558 pour connaitre la dernière ligne de la semaine précédente tu enlèves 37 et tu es à la ligne 2521 c'est bien la fin de la semaine précédente ==> 2558 - 2521 = 37
Calculé d'une autre manière : ==> 1 + (4 jours * 9 lignes fusionnées) = 37

1697881760280.png
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 207
Messages
2 086 247
Membres
103 163
dernier inscrit
Pelaez