Macro fusion cellules colonne A selon valeurs colonne B

Mobydoux

XLDnaute Nouveau
Bonjour et merci de m'accueillir parmi vous.
Pourriez-vous m'aider à propos d'une macro que je souhaite créer ? Je ne maîtrise pas le langage VB.

Il s'agirait de fusionner les cellules de la colonne A lorsque les valeurs de la colonne B en face sont identiques.
Exemple en pièce jointe.

Merci d'avance :)
 

Pièces jointes

  • ScreenShot_2011-12-26_133751.png
    ScreenShot_2011-12-26_133751.png
    3.3 KB · Affichages: 85
Dernière édition:

clafouti

XLDnaute Nouveau
Re : Macro fusion cellules colonne A selon valeurs colonne B

Bonjour,

Une tentative de ma part de répondre pour une fois ^^

Le code est intégralement dans le module 1!
 

Pièces jointes

  • fusion.xlsm
    14.6 KB · Affichages: 82
  • fusion.xlsm
    14.6 KB · Affichages: 97
  • fusion.xlsm
    14.6 KB · Affichages: 92

Mobydoux

XLDnaute Nouveau
Re : Macro fusion cellules colonne A selon valeurs colonne B

Je ne parviens pas à intégrer votre solution dans mon tableau. J'ajoute une macro, je colle votre code en essayant d'adapter (cela concerne les colonnes A et B à partir de la ligne 7 et la feuille nommée "WON"). Mais le bouton n'apparait pas et même manuellement, ça ne change rien.


En fait j'ai plus ou moins réussi en changeant les variables à 7 et 8 mais après exécution et fusion des cellules, un problème survient à la ligne :

If Sheets("WON").Cells(j, 1).Value = Sheets("WON").Cells(j - 1, 2).Value Then

"erreur d'exécution 1004"
 
Dernière édition:

Cousinhub

XLDnaute Barbatruc
Re : Macro fusion cellules colonne A selon valeurs colonne B

Bonjour,

Une autre solution, en supposant que tu aies une ligne de titres en première ligne (sinon, tu modifies B2 par B1, et en supposant également que la colonne B soit triée...

Code:
Sub fusion()
Dim Cel As Range
Dim Fus As Object
Dim It
Dim Nbr As Long, Lig As Long
Application.ScreenUpdating = False
Set Fus = CreateObject("Scripting.Dictionary")
Columns(1).Cells.UnMerge
For Each Cel In Range("B2:B" & Cells(Rows.Count, "B").End(xlUp).Row)
    Fus(Cel.Value) = Cel.Value
Next Cel
For Each It In Fus.Items
    Nbr = Application.CountIf(Columns(2), It)
    Lig = Application.Match(It, Columns(2), 0)
    Cells(Lig, 1).Resize(Nbr).Merge
Next It
End Sub
PS : à l'avenir, plutôt qu'une image, pense à joindre un fichier exemple sans données confidentielles

Bonne journée
 
Dernière édition:

Mobydoux

XLDnaute Nouveau
Re : Macro fusion cellules colonne A selon valeurs colonne B

La première solution fonctionnait presque, merci cependant de votre proposition. Je vous joins un fichier sans données confidentielles qui représente exactement la partie du tableau que je souhaite traiter, à partir de la ligne 7 donc.
 

Pièces jointes

  • test_macro_fusion.xls
    39.5 KB · Affichages: 59

Efgé

XLDnaute Barbatruc
Re : Macro fusion cellules colonne A selon valeurs colonne B

Bonjour Mobydoux, clafouti, Bonjour bhbh :),
Un proposition plus basique et certaiment moins rapide que celle de bhbh ..

VB:
Sub test()
Dim i&
With Application: .ScreenUpdating = False: DisplayAlerts = False: End With
With Sheets("Feuil1")
    .Columns(1).UnMerge
    For i = 7 To .Cells(Rows.Count, 2).End(xlUp).Row
        If .Cells(i, 2).Value = .Cells(i - 1, 2).Value Then .Range(.Cells(i, 1), .Cells(i - 1, 1)).Merge
    Next i
End With
With Application: .ScreenUpdating = True: DisplayAlerts = True: End With
End Sub
Cordialement
 

Cousinhub

XLDnaute Barbatruc
Re : Macro fusion cellules colonne A selon valeurs colonne B

Re-,

Bonjour Efgé :D

En commençant en ligne 7, et en supprimant les messages d'alerte, tu peux remplacer par ceci :

Code:
Sub fusion()
Dim Cel As Range
Dim Fus As Object
Dim It
Dim Nbr As Long, Lig As Long
With Application
    .ScreenUpdating = False
    .DisplayAlerts = False
End With
Set Fus = CreateObject("Scripting.Dictionary")
Columns(1).Cells.UnMerge
For Each Cel In Range("B7:B" & Cells(Rows.Count, "B").End(xlUp).Row)
    Fus(Cel.Value) = Cel.Value
Next Cel
For Each It In Fus.Items
    Nbr = Application.CountIf(Columns(2), It)
    Lig = Application.Match(It, Columns(2), 0)
    Cells(Lig, 1).Resize(Nbr).Merge
Next It
End Sub

Bonne journée
 

Discussions similaires

Statistiques des forums

Discussions
312 842
Messages
2 092 732
Membres
105 519
dernier inscrit
faivre-roussel.ivan@orang