VBA fusion cellule conditionnelle

Bonjour à tous,

Je suis en train de construire une planning.

En ligne K12 -NL12, j'ai mis des dates journalières.
Je souhaiterais qu'au dessus en ligne L11-NL11, les cellules se fusionnent pour indiquer le mois correspondant uniquement.

la solution est en VBA me semble-t-il mais je ne maîtrise pas.

Je vous remercie pour votre aide précieuse.

Bonne journée

Configuration: Windows / Internet Explorer 11.0

14 réponses

  1. Bonjour,

    Sous Excel (et VBA), la fusion de cellules c'est le début de la catastrophe !
    1
    1. Bonjour,

      Mettre un fichier anonymisé pour une meilleur compréhension

      Slts
      0
      1. Contributeur
        Bonjour,

        j'approuve, éviter les fusions tant qu'on peut.
        Tu peux te contenter de mettre le mois sur la 1ère colonne où il apparait ce qui fera exactement pareil.
        En K11 :
        =K12

        En L11, à tirer vers la droite :
        =SI(OU(K12="";MOIS(K12)<>MOIS(L12));L12;"")

        format de cellule
        mmmm-aa

        eric

        0
        1. Merci pour vos retours.

          La fusion est un souhait de présentation sur un fichier Excel type Gant.

          En K12 -NL12, mes dates peuvent varier en fonction d'une formule que j'ai mis en amont.
          Aussi, pour plus de lisibilité, je souhaite que la ligne au dessus - L11-NL11 -n'indique que le mois.

          Ex : En K12-Z12, j'ai des jours de février, en AA12-BF12, j'ai des jours de mars

          Je souhaite que K11-Z11 soient fusionnées avec indication "FEVRIER"
          que AA11-BF11 soient fusionnées avec indication "MARS
          et ainsi de suite...."

          romanza
          0
          1. Bonjour,

            Avec cette procédure :
            Option Explicit
            Sub FusionnerMois()
            Dim r As Range
            Dim c As Range
            Dim d As Range
               
               Set r = ActiveSheet.Range("K12:NL12")
               With r.Offset(-1)
                 .UnMerge
                 .ClearContents
                 .NumberFormat = "mmmm"
                 .HorizontalAlignment = xlCenter
               End With
               For Each c In r.Cells
                 If d Is Nothing Then
                   Set d = c.Offset(-1)
                   d.Value = c.Value
                 End If
                 If Month(c.Offset(0, 1).Value) <> Month(d.Value) Then
                   ActiveSheet.Range(d, c.Offset(-1)).Merge
                   Set d = Nothing
                 End If
               Next c
               
            End Sub
            0
            1. Bonjour Patrice,

              Merci pour le temps passé.

              Ce qu'il y a c'est que j'ai une barre de défilement des jours associée.

              Je te propose de t'envoyer le fichier mais ici je ne sais pas comment....

              romanza
              0
              1. Bonjour,

                Déposes le fichier avec des commentaires explicatifs sur
                https://mon-partage.fr/
                et mets le lien obtenu dans ton prochain message.
                0
            2. 0
              1. Comme quoi il faut toujours poser la bonne question !!!!
                Les dates ne sont pas en K12:NL12 mais en J11:NK11 et le résultat attendu n'est plus FÉVRIER mais févr-21.

                Ceci dit, la macro fonctionne parfaitement, il suffit d'adapter la plage et le format.

                Au lieu de la plage :
                   Set r = ActiveSheet.Range("K12:NL12")
                
                Il fallait l'adapter :
                   Set r = ActiveSheet.Range("J11:NK11")


                Et au lieu du format :
                     .NumberFormat = "mmmm"

                il suffit de le remplacer par :
                     .NumberFormat = "mmm-yy"


                EDIT : C'est quoi « une barre de défilement des jours associée »
                0
            3. Oui, j'avais adapté pour la plage de cellules.

              Mais si tu utilises la barre de défilement des jours en haut, les mois fusionnés ne suivent pas.
              0
              1. Il faut affecter la macro à la barre de défilement
                et ajouter en début de macro :
                   Application.ScreenUpdating = False


                Et pour plus de fluidité, prévoir d'arrêter les calculs pendant la macro
                0
            4. Merci Patrice cela fonctionne très bien.

              Peux-tu m'indiquer le code pour que les cellules mois soit bordurées
              0
              1. Remplaces :
                       ActiveSheet.Range(d, c.Offset(-1)).Merge

                Par
                       With ActiveSheet.Range(d, c.Offset(-1))
                         .Merge
                         .Borders.Weight = xlThin
                       End With
                0
            5. Merci Patrice

              TOP!!

              Bonne journée

              romanza
              0
              1. Autre souci dont je viens de me rendre compte.

                Quand on filtre avec les segments la correspondance mois ne suit pas.

                Comment peut-on déclencher la macro à partir du filtre segment?
                0
                1. Dans le module de la feuille TCD, ajoutes :
                  Private Sub Worksheet_PivotTableChangeSync(ByVal Target As PivotTable)
                    FusionnerMois
                  End Sub


                  0
                  1. Merci Patrice,

                    Impec!

                    romanza
                    0
                    1. Bonjour Patrice,

                      Je me permets de te solliciter pour mon projet pour lequel je rencontre 2 questions sur l'onglet "Chronologie des tâches"

                      Je te joins le fichier et j'ai mis 2 commentaires sur l'onglet correspondant

                      https://mon-partage.fr/f/tZRhVCpw/

                      Je te remercie d'avance pour ton aide

                      Pascal

                      .
                      0