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 :

fusion de cellules vides avec cellule précédente pleine


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier Avatar de camzo
    Homme Profil pro
    ingénieur en documentation
    Inscrit en
    Décembre 2006
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur en documentation
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 168
    Points : 101
    Points
    101
    Par défaut fusion de cellules vides avec cellule précédente pleine
    Bonjour àtous,

    N'arrivant pas à faire la fusion espérée sous word, je me suis mis à excel. Je vous explique :

    - j'ai un tableau gigantesque avec des cellules qui se répètent dans la même colonne

    | cell 1 |
    --------
    | cell 1 |
    --------
    | cell 1 |
    --------
    | cell 2 |
    --------
    | cell 2 |
    --------


    - j'ai réussi à rendre vides les cellules qui sont une répétition :

    | cell 1 |
    --------
    | vide |
    --------
    | vide |
    --------
    | cell 2 |
    --------
    | vide |
    --------

    - maintenant, il faut que je fusionne la cellules qui a du contenu avec la cellule qui n'en a pas et là, je vois pas...

    je vois un peu mieux maintenant ce qu'il faut demander à la macro :

    si cellule rencontrée = vide
    alors fusion avec cellule du dessus
    dire que le contenu doit être gardé
    vérifier si nouvelle cellule = vide
    si oui : fusion avec celle du dessus
    si non : passer à celle d'après

    voilà... le problème est que je ne suis pas programmeur né...

    donc, si quelqu'un a quelque chose sous la main, il est le bienvenu !!!


    camzo

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Points : 542
    Points
    542
    Par défaut
    bonjour,

    au lieu de fusionner les cellules ne serait il pas plus interssant de supprimer les
    cellules vides lorsque tu fais le tri ?

  3. #3
    Membre régulier Avatar de camzo
    Homme Profil pro
    ingénieur en documentation
    Inscrit en
    Décembre 2006
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur en documentation
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 168
    Points : 101
    Points
    101
    Par défaut
    oui, ce serait pas mal mais j'ai peur que ce soit mauvais pour la suite car mon tableau a plusieurs colonnes et la suppression me gênerait.

    En fait, j'ai :

    | cell 1 | cell 3 |
    ---------------
    | cell 1 | cell 4 |
    ---------------
    | cell 1 | cell 5 |
    ---------------
    | cell 2 | cell 6 |
    ---------------
    | cell 2 | cell 7 |
    ---------------

    et je dois obtenir :

    | grande | cell 3 |
    | cellule |------|
    | num 1 | cell 4 |
    | unique |------|
    | ment | cell 5 |
    -----------------
    | grande | cell 6 |
    | cellule |------|
    | num 2 | cell 7 |
    -----------------

    car le rapport de la cellule 1 aux cellules 3, 4, 5 doivent être conservés

    voilà voilà...

  4. #4
    Membre éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    Par défaut
    Je pense que le code suivant répondra à ton souhait

    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 FusionControlée()
    ' on enlève les message d'alerte d'excel
    Application.DisplayAlerts = False
    'On cherche la dernière ligne de la colonne A,
    'Si tes cellules à fusionner son dans cette colonne
    derli = Columns(1).Find("*", , , , , xlPrevious).Row
    'on initialise la ligne de depart
    ligneDep = 1 'ligne 1 dans cette exemple
    OnContinue:
    cpt = 1
    'Tant que la valeur de la ligne du dessous est égale à la ligne
    'de départ on incrémente le compteur de 1
    While Cells(ligneDep + cpt, 1) = Cells(ligneDep, 1)
       cpt = cpt + 1
    Wend
    'La dernière ligne c'est celle là
    LigneFin = ligneDep + cpt - 1
    'on fusionne
    Range(Cells(ligneDep, 1), Cells(LigneFin, 1)).MergeCells = True
    'on reinitialise la ligne de départ et on recommence
    ligneDep = ligneDep + cpt
    'si la ligne de départ > à la dernière ligne on sort ,sinon on continue
    If ligneDep > derli Then GoTo Fin Else GoTo OnContinue
     
    Fin:
    Application.DisplayAlerts = True
     
    End Sub
    @+

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    J'ai aussi ça qui devrait aller
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub FusionControlée()
    Dim ok As Boolean
    Dim cell As Range
        For Each cell In Range("A2:A" & Range("A65536").End(xlUp).Row)
            ok = cell.Value = ""
            If ok And Cells(cell.Row - 1, cell.Column).Value <> "" Then
                Range(Cells(cell.Row - 1, cell.Column), Cells(cell.Row, cell.Column)).MergeCells = True
            End If
        Next
    End Sub
    Tu adaptes le N° de colonne

    Edit
    Tu peux aussi écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub FusionControlée()
    Dim cell As Range
        For Each cell In Range("A2:A" & Range("A65536").End(xlUp).Row)
            if cell.Value = "" then
                If Cells(cell.Row - 1, cell.Column).Value <> "" Then
                    Range(Cells(cell.Row - 1, cell.Column), Cells(cell.Row, cell.Column)).MergeCells = True
                endif
            End If
        Next
    End Sub

  6. #6
    Membre éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    Par défaut
    Bonsoir ouskel'n'or

    Je n'avais jamais pensé à initialiser une variable booléenne comme ça

    ok = cell.Value = ""

    j'en prends bonne note.

    et ça me semble évident maintenant

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Autant pour moi, je corrige... Pour écrire le code que j'ai effacé, il aurait fallu que je ne lise qu'une ligne sur deux à partir d'une ligne vide. Par contre, ça ça fonctionne aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub FusionControlée()
    Dim ok As Boolean
    Dim cell As Range
        For Each cell In Range("A2:A" & Range("A65536").End(xlUp).Row)
            ok = cell.Value = ""
            ok = ok And Not Cells(cell.Row - 1, cell.Column).Value = Empty
            If ok Then Range(Cells(cell.Row - 1, cell.Column), Cells(cell.Row, cell.Column)) _
            .MergeCells = True
        Next
    End Sub
    Edit
    Inconvénient de la méthode : Un boolean prend autant de place qu'un entier (16 bits)

  8. #8
    Membre régulier Avatar de camzo
    Homme Profil pro
    ingénieur en documentation
    Inscrit en
    Décembre 2006
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur en documentation
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 168
    Points : 101
    Points
    101
    Par défaut
    Bonjour,

    Le monde des documentaliste à l'arrache vous remercie.

    C'EST PARFAIT !!!!

    Merci encore,
    camzo

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 16/04/2014, 11h15
  2. combobox sans doublon (colonne de reference avec cellule vide)
    Par oscar.cesar dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 05/04/2008, 17h08
  3. cellule vide avec collage avec liaison
    Par stephlinternaute dans le forum Excel
    Réponses: 2
    Dernier message: 14/08/2007, 14h53
  4. Problème de fonction avec cellule vide
    Par Samjeux dans le forum Excel
    Réponses: 4
    Dernier message: 14/06/2007, 08h45
  5. [XSL-FO] Table avec cellule vide
    Par JustAGphy dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 12/05/2004, 14h11

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