fusionner cellules en fonction du contenu sur tout un tableau

  • Initiateur de la discussion Initiateur de la discussion mélissa
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

M

mélissa

Guest
Bonjour à tous,

Dans ma feuille excel j'ai rentré des valeurs dans certaines case et d'autres sont vides. Je souhaiterai créer une macro qui parcourt ma feuille et qui fusionne les cellules si les cellules suivantes sont vides: Dès qu'une case est remplie regarder les cases suivantes et si elles sont vides fusionner avec la case remplie. Si la case suivante n'est pas vide recommencer une nouvelle fusion.( s'arreter en bout de ligne) Pour l'instant j'ai essayé de fusionner des cellules en partant d'une case remplie que je selectionne moi même, mais cela ne fonctionne pas. Je crois que le bug vient de ma méthode While. Quelqu'un pour m'aider?
merci
mélissa
Code:
Dim adresse As String
Dim adressetmp As String
adresse = Selection.Address
Dim ligne As String
Dim colonne As String
Dim nbcolonnes As Variant
nbcolonnes = 1
ligne = Selection.Row
colonne = Selection.Column
tmp = Range(adresse).Next
If IsEmpty(Range(adresse).Next) = True Then

While Range(Range(adresse).Next.Address).Row = ligne Or IsEmpty(Range(Range(adresse).Next.Address).Value) Or Range(Range(adresse).Next.Address).Column < 46
Range(adresse).Next = Range(Range(adresse).Next.Address).Next
'nbcolonnes = nbcolonnes + 1

Wend
Selection.Resize(1, nbcolonnes + 1).Select
'Wend

Range(Selection.Address).Merge
End If
Code:
 
Re : fusionner cellules en fonction du contenu sur tout un tableau

mélissa à dit:
Bonjour à tous,

Dans ma feuille excel j'ai rentré des valeurs dans certaines case et d'autres sont vides. Je souhaiterai créer une macro qui parcourt ma feuille et qui fusionne les cellules si les cellules suivantes sont vides: Dès qu'une case est remplie regarder les cases suivantes et si elles sont vides fusionner avec la case remplie. Si la case suivante n'est pas vide recommencer une nouvelle fusion.( s'arreter en bout de ligne) Pour l'instant j'ai essayé de fusionner des cellules en partant d'une case remplie que je selectionne moi même, mais cela ne fonctionne pas. Je crois que le bug vient de ma méthode While. Quelqu'un pour m'aider?
merci
mélissa
Dim adresse As String
Dim adressetmp As String
adresse = Selection.Address
Dim ligne As String
Dim colonne As String
Dim nbcolonnes As Variant
nbcolonnes = 1
ligne = Selection.Row
colonne = Selection.Column
tmp = Range(adresse).Next
If IsEmpty(Range(adresse).Next) = True Then

While Range(Range(adresse).Next.Address).Row = ligne Or IsEmpty(Range(Range(adresse).Next.Address).Value) Or Range(Range(adresse).Next.Address).Column < 46
Range(adresse).Next = Range(Range(adresse).Next.Address).Next
'nbcolonnes = nbcolonnes + 1

Wend
Selection.Resize(1, nbcolonnes + 1).Select
'Wend

Range(Selection.Address).Merge
End If
Salut
Pour t'aider, il faut un décodeur ? T'es en taule ou sous le soleil des tropique ? 😀

Bon, en plus sérieux, ce que je crois comprendre
tu veux fusionner, ligne par ligne de la colonne A à la colonne IV les cellules vides avec les cellules à leur gauche. :
A1 : "A" / B1 :"A" / K1 : "A"
donnera 3 "cellules fusionnées" ;
[A1], [B1:J1], [K1:IV1]

Quelques questions :
Peut-on se limiter à la plage de travail (UsedRange), ou pour être plus clair, de A1 à la dernière ligne/colonne utilisée ?
Fusionner les 60 000 lignes et 200 colonnes non-utilisées va alourdir un petit peu ton fichier, non ?

C'est bien une fusion sur la ligne ?
Une fusion par plage (ligne/colonne) me semble compliquée, et laisserait obligatoirement des cellules vides orphelines.

Que doit-on faire pour le cas des lignes commençant par des cellules vides ?
La ligne 2 est vide jusqu'à la colonne F
On laisse les cellules A2:E2, ou on les fusionnes

La macro doit-elle être exploitable une deuxième fois ?
Une modification de valeurs sur certaines cellules : effacement ou dé-fusion (c'est français ça ?!? 😕 ) et affectation de valeurs, doit permettre de relancer la macro sans dé-fuionner (je persiste) toute la plage avant, et se retrouver avec la mise en forme prévue.
Code:
Sub test()
Dim Cel As Range
UsedRange.Cells.UnMerge
'On supprime les regroupements
For Each Cel In ActiveSheet.UsedRange
'Pour chaque cellule de la plage de travail de la feuille active
    If Cel.Column > 1 And IsEmpty(Cel) Then _
        Range(Cel, Cel.Offset(0, -1)).Merge
    'si la colonne de la cellule n'est pas A et qu'elle est vide
    'la fisionner avec la cellule de gauche
Next Cel
'cellule suivante
End Sub

A+
 
Dernière édition:
Re : fusionner cellules en fonction du contenu sur tout un tableau

tu veux fusionner, ligne par ligne de la colonne A à la colonne IV les cellules vides avec les cellules à leur gauche. :
A1 : "A" / B1 :"A" / K1 : "A"
donnera 3 "cellules fusionnées" ;
[A1], [B1:J1], [K1:IV1]

C'est ça sauf que je ne peux pas déterminer à l'avance dans le code vba quelles cellules seront remplies(B1, K1). seul A1 est sure d'etre remplie

Quelques questions :
Peut-on se limiter à la plage de travail (UsedRange), ou pour être plus clair, de A1 à la dernière ligne/colonne utilisée ?
Fusionner les 60 000 lignes et 200 colonnes non-utilisées va alourdir un petit peu ton fichier, non ?
Oui, je peux délimiter la plage de travail elle va de B4 à AR21( Range("B4:AR21"))

C'est bien une fusion sur la ligne ?
Oui, mais je veux qu'à la fin de la ligne la macro passe à la ligne suivante. sachant que la première cellule de chaque ligne est obligatoirement remplie.

Une fusion par plage (ligne/colonne) me semble compliquée, et laisserait obligatoirement des cellules vides orphelines.

Que doit-on faire pour le cas des lignes commençant par des cellules vides ?
La ligne 2 est vide jusqu'à la colonne F
On laisse les cellules A2:E2, ou on les fusionnes
Cas impossible!!!! la colonne A ne sera jamais vide.

La macro doit-elle être exploitable une deuxième fois ?
Une modification de valeurs sur certaines cellules : effacement ou dé-fusion (c'est français ça ?!? 😕 ) et affectation de valeurs, doit permettre de relancer la macro sans dé-fuionner (je persiste) toute la plage avant, et se retrouver avec la mise en forme prévue.
Code:
En fait ma feuille excel est un planning mis à jour toutes les semaines, les données changent donc chaque semaine. Donc non la macro ne doit etre utilisée qu'une seule fois.
Je n'ai pas encore essayé le code que tu m'as envoyé. Si j'ai un problème es tu connecté et disponible cet aprem et demain(vendredi)?
merci beaucoup pour ton aide

Mélissa
 
Re : fusionner cellules en fonction du contenu sur tout un tableau

Ton code marche très bien merci. Sauf que :

A1 : "A" / D1 :"B" / K1 : "C"
Donc ton code fusionne bien les cellules A1,B1,C1 ainsi que les cellules D1,E1,F1,G1 mais ne fusionne pas K1,L1...,dernière cellule de la plage. Comment faire?
Existe t'il une méthode qui permet de fusionner et CENTRER ?

merci mélissa
 
Re : fusionner cellules en fonction du contenu sur tout un tableau

C'est encore moi, je suis déchainée aujourd'hui niveau message🙂 .
En fait ca ne fusionne pas à partir de K1 car je suppose que K est considérée comme la dernière colonne de la plage active.
 
Re : fusionner cellules en fonction du contenu sur tout un tableau

mélissa à dit:
C'est encore moi, je suis déchainée aujourd'hui niveau message🙂 .
En fait ca ne fusionne pas à partir de K1 car je suppose que K est considérée comme la dernière colonne de la plage active.
Salut
Bon, on sait ou on va :
Code:
[LEFT]Sub test()
Dim Cel As Range
range("B4:AR21").Cells.UnMerge
'On supprime les regroupements des cellules de la plage B4:AR21
For Each Cel In range("B4:AR21")
'Pour chaque cellule de la plage B4 à AR21
    If IsEmpty(Cel) Then Range(Cel, Cel.Offset(0, -1)).Merge
    'si la colonne de la cellule n'est pas A et qu'elle est vide
    'la fisionner avec la cellule de gauche
Next Cel
'cellule suivante
End Sub
On peut aussi modifier

range("B4:AR21").Cells.UnMerge
For Each Cel In range("B4:AR21")

en le remplaçant par
range("B4:AR" & [A65536].end(xlup).row).Cells.UnMerge
For Each Cel In range("B4:AR" & [A65536].end(xlup).row)
Puisqu'on sait que la colonne A n'est jamais vide, on détermine la dernière ligne à traiter comme étant celle de la première cellule non-vide de A en partant de la ligne 65536 et en remontant

A+​
[/LEFT]
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Retour