Trouver/concaténer des cellules entre 2 cellules prédéfinies

Bonjour,

j'ai besoin de votre aide !!! Tout d'abord, je dois vous avouer que je ne connais pas trop excel... .... donc je n'ai même pas le début d'une ligne de code à vous soumettre......

Voilà, j'ai un fichier avec toutes mes données en colonne A, un peu dans cette idée là:

x

y

z

début

a

b

c

fin

s

z

J'aimerais avoir une formule pour parcourir cette colonne et récupérer les cellules comprises entre la cellule qui contient "début" et celle qui contient "fin", et concaténer ces cellules dans une seule cellule, dans une autre colonne et si possible avec un espace entre chaque donnée.

Je ne sais pas si c'est très clair....

Je ne peux pas fournir le fichier parce que c'est un fichier du boulot.

Merci pour votre aide.

bonsoir et bienvenue,

une proposition avec une fonction personnalisée.

après avoir copier le code ci-dessous dans un module vba tu auras à ta disposition la fonction concatborne(range,start,stop)

où range est une sélection de cellules (une seule colonne) dans laquelle doit se faire la recherche

où start est le mot qui détermine le début de la concaténation

où stop est le mot qui détermine la fin de la concaténation

exemple d'appel

=concatborne(A1:A20,"début","fin")

pour copier le code dans ton classeur

1) selectionner le code sur le forum (tout sélectionner)

2) copier avec ctrl-V

3) aller dans excel

4) alt-F11 pour activer l'editeur vba

5) menu>insérer->module

6) coller le code CTRL-V

7) alt-F11 pour retour dans les feuilles excel

8) la fonction concatborne devrait être disponible

Function concatborne(r As Range, m1 As String, m2 As String) As String
nl = r.Rows.Count
i = 1
For i = 1 To nl
If r.Cells(i, 1) = m1 And fd = False Then
 fd = True
ElseIf r.Cells(i, 1) = m2 Then
 Exit For
ElseIf fd = True Then
 st = st & sep & r.Cells(i, 1)
 If sep = "" Then sep = " "
End If
Next i
concatborne = st
End Function

Bonsoir,

merci beaucoup pour votre réponse.

J'ai testé et j'ai un message: "Erreur de compilation. Nom ambigu détecté: concatborne

J'ai du faire une mauvaise manip ou j'ai oublié de faire quelque chose....

pouvez-vous encore m'aider svp ?

bonsoir,

sort de ton document et sauves-en une copie au format xlsx (sans macro)

ferme excel

ouvre excel

ouvre ta copie au format xlsx

recommence l'opération

pour copier le code dans ton classeur

1) selectionner le code sur le forum (tout sélectionner)

2) copier avec ctrl-V

3) aller dans excel

4) alt-F11 pour activer l'editeur vba

5) menu>insérer->module

6) coller le code CTRL-V

7) alt-F11 pour retour dans les feuilles excel

8) la fonction concatborne devrait être disponible

Function concatborne(r As Range, m1 As String, m2 As String) As String
nl = r.Rows.Count
i = 1
For i = 1 To nl
If r.Cells(i, 1) = m1 And fd = False Then
 fd = True
ElseIf r.Cells(i, 1) = m2 Then
 Exit For
ElseIf fd = True Then
 st = st & sep & r.Cells(i, 1)
 If sep = "" Then sep = " "
End If
Next i
concatborne = st
End Function

bonjour,

merci, merci, merci !!!!!!!

c'est exactement le résultat souhaitée !!!!!!!

par contre, si je peux abuser encore un peu....

en fait, dans le fichier, j'ai toutes mes données dans la colonne A et j'ai énormément de lignes. Et la "séquence" se répète plusieurs fois dans la colonne A.

Quand j'utilise la fonction, je sélectionne toute la colonne A =concatborne(A:A;"Début";"Fin") et si je tire la fonction sur les lignes du dessous, elles me renvoient toutes le 1er résultat trouvé.

En fait, il faudrait que ça donne:

Données

z

e

Début

a

b

c

Fin

r

t

Début

aaa

bbb

fin

x

Résultat attendu dans une autre colonne

a b c

aaa bbb

Si vous avez encore une super idée......

mais sinon, encore merci pour la fonction concatborne !!!!

Bonjour,

je pense qu'une macro sera plus efficace

pour copier la macro, même procédure que pour la fonction

une fois copiée dans un module, lancer la macro via alt-f8

Sub ekb()
Application.ScreenUpdating = False
' paramètres à modifier éventuellement
m1 = UCase("Début")
m2 = UCase("Fin")
colonne = "A"
colonnedest = "B"
' fin des paramètres à modifier
i = 1
j = 0
While Cells(i, colonne) <> ""
If UCase(Cells(i, colonne)) = m1 And fd = False Then
 fd = True
ElseIf UCase(Cells(i, colonne)) = m2 Then
 If st <> "" Then
  j = j + 1
  Cells(j, colonnedest) = st
  st = ""
  sep = ""
 End If
  fd = False
ElseIf fd = True Then
 st = st & sep & Cells(i, colonne)
 If sep = "" Then sep = " "
End If
i = i + 1
Wend
Application.ScreenUpdating = True
End Sub

si tu veux garder l'idée d'une fonction personnalisée

voici la fonction adaptée j'y ai ajouté un nouveau paramètre

concatborne(range,start,stop,occurrence)

appeler la fonction de la manière suivante

=concatborne(a:a,;début";"fin";1)

=concatborne(a:a;"début";"fin";2)

si tu veux pouvoir copier la formule en la tirant vers le bas, mets dans une cellule en ligne 1

=concatborne(a:a;"début";"fin";ligne())

Function concatborne(r As Range, m1 As String, m2 As String, occ As Integer) As String

m1 = UCase(m1)
m2 = UCase(m2)
nl = r.Rows.Count
i = 1
j = 0
For i = 1 To nl
 If r.Cells(i, 1) = "" Then Exit For
If UCase(r.Cells(i, 1)) = m1 And fd = False Then
 fd = True
ElseIf UCase(r.Cells(i, 1)) = m2 Then
  fd = False
 If st <> "" Then
  j = j + 1
  If j = occ Then Exit For
  st = ""
  sep = ""
 End If

ElseIf fd = True Then
 st = st & sep & r.Cells(i, 1)
 If sep = "" Then sep = " "
End If
Next i
If fd = False And st <> "" Then concatborne = st
End Function

Bonjour,

mille fois merci !!!!!

c'est exactement ce que je voulais.

vous venez de me faire gagner un temps considérable.

Rechercher des sujets similaires à "trouver concatener entre predefinies"