Concaténer cellules entre deux cellules vide

Micke-31

XLDnaute Occasionnel
Bonjour à tous,

Est il possible en VBA de concatener un nombre variable de cellules dans une colonne entre deux cellules vides.
Exemple colonne B, B2 et B5 sont vide et les cellules entre contiennent une référence, en C5 je souhaiterai concatener ces références.

Si quelqu’un à la clé qui me manque je lui en serais très reconnaissant
 

vbacrumble

XLDnaute Accro
Re : Concaténer cellules entre deux cellules vide

Bonjour


En C5

Saisir cette formule

=B2&B3&B4&B5

En VBA, une petite macro (tu sélectionnes tes cellules avant de lancer la macro)
Code:
Sub concat()
Dim nl&, cc$, i&
nl = Selection.Rows.Count
For i = 1 To nl
If Not IsEmpty(Selection.Item(i)) Then
cc = cc & Selection.Item(i) & ";"
End If
Next
MsgBox Left(cc, Len(cc) - 1)
Range("C5") = cc
End Sub
 
Dernière édition:

Micke-31

XLDnaute Occasionnel
Re : Concaténer cellules entre deux cellules vide

Re le forum,

merci vbacrumble pour votre réponse, avec un petit exemple c'est surement mieux pour expliquer mes attentes si c'est possible !

A plus
 

Pièces jointes

  • Concatener.xls
    18.5 KB · Affichages: 165
  • Concatener.xls
    18.5 KB · Affichages: 169
  • Concatener.xls
    18.5 KB · Affichages: 166

Micke-31

XLDnaute Occasionnel
Re : Concaténer cellules entre deux cellules vide

Bon soir le forum,

une petite relance pour voir si quelqu'un serait inspiré par mon problème expliqué sur la pièce jointe de mon avant dernier message

En attendant merci à tous ceux qui se sont penché sur cette discussion
 

Tibo

XLDnaute Barbatruc
Re : Concaténer cellules entre deux cellules vide

Bonsoir,

Si, comme je le suppose, le nombre de cellules à concaténer est variable, une solution consisterait à utiliser la fonction MCONCAT issue de la macro complémentaire d'analyse de Laurent Longre (Morefunc) à télécharger sur son site :

Ce lien n'existe plus

Je te laisse voir si cette (nouvelle) fonction pourrait rtésoudre ton problème.

Bonne soirée

@+
 

Micke-31

XLDnaute Occasionnel
Re : Concaténer cellules entre deux cellules vide

Bonsoir Tibo,

Merci pour votre réponse, la page de téléchargement est inaccessible, pour mon projet, j’ai un peu avancé avec le code ci-dessous qui sélectionne une plage non vide à condition que les colonnes de part et d’autre de la colonne à traiter soient vide, ce qui n’est pas le cas et donc dans un premier temps à le contenir sur une colonne. Pour la concatenation j’ai déjà un peu bidouillé un code que j’insérerai dans une boucle.

Sub SelectionNonVides()
'sélectionner 1ere cellule non vide
For Each C In ActiveCell.CurrentRegion
If C <> "" Then
C.Select
Exit For
End If
Next

' extension sélection
For Each C In ActiveCell.CurrentRegion
If C <> "" Then
Range(Selection.Address + "," + C.Address).Select
End If
Next
End Sub

Merci pour votre réponce
 

Micke-31

XLDnaute Occasionnel
Re : Concaténer cellules entre deux cellules vide

Bonjour le forum,

Merci vbacrumble pour ta réponse matinale qui est une merveille de professionnalisme, J’ai un peu décortiqué ce code qui passe par une formule de concatenation dans la colonne A et retranscrite dans la colonne B j’ai essayé sans succès de mettre un séparateur (intervalle ou tiret etc) entre chaque série de chiffre ou lettre ex. A4-A5-A6
Peut être pourrais tu me donner cette dernière info

En te remerciant
 

vbacrumble

XLDnaute Accro
Re : Concaténer cellules entre deux cellules vide

Bonjour

Moi aussi j'ai bloqué la dessus

(Normal puisque je n'ai pas écrit cette partie du code, mais la dernière partie)

Je cherche encore car je ne connais pas trop ces histoire d'Areas.

PS: mais je peux te fournir une solution "caca" * ;)

*c-a-d du code VBA pas bô
 
Dernière édition:

Micke-31

XLDnaute Occasionnel
Re : Concaténer cellules entre deux cellules vide

Re,

merci quand même, peut être quelqu'un aura ou trouvera la solution, je ferai remonter cette discussion de temps en temps.
De mon coté j'ai trouvé la ligne de concatenation et ai réussi à mettre en première et dernière position un symbole, mais impossible entre chaque info issue de cellulle, peut être copier dans une colonne voisine en ajoutant un séparateur!
je cherche, et merci encore
 

Micke-31

XLDnaute Occasionnel
Re : Concaténer cellules entre deux cellules vide

Re,

Pour tous ceux qui suivent cette discussion, dans le code proposé par vbacrumble, j'ai modifié la ligne ci desous

strJoin = strJoin & rCell.Address & "&"

par cette ligne qui fait référence à C1 dans laquelle je saisis mon séparateur (espace ou - ou / etc...) ce qui me donne avec / A1/A2/A3/ ou R1-R5-R3-

strJoin = strJoin & rCell.Address & "&C1&"

Petit à petit on l'aura

A plus
 

vbacrumble

XLDnaute Accro
Re : Concaténer cellules entre deux cellules vide

Bonjour


A force de parcourir moults forums, on finit par tomber sur ce genre de code
qui lui n'a rien de cracra et qui en plus faisait presque ce que tu voulais

Deux, trois modifs (en bleu ma modeste contribution) plus tard , le voila tout chaud sorti du four.

Code:
Sub concatenation() [COLOR="Green"]'Crédits à Wim Gielis[/COLOR]
    Dim myArea As Range, myAreas As Areas, temp As String
    With Range("A1", Range("A" & Rows.Count).End(xlUp))
        On Error Resume Next
        Set myAreas = .SpecialCells(2).Areas
        If (myAreas Is Nothing) + (myAreas.Count = 1) Then Exit Sub
        On Error GoTo 0
        For Each myArea In myAreas
            If myArea.Rows.Count > 1 Then
                temp = Join(Evaluate("transpose(" & myArea.Address & ")"))
            Else
                temp = myArea.Value
            End If
             With myArea.Resize(1).Offset([COLOR="Blue"]myArea.Rows.Count[/COLOR], 1)
                .Value = [COLOR="Blue"]Replace(temp, " ", ";")[/COLOR]
            End With
        Next
    End With
End Sub
 

Micke-31

XLDnaute Occasionnel
Re : Concaténer cellules entre deux cellules vide

Salut vbacrumble,

Superbe, il n'y a rien d'autre à dire.

De mon côté j'ai parcouru également les forums, j'ai trouvé des codes approchants, mais là chapeau, je pense qu'il sera souvent copié.

dans cette optique, je vais ou nous allons modifier le code afin qu'il soit utilisable avec des valeurs autre que " " (vide) exemple 0 qui est souvent le résultat de formules ou autre valeur définie par l'utilisateur avant de le remettre dans cette discussion.

Merci encore
 

Discussions similaires