[VBA] Etendre une macro sur colonne

Bonjour,

D'abord j'ai un niveau débutant en programmation donc en VBA aussi.

Mais je suis sur que la difficulté que je rencontre est très simple pour quelqu'un d'initié.

Voila je fais une macro qui va concatener et me mettre en forme comme je voudrais dans la cellule concatenée.

Sub ConcatGras()

Cells(2, 1).Value = Cells(2, 2).Value & Cells(2, 3).Value & Cells(2, 4).Value & Cells(2, 5).Value

Cells(2, 1).Characters(Start:=1, Length:=Len(Cells(2, 2).Value)).Font.ColorIndex = xautomatic

Cells(2, 1).Characters(Start:=Len(Cells(2, 2).Value) + 1, Length:=Len(Cells(2, 3).Value)).Font.Bold = True

Cells(2, 1).Characters(Start:=Len(Cells(2, 2).Value) + Len(Cells(2, 3).Value) + 1, Length:=Len(Cells(2, 4).Value)).Font.Bold = True

Cells(2, 1).Characters(Start:=Len(Cells(2, 2).Value) + Len(Cells(2, 3).Value) + Len(Cells(2, 4).Value) + 1, Length:=Len(Cells(2, 5).Value)).Font.ColorIndex = xautomatic

End Sub

Donc ca me concatène B2 C2 D2 E2 et ca me met en gras ce qu'il y avait dans C2 et D2.

Jusque la pas de soucis ca fonctionne, mais je voudrais que ca le fasse jusqu'en bas de ma page excel, du moins jusqu'a ce qu'il y ait quelque chose dans mes cellules et pour moi ca se complique.

Alors je crois qu'on peut le faire de cette facon :

Sub ConcatGras()

Dim Cel_C As Range

Range("A2:A" & Range("A65536").End(xlUp).Row).Select

For Each Cel_C In Selection

Cells(2, 1).Value = Cells(2, 2).Value & Cells(2, 3).Value & Cells(2, 4).Value & Cells(2, 5).Value

Cells(2, 1).Characters(Start:=1, Length:=Len(Cells(2, 2).Value)).Font.ColorIndex = xautomatic

Cells(2, 1).Characters(Start:=Len(Cells(2, 2).Value) + 1, Length:=Len(Cells(2, 3).Value)).Font.Bold = True

Cells(2, 1).Characters(Start:=Len(Cells(2, 2).Value) + Len(Cells(2, 3).Value) + 1, Length:=Len(Cells(2, 4).Value)).Font.Bold = True

Cells(2, 1).Characters(Start:=Len(Cells(2, 2).Value) + Len(Cells(2, 3).Value) + Len(Cells(2, 4).Value) + 1, Length:=Len(Cells(2, 5).Value)).Font.ColorIndex = xautomatic

Next Cel_C

End Sub

Mais voila je sais pas quoi mettre dans mes coordonnées de cellules pour la faire fonctionner.

Si quelqu'un pouvait me donner un coup de main, merci.

Bonjour et bienvenu sur le forum,

Il y a bien entendu plusieurs solutions possibles. Essaye le code suivant :

Sub ConcatGras()
    [A2].Select
    While ActiveCell.Offset(0, 1).Value <> "" Or ActiveCell.Offset(0, 2).Value <> "" Or ActiveCell.Offset(0, 3).Value <> "" Or ActiveCell.Offset(0, 4).Value <> ""
        ActiveCell.Value = ActiveCell.Offset(0, 1).Value & ActiveCell.Offset(0, 2).Value & ActiveCell.Offset(0, 3).Value & ActiveCell.Offset(0, 4).Value
        ActiveCell.Characters(Start:=Len(ActiveCell.Offset(0, 1).Value) + 1, Length:=(Len(ActiveCell.Offset(0, 2).Value)) + Len(ActiveCell.Offset(0, 3).Value)).Font.Bold = True
        ActiveCell.Offset(1, 0).Activate
    Wend
End Sub

Cdlt,

Re bonjour,

J'ai encore du mal avec cette forme la pour comprendre comment ca marche.

Mais ca marche très bien alors je vais voir comment l'assimiler et merci Raja.

Re,

1ère ligne sélectionne la cellule A2 et elle devient la cellule active.

La 2ème ligne du code est un boucle. Tant que les 4 cellules à droite de la cellule active ne sont pas en même temps vides, il continue.

La 3è ligne à l'intérieur de ce boucle concatène le contenu des 4 cellules à droite de la cellule active.

La 4ème ligne met le format Gras pour la longueur du texte calculée par la formule.

La 5ème change la cellule active en restant sur la colonne A.

Le boucle s'arrête quand il y a rien à concaténer.

Cdlt,

Super merci pour les explications.

Juste une chose quand je mets des espaces entre chaque cellule concaténée le gras ne s'applique plus correctement, je pensais que ca prenait tout le contenu de la cellule.

Y a un moyen de contourner ca ?

Ca y est j'ai trouvé à la place de mettre :

ActiveCell.Characters(Start:=Len(ActiveCell.Offset(0, 1).Value) + 1, Length:=(Len(ActiveCell.Offset(0, 2).Value)) + Len(ActiveCell.Offset(0, 3).Value)).Font.Bold

Je mets juste :

ActiveCell.Characters(Start:=11, Length:=Len(ActiveCell) - 20).Font.Bold

Alors c'est pas très modulable mais ca marche pour ma feuille.

C'est dommage j'aurais aimé le faire autrement.

Rechercher des sujets similaires à "vba etendre macro colonne"