VBA retirer fusion cellule et copier date dans cellule vide

Bonjour,

J'ai ce fichier excel anciennement en pdf que j'ai converti.

J'ai besoin que dans chaque table si c'est possible une macro défusionne les cellules fusionnées dans la colonne A et copie les dates dans les lignes vides en dessous… et si c'est possible, que le code aille dans la table précédente pour aller chercher la date correspondante. Par exemple, dans la table 2, la date qui doit s'intégrer dans les lignes 4 à 11 se trouve dans la table 1.

Je demande peut-être la lune, mais à force de travailler sur Excel, j'ai l'impression que rien n'est impossible et qu'il ya toujours une solution

Merci d'avance,

Fabricr

Bonjour,

voici la solution si j'ai compris (il faut exécuter la macro)

Bonjour Vince 911,

Merci pour l'aide.

Dans l'esprit c'est ca. Mais il faudrait que je puisse enlever la fusion de toutes les cellules où il y a une date et copier cette date dans les cellules vides en dessous.

Par exemple dans la table 1, défusionner toutes les cellules de la colonne A et copier 08/05 de la ligne 5 à 14, puis copier le 09/05 de la ligne 16 à 25 etc... dans chaque table

La difficulté c'est que je souhaite utiliser ce code pour d'autres classeurs exportés qui n'auront pas toujours le même nombre de lignes au niveau des dates. C'est pour cela que je cherche un code permettant de copier une cellule non vide dans les cellules vides du dessous si c'est possible.

Pour la première date de la table 2, comme c'est la suite de la dernière date de la table 1, il faudrait que le code me permette d'aller chercher cette dernière date de la table 1 pour la copier, car il n'a pas trouvé de date dans les 1ère lignes de la table…

En essayant d'expliquer j'ai l'impression que c'est vraiment tordu comme requête

Voici une autre solution mais pas très rapide car il faut créer le code pour chaque date (donc autant le faire à la main)

pour moi le problème réside dans le fait que chaque sélection change de taille et de table

Bonjour,

Sub DéfusionnerDates()
    Dim f%, n%, i%, nc%, d
    If Worksheets(1).Range("A4") = "" Then
        MsgBox "Pas de date sur première feuille !", vbCritical, "Erreur"
        Exit Sub
    End If
    Application.ScreenUpdating = False
    For f = 1 To Worksheets.Count
        With Worksheets(f)
            n = .Cells.SpecialCells(xlCellTypeLastCell).Row
            If .Range("A3").MergeCells Then
                .Range("A3").MergeArea.UnMerge
                .Columns("B").Delete
                .Columns("A").ColumnWidth = 13.67
            End If
            For i = 4 To n
                With .Cells(i, 1).MergeArea
                    nc = .Rows.Count
                    If .Cells(1, 1) <> "" Then d = .Cells(1, 1).Value
                    .MergeCells = False
                End With
                .Cells(i, 1).Resize(nc).Value = d
                i = i + nc - 1
            Next i
            .Range("A4:A" & n).Font.Size = 8
        End With
    Next f
End Sub

La macro est à lancer à partir de la boîte de dialogue Macro, mais tu pourras la raccorder à un bouton ou la doter d'un raccourci clavier, à ta convenance...

Elle prend en compte 2 particularités qui intéressaient la colonne A :

  • la différence de taille de police lorsqu'il n'y avait pas de mention, de façon à aligner la taille,
  • la fusion de colonnes apparaissant sur la table 42, pour l'éliminer (mais pas les fusions d'autres colonnes dans la même table... )

Cordialement.

Hello MFerrand,

j'etais en train de bosser sur le fichier de fapass pour enlever la fusion sur la colonne A de chaque feuilles via le code suivant

Sub Macro1()

Dim sh As Worksheet

For Each sh In ThisWorkbook.Worksheets

    Range("A:A").Select
    Selection.UnMerge

Next sh
End Sub

La fusion de la colonne A de ma première feuille est bien retirée, mais pas à partir de la 2eme feuille ... tu sais me dire pourquoi ?

alors que le code suivant me renvoie bien le nom de chaque feuilles ... :

Sub Macro1()

Dim sh As Worksheet

For Each sh In ThisWorkbook.Worksheets

    MsgBox Ws.Name

Next sh
End Sub

Bonjour,

For Each sh : il faut te servir de sh, sinon tu t'adresses en permanence à la feuille active.

eric

il faut te servir de sh

ça se traduit par quoi dans mon cas ?

Bonjour Rag, Salut Eric !

Et si tu testes Ws.Name avec sh comme variable de boucle, le résultat ne sera pas là non plus !

Non erreur de recopie

mais que manque - t -il dans ce code pour pouvoir enlever les fusions dans chaque colonne A de chaque feuilles ?

Sub Macro1()

Dim sh As Worksheet

For Each sh In ThisWorkbook.Worksheets

    Range("A:A").Select
    Selection.UnMerge

Next sh
End Sub

Comme te l'a indiqué Eric, utiliser Range sans référer à une feuille tu réfères à la feuille active, donc toujours la même !

sh.Range("A:A")

définira de quelle feuille il s'agit.

Et il est inutile de sélectionner. On le dit sans cesse !

Tu risques encore d'avoir quelques surprises, mais teste donc pour voir !

En effet ... le code suivant génère une erreur 1004 "la methode select de la classe range a echoué"...

Tu sais me l'expliquer stp ?

Sub Macro1()

Dim sh As Worksheet

For Each sh In ThisWorkbook.Worksheets

    sh.Range("A:A").Select
    Selection.UnMerge

Next sh
End Sub

Merci à tous, merci MFerrand,

Vous êtes vraiment des génies d'Excel

Je vais de ce pas tester tout ça pour mes besoins…

Bonne soirée,

Fabrice

@Rag : Oui ! Pour sélectionner une plage, il te faut d'abord activer la feuille (ou la sélectionner), sinon Excel refuse !

Tu vois que ça complique de vouloir sélectionner !

Oui je vois Merci pour tes lumières

Rechercher des sujets similaires à "vba retirer fusion copier date vide"