IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Macro fusion des cellules vides au dessous d'une cellule non vide


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club Avatar de Yuna-
    Femme Profil pro
    Coordinatrice SIRH
    Inscrit en
    Mars 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Coordinatrice SIRH
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2016
    Messages : 12
    Points : 6
    Points
    6
    Par défaut Macro fusion des cellules vides au dessous d'une cellule non vide
    Bonjour,

    Je joins un tableau dans lequel je voudrai intégrer une petite maccro pour simplifier la vie de ma collègue. Pour ma part j'ai beaucoup de mal à écrire mes maccros moi même (je me contente d'en déchiffrer le langage et modifier deux trois lignes, mais dans la pratique je ne sais pas en créer une de A à Z) et c'est pourquoi il me faut de l'aide.

    Je voudrais une maccro qui fusionne dans une même colonne une cellule non vide avec les cellules vide du dessous (et qui s'arrête à la prochaine cellule non vide pour recommencer).

    Par rapport à mon tableau cela voudrait dire :
    - fusionner A2:A5, B2:B5 ... idem jusqu'à la colonne H (inclus)
    - fusionner A6:A9, B6:B9... Idem toujours jusqu'à la colonne H

    Cela ne concerne que les colonnes de A à H. Je pense aussi qu'il faut s'arrêter peut être à la dernière ligne non vide pour que la dernière ligne ne soit pas fusionné avec les 60k de cellules vides restantes à la fin du tableau

    Est-ce que quelqu'un peut m'aider ?
    Je sais bien que beaucoup de personne n'aime pas la fonction fusionner sous excel mais j'ai besoin que ce document soit lisible

    Merciii
    Fichiers attachés Fichiers attachés

  2. #2
    Membre averti Avatar de Kiouane
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 198
    Points : 394
    Points
    394
    Par défaut
    Je te propose de t'inspirer de ce début d'idée


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For Each cell In Range(Ta colonne)
    If Not IsEmpty(cell) Then
    Range(cell, Cells(cell.End(xlDown).Row - 1, Numérodetacolonne)).Merge
    End If
    Next

  3. #3
    Futur Membre du Club Avatar de Yuna-
    Femme Profil pro
    Coordinatrice SIRH
    Inscrit en
    Mars 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Coordinatrice SIRH
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2016
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Bonjour Kiouane,

    Pour commencer merci.

    C'est pas mal mais je pense que je dois avoir un souci avec la ligne en rouge

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub d()
    For Each cell In Range("A2:H600")
    If Not IsEmpty(cell) Then
    Range(cell, Cells(cell.End(xlDown).Row - 1, 1)).Merge
    End If
    Next
    
    End Sub
    La réaction de la maccro est la suivante :
    - Fusion de A2 : A6 comme prévu (donc A7 est non vide la maccro s'arrête tout va bien).
    - puis après avoir fusionné A2:A6 ça va fait A2:B6 et ainsi de suite jusqu'à H (j'espère que je suis claire, ce n'est pas évident à expliquer)

    Je pense que j'ai du louper quelque chose ???

  4. #4
    Membre averti Avatar de Kiouane
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 198
    Points : 394
    Points
    394
    Par défaut
    C'est normal car le code que je t'ai donné est pour faire le traitement d'une colonne. A toi de l'adapter pour une plage de données.

  5. #5
    Futur Membre du Club Avatar de Yuna-
    Femme Profil pro
    Coordinatrice SIRH
    Inscrit en
    Mars 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Coordinatrice SIRH
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2016
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    J'ai essayé ceci pour adapter à une plage de données mais visiblement je ne maîtrise pas "dernligne et derncolonne" un petit coup de pousse svp ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Sub d()
     
    Worksheets("test").Activate
     
    Dim maPlage As Range
    Dim DernLigne As Long, DernColonne As Integer
     
    DernColonne = Cells(8, Cells.Columns.Count).End(xlToLeft).Column
    Set maPlage = Range(Cells(1, 1), Cells(DernLigne, DernColonne))
     
    For Each Cell In maPlage
    If Not IsEmpty(Cell) Then
    Range(Cell, Cells(Cell.End(xlDown).Row - 1, 1)).Merge
     
    End If
    Next
     
    End Sub

  6. #6
    Membre averti Avatar de Kiouane
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 198
    Points : 394
    Points
    394
    Par défaut
    Voilà un code adapté à ton fichier posté hier. Mais je suis sûr qu'il y a mieux à faire. C'est juste pour te dépanner.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Sub d()
    Application.ScreenUpdating = False
     
    Application.DisplayAlerts = False
     
    Dim maPlage As Range
    Dim DernLigne As Long, DernColonne As Integer
     
    DernLigne = Range("I" & Rows.Count).End(xlUp).Row - 1 'Pour avoir le bon numéro de ta dernière ligne j'ai pris la colonne i où il y a le plus de données
    DernColonne = Range("A1").End(xlToRight).Column
    Set maPlage = Range(Cells(2, 1), Cells(DernLigne, DernColonne))
     
    For Each cell In Range(Cells(DernLigne + 1, 1), Cells(DernLigne + 1, DernColonne))
    cell.Value = "X"
    Next
     
    For Each cell In maPlage
    If Not IsEmpty(cell) Then
    Range(cell, Cells(cell.End(xlDown).Row - 1, cell.Column)).Merge
    End If
    Next
     
    Cells(DernLigne + 1, 1).EntireRow.Delete
     
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
     
     
    End Sub

  7. #7
    Futur Membre du Club Avatar de Yuna-
    Femme Profil pro
    Coordinatrice SIRH
    Inscrit en
    Mars 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Coordinatrice SIRH
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2016
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Merci, on s'en rapproche, reste à arrêter la macro en "H" !
    J'ai envoyé ton code à un copain pour la suite je pense qu'il y arrivera bien mieux que moi.

    Je posterai la solution évidemment

  8. #8
    Membre averti Avatar de Kiouane
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 198
    Points : 394
    Points
    394
    Par défaut
    Pour t'arrêter à H remplace Derncolonne par le numéro de la colonne H => 8.

  9. #9
    Futur Membre du Club Avatar de Yuna-
    Femme Profil pro
    Coordinatrice SIRH
    Inscrit en
    Mars 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Coordinatrice SIRH
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2016
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Alors le copain en question a tout refait à sa sauce visiblement.
    De mon côté je vais essayé de comprendre ce que ça dit par mais en tout cas ça fonctionne super bien

    Je poste la solution, ça peut en aider certains :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    Sub d()
    Dim RowHeight As Integer
    Dim CurrentRow As Integer
     
     
     
        RowHeight = 1 'Nombre de ligne a fusionner
     CurrentRow = 2 'Ligne de départ
     ColMax = 8 'H
     
     MaxRow = 100 'Bloque la fin du tableau
     
    CellTest = Range(Cells(CurrentRow, 1), Cells(CurrentRow, 1)).Value
    While CellTest <> ""
    RowHeight = 1
     
    CellTest1 = Range(Cells(CurrentRow + RowHeight, 1), Cells(CurrentRow + RowHeight, 1)).Value
    CellTest2 = Range(Cells(CurrentRow + RowHeight, ColMax + 1), Cells(CurrentRow + RowHeight, ColMax + 1)).Value
    'Cherche le nombre de ligne
    While CellTest2 <> "" And CellTest1 = ""
     
    RowHeight = RowHeight + 1
     
     
    CellTest1 = Range(Cells(CurrentRow + RowHeight, 1), Cells(CurrentRow + RowHeight, 1)).Value
    CellTest2 = Range(Cells(CurrentRow + RowHeight, ColMax + 1), Cells(CurrentRow + RowHeight, ColMax + 1)).Value
     
    Wend
    RowHeight = RowHeight - 1
     
    For Col = 1 To ColMax
    Range(Cells(CurrentRow, Col), Cells(CurrentRow + RowHeight, Col)).Merge
    Next Col
     
    CurrentRow = CurrentRow + RowHeight + 1
    CellTest = Range(Cells(CurrentRow, 1), Cells(CurrentRow, 1)).Value
    Wend
     
    End Sub

    En tout cas merci Kiouane pour ton temps et tes bonnes idées

  10. #10
    Membre averti Avatar de Kiouane
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 198
    Points : 394
    Points
    394
    Par défaut
    Avec plaisir !

    Cependant j'ai bien lu la macro de ton ami. Et j'ai quelques remarques :
    1/ La macro est adapté à la mise en forme de ton fichier certes, mais si tu passes sur une autre mise en forme, tu n'auras pas le résultat escompté. C'est à dire fusionner toute cellule d'une plage quelconque de données avec les cellules vides qui se trouvent en dessous.
    2/Il y a des écritures non nécessaires dans le code.
    3/ Tu peux éviter le message d'alerte au début. Voici un code allégé et sans message d'alerte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    Sub d()
    Dim RowHeight As Integer
    Dim CurrentRow As Integer
     
     Application.DisplayAlerts = False
     
     RowHeight = 1 'Nombre de ligne a fusionner
     CurrentRow = 2 'Ligne de départ
     ColMax = 8 'H
     
     MaxRow = 100 'Bloque la fin du tableau
     
    CellTest = Cells(CurrentRow, 1).Value
     
    While CellTest <> ""
     
    CellTest1 = Cells(CurrentRow + RowHeight, 1).Value
    CellTest2 = Cells(CurrentRow + RowHeight, ColMax + 1).Value
    'Cherche le nombre de ligne
     
           While CellTest1 = "" And CellTest2 <> ""
     
           RowHeight = RowHeight + 1
     
     
           CellTest1 = Cells(CurrentRow + RowHeight, 1).Value
           CellTest2 = Cells(CurrentRow + RowHeight, ColMax + 1).Value
     
           Wend
     
                RowHeight = RowHeight - 1
     
                For Col = 1 To ColMax
                Range(Cells(CurrentRow, Col), Cells(CurrentRow + RowHeight, Col)).Merge
                Next Col
     
                CurrentRow = CurrentRow + RowHeight + 1
                CellTest = Cells(CurrentRow, 1).Value
    Wend
     
      Application.DisplayAlerts = True
     
    End Sub
    Et enfin si tu modifies dans mon code Derncol = 8 il fera parfaitement ce dont tu as besoin et il est adaptable pour toute plage de données quelque soit la mise en forme.

  11. #11
    Futur Membre du Club Avatar de Yuna-
    Femme Profil pro
    Coordinatrice SIRH
    Inscrit en
    Mars 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Coordinatrice SIRH
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2016
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Merci, je pars sur celui ci alors
    Je pense vraiment que ce genre de code dans mon travail resservira, on aime multiplier les tableaux dans les ressources humaines

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 28/10/2015, 17h20
  2. Réponses: 2
    Dernier message: 13/05/2014, 20h58
  3. [XL-2003] VBA supprimer des ligne selon la date d'une cellule
    Par Scrabblouille dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/08/2009, 22h37
  4. Réponses: 3
    Dernier message: 16/10/2007, 16h25
  5. Supprimer toutes les lignes en dessous d'une cellule
    Par liop49 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 22/08/2007, 13h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo