Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
    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é

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
 

Mobydoux

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

Merci à vous deux, les deux solutions fonctionnent. Cela facilitera mon travail ainsi que celle de mon équipe. Encore merci et bonne journée
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…